@@ -54,14 +54,22 @@ module System.Win32.DebugApi
54
54
, useAllRegs
55
55
, withThreadContext
56
56
57
- #if __i386__
57
+ #if defined(i386_HOST_ARCH)
58
58
, eax , ebx , ecx , edx , esi , edi , ebp , eip , esp
59
- #elif __x86_64__
59
+ #elif defined(x86_64_HOST_ARCH)
60
60
, rax , rbx , rcx , rdx , rsi , rdi , rbp , rip , rsp
61
61
#endif
62
+ #if defined(x86_64_HOST_ARCH) || defined(i386_HOST_ARCH)
62
63
, segCs , segDs , segEs , segFs , segGs
63
64
, eFlags
64
65
, dr
66
+ #endif
67
+ #if defined(aarch64_HOST_ARCH)
68
+ , x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8
69
+ , x9 , x10 , x11 , x12 , x13 , x14 , x15 , x16 , x17
70
+ , x18 , x19 , x20 , x21 , x22 , x23 , x24 , x25 , x26
71
+ , x27 , x28 , fp , lr , sp , pc
72
+ #endif
65
73
, setReg , getReg , modReg
66
74
, makeModThreadContext
67
75
, modifyThreadContext
@@ -331,7 +339,7 @@ withThreadContext t act =
331
339
(act buf)
332
340
333
341
334
- #if __i386__
342
+ #if defined(i386_HOST_ARCH)
335
343
eax , ebx , ecx , edx :: Int
336
344
esi , edi :: Int
337
345
ebp , eip , esp :: Int
@@ -344,7 +352,7 @@ edi = (#offset CONTEXT, Edi)
344
352
ebp = (# offset CONTEXT , Ebp )
345
353
eip = (# offset CONTEXT , Eip )
346
354
esp = (# offset CONTEXT , Esp )
347
- #elif __x86_64__
355
+ #elif defined(x86_64_HOST_ARCH)
348
356
rax , rbx , rcx , rdx :: Int
349
357
rsi , rdi :: Int
350
358
rbp , rip , rsp :: Int
@@ -357,10 +365,49 @@ rdi = (#offset CONTEXT, Rdi)
357
365
rbp = (# offset CONTEXT , Rbp )
358
366
rip = (# offset CONTEXT , Rip )
359
367
rsp = (# offset CONTEXT , Rsp )
368
+ #elif defined(aarch64_HOST_ARCH)
369
+ x0 , x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 :: Int
370
+ x9 , x10 , x11 , x12 , x13 , x14 , x15 , x16 , x17 :: Int
371
+ x18 , x19 , x20 , x21 , x22 , x23 , x24 , x25 , x26 :: Int
372
+ x27 , x28 , fp , lr , sp , pc :: Int
373
+ x0 = (# offset CONTEXT , X0 )
374
+ x1 = (# offset CONTEXT , X1 )
375
+ x2 = (# offset CONTEXT , X2 )
376
+ x3 = (# offset CONTEXT , X3 )
377
+ x4 = (# offset CONTEXT , X4 )
378
+ x5 = (# offset CONTEXT , X5 )
379
+ x6 = (# offset CONTEXT , X6 )
380
+ x7 = (# offset CONTEXT , X7 )
381
+ x8 = (# offset CONTEXT , X8 )
382
+ x9 = (# offset CONTEXT , X9 )
383
+ x10 = (# offset CONTEXT , X10 )
384
+ x11 = (# offset CONTEXT , X11 )
385
+ x12 = (# offset CONTEXT , X12 )
386
+ x13 = (# offset CONTEXT , X13 )
387
+ x14 = (# offset CONTEXT , X14 )
388
+ x15 = (# offset CONTEXT , X15 )
389
+ x16 = (# offset CONTEXT , X16 )
390
+ x17 = (# offset CONTEXT , X17 )
391
+ x18 = (# offset CONTEXT , X18 )
392
+ x19 = (# offset CONTEXT , X19 )
393
+ x20 = (# offset CONTEXT , X20 )
394
+ x21 = (# offset CONTEXT , X21 )
395
+ x22 = (# offset CONTEXT , X22 )
396
+ x23 = (# offset CONTEXT , X23 )
397
+ x24 = (# offset CONTEXT , X24 )
398
+ x25 = (# offset CONTEXT , X25 )
399
+ x26 = (# offset CONTEXT , X26 )
400
+ x27 = (# offset CONTEXT , X27 )
401
+ x28 = (# offset CONTEXT , X28 )
402
+ fp = (# offset CONTEXT , Fp )
403
+ lr = (# offset CONTEXT , Lr )
404
+ sp = (# offset CONTEXT , Sp )
405
+ pc = (# offset CONTEXT , Pc )
360
406
#else
361
- #error Unsupported architecture
407
+ #error Unknown mingw32 arch
362
408
#endif
363
409
410
+ #if defined(x86_64_HOST_ARCH) || defined(i386_HOST_ARCH)
364
411
segCs , segDs , segEs , segFs , segGs :: Int
365
412
segCs = (# offset CONTEXT , SegCs )
366
413
segDs = (# offset CONTEXT , SegDs )
@@ -380,6 +427,7 @@ dr n = case n of
380
427
6 -> (# offset CONTEXT , Dr6 )
381
428
7 -> (# offset CONTEXT , Dr7 )
382
429
_ -> undefined
430
+ #endif
383
431
384
432
setReg :: Ptr a -> Int -> DWORD -> IO ()
385
433
setReg = pokeByteOff
0 commit comments