File tree Expand file tree Collapse file tree 3 files changed +25
-4
lines changed Expand file tree Collapse file tree 3 files changed +25
-4
lines changed Original file line number Diff line number Diff line change @@ -38,6 +38,7 @@ package struct GDBHostCommand: Equatable {
3838 case readMemoryBinaryData
3939 case readMemory
4040 case wasmCallStack
41+ case threadStopInfo
4142
4243 case generalRegisters
4344
@@ -97,6 +98,7 @@ package struct GDBHostCommand: Equatable {
9798 /// - arguments: raw arguments that immediately follow kind of the command.
9899 package init ( kindString: String , arguments: String ) throws ( GDBHostCommandDecoder. Error) {
99100 let registerInfoPrefix = " qRegisterInfo "
101+ let threadStopInfoPrefix = " qThreadStopInfo "
100102
101103 if kindString. starts ( with: " x " ) {
102104 self . kind = . readMemoryBinaryData
@@ -109,6 +111,14 @@ package struct GDBHostCommand: Equatable {
109111 } else if kindString. starts ( with: registerInfoPrefix) {
110112 self . kind = . registerInfo
111113
114+ guard arguments. isEmpty else {
115+ throw GDBHostCommandDecoder . Error. unexpectedArgumentsValue
116+ }
117+ self . arguments = String ( kindString. dropFirst ( registerInfoPrefix. count) )
118+ return
119+ } else if kindString. starts ( with: threadStopInfoPrefix) {
120+ self . kind = . threadStopInfo
121+
112122 guard arguments. isEmpty else {
113123 throw GDBHostCommandDecoder . Error. unexpectedArgumentsValue
114124 }
Original file line number Diff line number Diff line change 1111//===----------------------------------------------------------------------===//
1212
1313import Foundation
14+ import Logging
1415import NIOCore
1516
1617extension String {
@@ -27,7 +28,12 @@ extension String {
2728package class GDBTargetResponseEncoder : MessageToByteEncoder {
2829 private var isNoAckModeActive = false
2930
30- package init ( ) { }
31+ private let logger : Logger
32+
33+ package init ( logger: Logger ) {
34+ self . logger = logger
35+ }
36+
3137 package func encode( data: GDBTargetResponse , out: inout ByteBuffer ) {
3238 if !isNoAckModeActive {
3339 out. writeInteger ( UInt8 ( ascii: " + " ) )
@@ -51,8 +57,9 @@ package class GDBTargetResponseEncoder: MessageToByteEncoder {
5157 out. writeString ( str. appendedChecksum)
5258
5359 case . hexEncodedBinary( let binary) :
54- let hexDump = ByteBuffer ( bytes: binary) . hexDump ( format: . compact)
55- out. writeString ( hexDump. appendedChecksum)
60+ let hexDumpResponse = ByteBuffer ( bytes: binary) . hexDump ( format: . compact) . appendedChecksum
61+ self . logger. trace ( " GDBTargetResponseEncoder encoded a response " , metadata: [ " RawResponse " : . string( hexDumpResponse) ] )
62+ out. writeString ( hexDumpResponse)
5663
5764 case . empty:
5865 out. writeString ( " " . appendedChecksum)
Original file line number Diff line number Diff line change 3838 enum Error : Swift . Error {
3939 case unknownTransferArguments
4040 case unknownReadMemoryArguments
41+ case stoppingAtEntrypointFailed
4142 }
4243
4344 private let wasmBinary : ByteBuffer
6364
6465 self . debugger = try Debugger ( module: parseWasm ( bytes: . init( buffer: self . wasmBinary) ) , store: store, imports: imports)
6566 try self . debugger. stopAtEntrypoint ( )
67+ guard try self . debugger. run ( ) == nil else {
68+ throw Error . stoppingAtEntrypointFailed
69+ }
6670 }
6771
6872 package func handle( command: GDBHostCommand ) throws -> GDBTargetResponse {
114118 case . subsequentThreadInfo:
115119 responseKind = . string( " l " )
116120
117- case . targetStatus:
121+ case . targetStatus, . threadStopInfo :
118122 responseKind = . keyValuePairs( [
119123 " T05thread " : " 1 " ,
120124 " reason " : " trace " ,
You can’t perform that action at this time.
0 commit comments