@@ -5,30 +5,35 @@ import SystemPackage
55import WasmKit
66
77package actor WasmKitDebugger {
8+ enum Error : Swift . Error {
9+ case unknownTransferArguments
10+ }
11+
812 private let module : Module
13+ private let moduleFilePath : FilePath
914 private let logger : Logger
1015
1116 package init ( logger: Logger , moduleFilePath: FilePath ) throws {
1217 self . logger = logger
1318 self . module = try parseWasm ( filePath: moduleFilePath)
19+ self . moduleFilePath = moduleFilePath
1420 }
1521
16- package func handle( command: GDBHostCommand ) -> GDBTargetResponse {
22+ package func handle( command: GDBHostCommand ) throws -> GDBTargetResponse {
1723 let responseKind : GDBTargetResponse . Kind
1824 logger. trace ( " handling GDB host command " , metadata: [ " GDBHostCommand " : . string( command. kind. rawValue) ] )
1925
2026 var isNoAckModeActivated = false
21- responseKind =
2227 switch command. kind {
2328 case . startNoAckMode:
2429 isNoAckModeActivated = true
2530 fallthrough
2631
2732 case . isThreadSuffixSupported, . listThreadsInStopReply:
28- . ok
33+ responseKind = . ok
2934
3035 case . hostInfo:
31- . keyValuePairs( [
36+ responseKind = . keyValuePairs( [
3237 " arch " : " wasm32 " ,
3338 " ptrsize " : " 4 " ,
3439 " endian " : " little " ,
@@ -37,15 +42,16 @@ package actor WasmKitDebugger {
3742 ] )
3843
3944 case . supportedFeatures:
40- . raw( " qXfer:libraries:read+;PacketSize=1000; " )
45+ responseKind = . raw( " qXfer:libraries:read+;PacketSize=1000; " )
4146
4247 case . vContSupportedActions:
43- . vContSupportedActions( [ . continue, . step] )
48+ responseKind = . vContSupportedActions( [ . continue, . step] )
49+
50+ case . isVAttachOrWaitSupported, . enableErrorStrings, . structuredDataPlugins, . readMemoryBinaryData:
51+ responseKind = . empty
4452
45- case . isVAttachOrWaitSupported, . enableErrorStrings:
46- . empty
4753 case . processInfo:
48- . keyValuePairs( [
54+ responseKind = . keyValuePairs( [
4955 " pid " : " 1 " ,
5056 " parent-pid " : " 1 " ,
5157 " arch " : " wasm32 " ,
@@ -54,23 +60,23 @@ package actor WasmKitDebugger {
5460 ] )
5561
5662 case . currentThreadID:
57- . raw( " QC1 " )
63+ responseKind = . raw( " QC1 " )
5864
5965 case . firstThreadInfo:
60- . raw( " m1 " )
66+ responseKind = . raw( " m1 " )
6167
6268 case . subsequentThreadInfo:
63- . raw( " l " )
69+ responseKind = . raw( " l " )
6470
6571 case . targetStatus:
66- . keyValuePairs( [
72+ responseKind = . keyValuePairs( [
6773 " T05thread " : " 1 " ,
6874 " reason " : " trace " ,
6975 ] )
7076
7177 case . registerInfo:
7278 if command. arguments == " 0 " {
73- . keyValuePairs( [
79+ responseKind = . keyValuePairs( [
7480 " name " : " pc " ,
7581 " bitsize " : " 64 " ,
7682 " offset " : " 0 " ,
@@ -82,10 +88,24 @@ package actor WasmKitDebugger {
8288 " generic " : " pc " ,
8389 ] )
8490 } else {
85- . raw( " E45 " )
91+ responseKind = . raw( " E45 " )
8692 }
8793
88- case . generalRegisters:
94+ case . transfer:
95+ if command. arguments. starts ( with: " libraries:read: " ) {
96+ responseKind = . raw( """
97+ l<library-list>
98+ <library name= " \( self . moduleFilePath. string) " ><section address= " 0x4000000000000000 " /></library>
99+ </library-list>
100+ """ )
101+ } else {
102+ throw Error . unknownTransferArguments
103+ }
104+
105+ case . readMemory:
106+ responseKind = . empty
107+
108+ case . wasmCallStack, . generalRegisters:
89109 fatalError ( )
90110 }
91111
0 commit comments