GDBDriver.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 09 Jun 2014 10:28:46 +0100
changeset 10 f04a22c9b16c
parent 9 5cc8797f6523
child 11 474fbb650afe
permissions -rw-r--r--
Use special PTY for inferior input/output... ...so gdb control streams are not interleaved with inferior's input/output.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'jv:libgdbs' }"
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
     3
Object subclass:#GDBDriver
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
     4
	instanceVariableNames:'pid debuggerInput debuggerOutput inferiorInput inferiorOutput
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
     5
		eventAnnouncer eventQueue eventQueueLock eventQueueNotifier
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
     6
		eventDispatchProcess eventPumpProcess'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
     8
	poolDictionaries:'GDBDebugFlags'
3
29ea333a1811 More work on events and parsing.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
     9
	category:'GDB-Private'
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    12
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    13
!GDBDriver class methodsFor:'instance creation'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    15
debuggerPid:pidArg debuggerInput:inputArg debuggerOutput:outputArg inferiorInput:inferiorInputArg inferiorOutput:inferiorOutputArg 
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    ^ self new 
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    17
        initializeWithDebuggerPid:pidArg
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    18
        debuggerInput:inputArg
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    19
        debuggerOutput:outputArg
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    20
        inferiorInput:inferiorInputArg
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    21
        inferiorOutput:inferiorOutputArg
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    "Created: / 26-05-2014 / 13:35:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    24
    "Modified: / 09-06-2014 / 09:20:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    27
!GDBDriver methodsFor:'accessing'!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    28
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    29
eventAnnouncer
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    30
    ^ eventAnnouncer
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    31
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    32
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    33
inferiorInput
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    34
    ^ inferiorInput
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    35
!
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    36
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    37
inferiorOutput
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
    38
    ^ inferiorOutput
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    39
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    40
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    41
!GDBDriver methodsFor:'event dispatching'!
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    42
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
    43
eventDispatchLoop
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    44
    "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
    45
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    46
    [  
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    47
        | eventQueueEmpty |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    48
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    49
        eventQueueEmpty := false.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    50
        [ eventQueueEmpty ] whileFalse:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    51
            | event |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    52
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    53
            event := nil.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    54
            eventQueueLock critical:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    55
                eventQueueEmpty := eventQueue isEmpty.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    56
                eventQueueEmpty ifFalse:[ 
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    57
                    event := eventQueue removeFirst.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    58
                ]
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    59
            ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    60
            eventQueueEmpty ifFalse:[
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
    61
                [
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
    62
                    self eventDispatchSingle: event.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
    63
                ] on: Error do:[:ex | 
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
    64
                    "/ Pass
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
    65
                ].
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    66
            ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    67
        ].
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    68
        pid isNil ifTrue:[ ^ self ]. "/ gdb process terninated
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    69
        eventQueueNotifier wait.
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    70
    ] loop.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    71
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    72
    "Created: / 02-06-2014 / 22:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    73
    "Modified (comment): / 04-06-2014 / 09:16:12 / 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
    74
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    75
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    76
eventDispatchSingle: aGDBEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    77
    TraceEvents ifTrue:[ 
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    78
        Logger log: ('event loop: broadcasting %1 (%2)' bindWith: aGDBEvent class name with: aGDBEvent token) severity: #trace facility: 'GDB'
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    79
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    80
    eventAnnouncer announce: aGDBEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    81
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    82
    "Created: / 02-06-2014 / 22:58:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    83
    "Modified: / 04-06-2014 / 09:21:21 / 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
    84
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    85
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    86
eventDispatchStart
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    87
    eventDispatchProcess isNil ifTrue:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    88
        eventDispatchProcess := [
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    89
                TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    90
                    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
    91
                ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    92
                self eventDispatchLoop.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    93
            ] newProcess.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    94
        eventDispatchProcess name:('GDB Event dispatcher (%1)' bindWith:pid).
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
    95
        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
    96
        eventDispatchProcess addExitAction:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    97
            eventDispatchProcess := nil. 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    98
            TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
    99
                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
   100
            ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   101
        ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   102
        eventDispatchProcess resume.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   103
    ].
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   104
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   105
    "Created: / 02-06-2014 / 22:51:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   106
    "Modified: / 04-06-2014 / 09:27:04 / 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
   107
!
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   108
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   109
eventDispatchStop
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   110
    | t |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   111
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   112
    t := eventDispatchProcess.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   113
    (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
   114
        eventDispatchProcess := nil.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   115
        t terminate.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   116
         "/ 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
   117
        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
   118
    ].
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   119
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   120
    "Created: / 02-06-2014 / 22:52:51 / 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
   121
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   122
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   123
!GDBDriver methodsFor:'event handling'!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   124
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   125
onCommand: aGDBCommandEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   126
    | command |
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   127
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   128
    command := aGDBCommandEvent command.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   129
    command token notNil ifTrue:[ 
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   130
        debuggerInput nextPutAll: command token printString.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   131
    ].
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   132
    debuggerInput nextPutLine: command asString.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   133
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   134
    "Created: / 02-06-2014 / 23:38:59 / 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
   135
! !
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   136
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   137
!GDBDriver methodsFor:'event pump'!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   138
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   139
eventPumpLoop
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   140
    | parser |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   141
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   142
    parser := GDBParser on: debuggerOutput.
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   143
    [ debuggerOutput atEnd ] whileFalse:[ 
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   144
        | eventset |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   145
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   146
        [
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   147
            [ 
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   148
                eventset := parser parseOutput.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   149
            ] on: StreamNotOpenError do:[
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   150
                ^ self.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   151
            ].
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   152
            self pushEventSet: eventset.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   153
        ] on: AbortOperationRequest do:[
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   154
            | terminator i c |
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   155
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   156
            terminator := '(gdb)'.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   157
            i := 1.
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   158
            debuggerOutput notNil ifTrue:[
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   159
                [ debuggerOutput atEnd not and: [i <= terminator size ] ] whileTrue:[ 
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   160
                    c := debuggerOutput next.
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   161
                    c == (terminator at: i) ifTrue:[ 
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   162
                        i := i + 1.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   163
                    ] ifFalse:[ 
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   164
                        i := 1.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   165
                    ].
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   166
                ].
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   167
                debuggerOutput next. "/ read nl.
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   168
            ] ifFalse:[ 
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   169
                ^ self.
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   170
            ].
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   171
        ]
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   172
    ]
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   173
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   174
    "Created: / 02-06-2014 / 22:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   175
    "Modified: / 03-06-2014 / 00:54:11 / 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
   176
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   177
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   178
eventPumpStart
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   179
    eventPumpProcess isNil ifTrue:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   180
        eventPumpProcess := [
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   181
                TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   182
                    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
   183
                ].
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   184
                self eventPumpLoop
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   185
            ] newProcess.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   186
        eventPumpProcess name:('GDB Event pump (%1)' bindWith:pid).
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   187
        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
   188
        eventPumpProcess addExitAction:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   189
            TraceEvents ifTrue:[
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   190
                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
   191
            ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   192
            eventPumpProcess := nil. 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   193
        ].
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   194
        eventPumpProcess resume.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   195
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   196
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   197
    "Created: / 02-06-2014 / 22:38:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   198
    "Modified: / 04-06-2014 / 09:27:12 / 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
   199
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   200
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   201
eventPumpStop
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   202
    | t |
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   203
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   204
    t := eventPumpProcess.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   205
    (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
   206
        eventPumpProcess := nil.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   207
        t terminate.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   208
         "/ 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
   209
        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
   210
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   211
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   212
    "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
   213
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   214
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   215
!GDBDriver methodsFor:'events'!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   216
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   217
pushEvent: aGDBEvent
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   218
    eventQueueLock critical:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   219
        eventQueue add: aGDBEvent.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   220
        eventQueueNotifier signalForAll.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   221
    ].
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
    "Created: / 02-06-2014 / 22:49:49 / 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
   224
!
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   225
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   226
pushEventSet: aGDBEventSet
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   227
    eventQueueLock critical:[
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   228
        eventQueue addAll: aGDBEventSet.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   229
        eventQueueNotifier signalForAll.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   230
    ].
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   231
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   232
    "Created: / 02-06-2014 / 22:42:54 / 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
   233
! !
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   234
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   235
!GDBDriver methodsFor:'initialize & release'!
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   237
initializeWithDebuggerPid:pidArg debuggerInput:inputArg debuggerOutput:outputArg inferiorInput:inferiorInputArg inferiorOutput:inferiorOutputArg 
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    pid := pidArg.
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   239
    debuggerInput := inputArg.
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   240
    debuggerOutput := outputArg.
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   241
    inferiorInput := inferiorInputArg.
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   242
    inferiorOutput := inferiorOutputArg.
2
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   243
    eventQueue := OrderedCollection new.
a96eb336dbd3 More work reading.writing GDB events/commands
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   244
    eventQueueLock := RecursionLock new.
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   245
    eventQueueNotifier := Semaphore new.
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   246
    eventAnnouncer := Announcer new.
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   247
    eventAnnouncer 
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   248
        when:GDBCommandEvent
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   249
        send:#onCommand:
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   250
        to:self.
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
    "Created: / 26-05-2014 / 13:35:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   253
    "Modified: / 09-06-2014 / 09:14:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
release
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    pid notNil ifTrue:[
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
        OperatingSystem sendSignal:(OperatingSystem sigKILL) to:pid.       
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
    ]
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    "Created: / 26-05-2014 / 21:30:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8
7f4882e2562a More work on basic example. GDB exiting not yet working.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 7
diff changeset
   262
    "Modified: / 03-06-2014 / 00:55:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
!
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
released: status
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   266
    TraceProcesses ifTrue:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   267
        Logger log: ('gdb process: terminated with status %1' bindWith: status code)  severity: #trace facility: 'GDB'.
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   268
    ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   269
    TraceProcesses ifTrue:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   270
        Logger log: ('gdb process: waiting for event pump to finish' bindWith: status code)  severity: #trace facility: 'GDB'.
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   271
    ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   272
    [ eventPumpProcess notNil ] whileTrue:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   273
        Delay waitForMilliseconds: 200.  
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   274
    ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   275
    TraceProcesses ifTrue:[ 
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   276
        Logger log: ('gdb process: event pump finished' bindWith: status code)  severity: #trace facility: 'GDB'.
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   277
    ].
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   278
    pid := nil.       
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   279
    eventQueueNotifier signalForAll.           
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   280
    debuggerInput notNil ifTrue:[ 
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   281
        debuggerInput close.
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   282
        debuggerInput := nil.
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   283
    ].
10
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   284
    debuggerOutput notNil ifTrue:[ 
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   285
        debuggerOutput close.
f04a22c9b16c Use special PTY for inferior input/output...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 9
diff changeset
   286
        debuggerOutput := nil.
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   287
    ].
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
    "Created: / 26-05-2014 / 21:31:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9
5cc8797f6523 Make simple example with -gdb-exit command working
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 8
diff changeset
   290
    "Modified: / 04-06-2014 / 09:20:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
0
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
! !
0b9e93821620 First shot (merely backup)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
7
7a51f98e7162 Initial implementation of event dispatcher and event pump.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 3
diff changeset
   293
!GDBDriver class methodsFor:'documentation'!
1
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   294
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   295
version_HG
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   296
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   297
    ^ '$Changeset: <not expanded> $'
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   298
! !
da21f8614c2d Fixes in GDBLauncher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   299