GDBConnection.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 28 Jan 2019 14:56:14 +0000
changeset 173 02546d4fbe6d
parent 170 6cf990ac2cad
child 185 4e1be69b39ce
permissions -rw-r--r--
Fix frame of `GDBThreadSelectedEvent` if inferior is running When ifnferior is running at time we get `=thread-selected` event, we should at least make that frame kind of usable by fixing up it's debugger and thread. This allow clients to use (to some extent) event's frame without worring (too much) about these details.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     1
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     2
jv:libgdbs - GNU Debugger Interface Library
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     3
Copyright (C) 2015-now Jan Vrany
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     4
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     5
This library is free software; you can redistribute it and/or
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     7
License as published by the Free Software Foundation; either
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     8
version 2.1 of the License. 
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
     9
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    10
This library is distributed in the hope that it will be useful,
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    13
Lesser General Public License for more details.
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    14
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    16
License along with this library; if not, write to the Free Software
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    18
"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
"{ Package: 'jv:libgdbs' }"
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
53
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
    21
"{ NameSpace: Smalltalk }"
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
    22
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    23
Object subclass:#GDBConnection
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    24
	instanceVariableNames:'process inferiorPTY eventAnnouncer eventAnnouncerInternal
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
    25
		eventQueue eventQueueLock eventDispatchNotifier
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
    26
		eventDispatchProcess eventDispatchProcessStopping
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
    27
		eventPumpProcess outstandingCommands recorder'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	classVariableNames:''
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    29
	poolDictionaries:'GDBDebugFlags'
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    30
	category:'GDB-Private'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
91
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    33
!GDBConnection class methodsFor:'documentation'!
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    34
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    35
copyright
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    36
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    37
jv:libgdbs - GNU Debugger Interface Library
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    38
Copyright (C) 2015-now Jan Vrany
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    39
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    40
This library is free software; you can redistribute it and/or
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    41
modify it under the terms of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    42
License as published by the Free Software Foundation; either
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    43
version 2.1 of the License. 
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    44
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    45
This library is distributed in the hope that it will be useful,
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    46
but WITHOUT ANY WARRANTY; without even the implied warranty of
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    47
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    48
Lesser General Public License for more details.
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    49
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    50
You should have received a copy of the GNU Lesser General Public
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    51
License along with this library; if not, write to the Free Software
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    52
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    53
"
472a4841a8b6 License this package under 'GNU Lesser General Public License'
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 85
diff changeset
    54
! !
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    55
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    56
!GDBConnection class methodsFor:'instance creation'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    58
new
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    59
    ^ self shouldNotImplement.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    61
    "Created: / 20-06-2014 / 21:45:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    62
!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    63
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    64
newWithProcess: aGDBProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    65
    ^ self basicNew initializeWithProcess: aGDBProcess
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    66
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
    67
    "Created: / 20-06-2014 / 21:45:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
    70
!GDBConnection methodsFor:'accessing'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    71
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    72
consoleInput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    73
    ^ process consoleInput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    74
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    75
    "Created: / 02-06-2017 / 23:34:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    76
!
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    77
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    78
consoleOutput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    79
    ^ process consoleOutput
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    80
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    81
    "Created: / 02-06-2017 / 23:35:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    82
!
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
    83
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    84
eventAnnouncer
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    85
    ^ eventAnnouncer
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    86
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    87
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
    88
eventAnnouncerInternal
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
    89
    ^ eventAnnouncerInternal
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
    90
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
    91
    "Created: / 19-06-2014 / 22:18:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
    92
!
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
    93
11
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    94
inferiorPTY
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
    95
    ^ inferiorPTY
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    96
!
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
    97
116
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
    98
nativeTargetFeatures
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
    99
    ^ process nativeTargetFeatures
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   100
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   101
    "Created: / 09-04-2018 / 15:40:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   102
!
ffd185f7a357 Fix: initialize debugger features early during initialization
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 113
diff changeset
   103
39
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   104
recorder
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   105
    ^ recorder
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   106
!
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   107
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   108
recorder:aGDBSessionRecorder
2b9d2f75906f Some work on execution stack model
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 36
diff changeset
   109
    recorder := aGDBSessionRecorder.
113
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   110
!
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   111
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   112
trace
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   113
    "Returns a GDB.MI record (trrace). Used for debugging GDB/MI communication."
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   114
    
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   115
    ^ self recorder trace
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   116
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   117
    "Created: / 09-03-2018 / 09:49:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   118
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   119
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   120
!GDBConnection methodsFor:'commands'!
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   121
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   122
send: command
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   123
    | commandString |
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   124
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
   125
    commandString := command asString.
25
58e042a191a9 More work on GDB session recorder.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   126
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   127
    outstandingCommands add: command.
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   128
    recorder notNil ifTrue:[ 
25
58e042a191a9 More work on GDB session recorder.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
   129
        recorder recordCommand: commandString
24
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   130
    ].  
98ff50f8a25d Temporary commit : initial work on session recorder (to use for simulation later)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 23
diff changeset
   131
    process debuggerInput nextPutLine: commandString.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   132
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   133
    "Created: / 20-06-2014 / 22:09:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
85
6fea1000a2a5 Implemented proper quoting of MI commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 79
diff changeset
   134
    "Modified: / 11-07-2017 / 22:39:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   135
! !
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   136
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   137
!GDBConnection methodsFor:'event dispatching'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   138
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   139
eventDispatchLoop
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   140
    "raise an error: this method should be implemented (TODO)"
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   141
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   142
    [  
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   143
        | eventQueueEmpty |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   144
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   145
        eventQueueEmpty := false.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   146
        [ eventQueueEmpty ] whileFalse:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   147
            | event |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   148
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   149
            event := nil.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   150
            eventQueueLock critical:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   151
                eventQueueEmpty := eventQueue isEmpty.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   152
                eventQueueEmpty ifFalse:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   153
                    event := eventQueue removeFirst.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   154
                ]
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   155
            ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   156
            eventQueueEmpty ifFalse:[
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   157
                (AbortOperationRequest , AbortAllOperationRequest) ignoreIn:[
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   158
                    self eventDispatchSingle: event.
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   159
                ]
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   160
            ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   161
        ].
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   162
        eventDispatchProcessStopping == true ifTrue:[ 
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   163
            ^ self.
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   164
        ].
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   165
        eventDispatchNotifier wait.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   166
    ] loop.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   167
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   168
    "Created: / 02-06-2014 / 22:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   169
    "Modified: / 14-01-2018 / 21:54:32 / jv"
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   170
    "Modified: / 02-10-2018 / 13:35:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   171
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   172
41
fb48207b6104 Fixes in thread's stack mangement. Dispatch events to applications using their UI event loop.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   173
eventDispatchProcess
fb48207b6104 Fixes in thread's stack mangement. Dispatch events to applications using their UI event loop.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 39
diff changeset
   174
    ^ eventDispatchProcess
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   175
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   176
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   177
eventDispatchSingle: aGDBEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   178
    TraceEvents ifTrue:[ 
53
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   179
        Logger log: ('event loop: broadcasting %1 (%2)' bindWith: aGDBEvent class name with: aGDBEvent token) severity: #trace facility: 'GDB' originator: self attachment: aGDBEvent
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   180
    ].
19
c48d33e27d34 Added internal announcer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 18
diff changeset
   181
    eventAnnouncerInternal announce: aGDBEvent.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   182
    eventAnnouncer announce: aGDBEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   183
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   184
    "Created: / 02-06-2014 / 22:58:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
53
63669c2c0f9e Test fixes
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 45
diff changeset
   185
    "Modified: / 27-02-2015 / 09:49:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   186
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   187
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   188
eventDispatchStart
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   189
    eventDispatchProcess isNil ifTrue:[
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   190
        eventDispatchProcessStopping := false.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   191
        eventDispatchProcess := [
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   192
                TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   193
                    Logger log: 'event loop: starting' severity: #trace facility: 'GDB'
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   194
                ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   195
                self eventDispatchLoop.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   196
            ] newProcess.
152
fab425b52c21 Refactor `GDBProcess` hierarchy to improve portability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   197
        eventDispatchProcess name:('GDB Event dispatcher (%1)' bindWith:process id).
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   198
        eventDispatchProcess priority:Processor userBackgroundPriority.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   199
        eventDispatchProcess addExitAction:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   200
            eventDispatchProcess := nil. 
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   201
            eventDispatchProcessStopping := nil.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   202
            TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   203
                Logger log: 'event loop: terminated' severity: #trace facility: 'GDB'
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   204
            ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   205
        ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   206
        eventDispatchProcess resume.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   207
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   208
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   209
    "Created: / 02-06-2014 / 22:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
152
fab425b52c21 Refactor `GDBProcess` hierarchy to improve portability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   210
    "Modified: / 19-10-2018 / 10:11:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   211
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   212
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   213
eventDispatchStop            
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   214
    eventDispatchProcessStopping := true.
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   215
    eventDispatchNotifier signal.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   216
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   217
    "Created: / 02-06-2014 / 22:52:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   218
    "Modified: / 02-10-2018 / 14:00:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   219
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   220
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   221
!GDBConnection methodsFor:'event pump'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   222
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   223
eventPumpLoop
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   224
    | parser done |
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   225
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   226
    parser := GDBMIParser on:process debuggerOutput.
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   227
    parser 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   228
        token2CommandMappingBlock:[:token | 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   229
            | command |
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   230
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   231
            command := outstandingCommands 
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   232
                    detect:[:cmd | cmd token == token ]
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   233
                    ifNone:[ nil ].
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   234
            command notNil ifTrue:[
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   235
                outstandingCommands remove:command
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   236
            ].
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   237
            command
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   238
        ].
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   239
    parser recorder:recorder.
57
f27c9f059a08 When starting an event loop, allow for GDB to ouput some random messages when it start up.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 55
diff changeset
   240
    parser parsePostStartHeader.
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   241
    done := false.
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   242
    [
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   243
        [
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   244
            done or:[ process debuggerOutput atEnd ]
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   245
        ] on: TerminateProcessRequest do:[:request| 
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   246
            done := true.    
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   247
        ].
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   248
    ] whileFalse:[
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   249
        | eventset |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   250
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   251
        [
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   252
            [
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   253
                eventset := parser parseOutput.
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   254
                (eventset contains:[:each | each isCommandResultEvent and:[ each status == #exit] ]) ifTrue:[ 
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   255
                    done := true.
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   256
                ].
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   257
            ] on:StreamNotOpenError do:[ ^ self. ].
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   258
            self pushEventSet:eventset.
55
437ee6413c74 Initial support for variables
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 53
diff changeset
   259
        ] on:AbortOperationRequest do:[
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   260
            | terminator  i  c |
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   261
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   262
            terminator := '(gdb)'.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   263
            i := 1.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   264
            process debuggerOutput notNil ifTrue:[
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   265
                [
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   266
                    process debuggerOutput atEnd not and:[ i <= terminator size ]
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   267
                ] whileTrue:[
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   268
                    c := process debuggerOutput next.
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   269
                    c == (terminator at:i) ifTrue:[
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   270
                        i := i + 1.
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   271
                    ] ifFalse:[ i := 1. ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   272
                ].
45
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   273
                process debuggerOutput next.
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   274
                "/ read nl.
deb908479a37 Code refactored to use Magritte to meta-describe GDB objects.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 42
diff changeset
   275
            ] ifFalse:[ ^ self. ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   276
        ]
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   277
    ]
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   278
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   279
    "Created: / 02-06-2014 / 22:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   280
    "Modified: / 01-06-2017 / 22:22:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   281
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   282
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   283
eventPumpStart
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   284
    eventPumpProcess isNil ifTrue:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   285
        eventPumpProcess := [
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   286
                TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   287
                    Logger log: 'event pump: starting' severity: #trace facility: 'GDB'
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   288
                ].
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   289
                self eventPumpLoop
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   290
            ] newProcess.
152
fab425b52c21 Refactor `GDBProcess` hierarchy to improve portability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   291
        eventPumpProcess name:('GDB Event pump (%1)' bindWith:process id).
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   292
        eventPumpProcess priority:Processor userBackgroundPriority.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   293
        eventPumpProcess addExitAction:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   294
            TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   295
                Logger log: 'event pump: terminated' severity: #trace facility: 'GDB'
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   296
            ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   297
            eventPumpProcess := nil. 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   298
        ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   299
        eventPumpProcess resume.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   300
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   301
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   302
    "Created: / 02-06-2014 / 22:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
152
fab425b52c21 Refactor `GDBProcess` hierarchy to improve portability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   303
    "Modified: / 19-10-2018 / 10:07:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   304
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   305
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   306
eventPumpStop
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   307
    | t |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   308
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   309
    t := eventPumpProcess.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   310
    (t notNil and:[ t isDead not]) ifTrue:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   311
        eventPumpProcess := nil.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   312
        t terminate.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   313
         "/ raise its prio to make it terminate quickly
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   314
        t priority:(Processor userSchedulingPriority + 1)                       
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   315
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   316
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   317
    "Created: / 02-06-2014 / 22:40:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   318
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   319
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   320
!GDBConnection methodsFor:'events'!
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   321
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   322
pushEvent: aGDBEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   323
    eventQueueLock critical:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   324
        eventQueue add: aGDBEvent.
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   325
        eventDispatchNotifier signal.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   326
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   327
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   328
    "Created: / 02-06-2014 / 22:49:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   329
    "Modified: / 02-10-2018 / 14:00:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   330
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   331
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   332
pushEventSet: aGDBEventSet
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   333
    eventQueueLock critical:[
42
499dc5d38707 Introduced GDBEventSetProcessingStarted/Finished synthetic events.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   334
        eventQueue add: (GDBEventSetProcessingStarted new setEventSet: aGDBEventSet).  
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   335
        eventQueue addAll: aGDBEventSet.
42
499dc5d38707 Introduced GDBEventSetProcessingStarted/Finished synthetic events.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 41
diff changeset
   336
        eventQueue add: (GDBEventSetProcessingFinished new setEventSet: aGDBEventSet).
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   337
        eventDispatchNotifier signal.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   338
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   339
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   340
    "Created: / 02-06-2014 / 22:42:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   341
    "Modified: / 02-10-2018 / 14:00:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   342
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   343
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   344
!GDBConnection methodsFor:'initialize & release'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
113
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   346
initializeWithProcess:aGDBProcess 
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   347
    process := aGDBProcess.
167
6da3d808c7cc Use inferior PTY only if supported
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   348
    (OperatingSystem isUNIXlike and:[aGDBProcess canUsePTY]) ifTrue:[
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   349
        inferiorPTY := GDBPTY new.
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   350
    ].
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   351
    eventQueue := OrderedCollection new.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   352
    eventQueueLock := RecursionLock new.
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   353
    eventDispatchNotifier := Semaphore new.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   354
    eventAnnouncer := Announcer new.
113
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   355
    eventAnnouncer subscriptionRegistry 
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   356
        subscriptionClass:GDBEventSubscription.
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   357
    eventAnnouncerInternal := Announcer new.
18
6bf3d5c400d1 Make GDBEvent and GDBCommandResult also described by value descriptor...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 11
diff changeset
   358
    outstandingCommands := Set new.
113
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   359
    recorder := GDBMITracer new.
c4f07d0e7b7a GNI/MI: added custom inspector view for viewing GDB/MI comminicatication trace
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 105
diff changeset
   360
    aGDBProcess connection:self.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   362
    "Created: / 20-06-2014 / 21:40:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   363
    "Modified: / 12-01-2018 / 00:12:25 / jv"
167
6da3d808c7cc Use inferior PTY only if supported
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 152
diff changeset
   364
    "Modified: / 16-01-2019 / 23:02:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
release
152
fab425b52c21 Refactor `GDBProcess` hierarchy to improve portability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   368
    process release
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
    "Created: / 26-05-2014 / 21:30:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
95
f417138e9c48 Win32: initial support for Windows
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 91
diff changeset
   371
    "Modified: / 12-01-2018 / 15:09:00 / jv"
152
fab425b52c21 Refactor `GDBProcess` hierarchy to improve portability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 147
diff changeset
   372
    "Modified: / 20-10-2018 / 07:10:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
released: status
121
c99479329a46 Pass MI trace in the exit event
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 116
diff changeset
   376
    self pushEvent: (GDBExitEvent new setStatus: status; setTrace: recorder; yourself).  
105
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   377
    status success ifFalse:[ 
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   378
        Logger log: ('gdb process: exited with status %1 code %2' bindWith: status status with: status code)  severity: #error facility: 'GDB'.
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   379
    ].
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   380
    TraceProcesses ifTrue:[ 
105
1d4ca4370d05 Report gdb's exist status in `GDBExitEvent` in case `gdb` terminates prematurely
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
   381
        Logger log: ('gdb process: exited') severity: #trace facility: 'GDB'.
31
1d8d532f27fd Fixed leaking processes when using GDBSimulatorProcess.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
   382
        Logger log: 'gdb process: waiting for event pump to finish' severity: #trace facility: 'GDB'.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   383
    ].
79
303c4edc75ad `GDBProcess` refatored to have console interpreter on STDIN/STDOUT
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 78
diff changeset
   384
    self eventPumpStop.
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   385
    self eventDispatchStop.
23
a7eb888c81b5 Introduced GDBProcess - a class encapsulating gdb OS process.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 22
diff changeset
   386
    process release.
11
474fbb650afe PTY support refactored to use GDBPTY object.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 10
diff changeset
   387
    inferiorPTY release.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
    "Created: / 26-05-2014 / 21:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
147
4b05154f2723 Minor cleanup and refactoring in event dispatch loop
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   390
    "Modified: / 02-10-2018 / 13:37:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
170
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   393
!GDBConnection methodsFor:'queries'!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   394
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   395
hasPendingCommands
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   396
    | anyCommandEventPending |
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   397
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   398
    "/ This is more tricky. There are pending commands if:
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   399
    "/ 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   400
    "/  * there's at least one GDBCommandEvent in event queue
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   401
    "/    (command it sent on API level but not yet sent to GDB), or
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   402
    "/  * there's at least one outstanding command (command has been
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   403
    "/    sent to GDB but response not yet arrived), or
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   404
    "/  * there's at least one GDBCommandResultEvent (command response
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   405
    "/    was received but not yet dispatched and handled.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   406
    "/ 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   407
    "/ 
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   408
    outstandingCommands notEmpty ifTrue:[ ^ true ].
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   409
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   410
    "/ Here, synchronization is required since we iterate over
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   411
    "/ collection...
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   412
    eventQueueLock critical:[
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   413
        anyCommandEventPending := eventQueue anySatisfy:[:e|e class == GDBCommandEvent or:[e class == GDBCommandResultEvent ] ]
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   414
    ].
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   415
    ^ anyCommandEventPending
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   416
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   417
    "Created: / 23-01-2019 / 20:50:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   418
!
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   419
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   420
hasPendingEvents
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   421
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   422
    "/ Note that there's no obligation for this information to
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   423
    "/ be 100% accurate, so no need for symchronization here.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   424
    ^ eventQueue notEmpty.
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   425
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   426
    "Created: / 23-01-2019 / 20:41:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   427
! !
6cf990ac2cad Add `GDBDebugger >> #waitForAllEventsProcessed` and `#waitForAllCommandsProcessed`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 167
diff changeset
   428
22
57025871aed4 Renamed GDBDriver to GDBConnection.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 19
diff changeset
   429
!GDBConnection class methodsFor:'documentation'!
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   430
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   431
version_HG
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   432
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   433
    ^ '$Changeset: <not expanded> $'
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   434
! !
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   435