NAME=debug register profile io plugin test
ARGS=-a x86 -b 32
FILE=reg://
CMDS=<<EOF
x 64 @ 0
dr eax = 123
x 64 @ 0
dr eip = 123
x 64 @ 0
EOF
EXPECT=<<EOF
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000000  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000010  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000020  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000030  0000 0000 0000 0000 0000 0000 0000 0000  ................
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000000  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000010  0000 0000 0000 0000 7b00 0000 0000 0000  ........{.......
0x00000020  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000030  0000 0000 0000 0000 0000 0000 0000 0000  ................
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000000  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000010  0000 0000 0000 0000 7b00 0000 0000 0000  ........{.......
0x00000020  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x00000030  7b00 0000 0000 0000 0000 0000 0000 0000  {...............
EOF
RUN

NAME=map flags in reg://
ARGS=-a x86 -b 32
FILE=reg://
CMDS=<<EOF
.drp*
dr eax = 123
dr eip = 123
xa 64 @ 0
EOF
EXPECT=<<EOF
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
            /e/gpr.bh /g/gpr.ch /g/gpr.dh /gpr.esi                 
0x00000000  0000 0000 0000 0000 0000 0000 0000 0000  ................
            /gpr.edi  /gpr.ebp  /g/gpr.ah                          
0x00000010  0000 0000 0000 0000 7b00 0000 0000 0000  ........{.......
                                          /gpr.oeax                
0x00000020  0000 0000 0000 0000 0000 0000 0000 0000  ................
            /gpr.eip                      /gpr.esp                 
0x00000030  7b00 0000 0000 0000 0000 0000 0000 0000  {...............
EOF
RUN

NAME=x87 80-bit float register test
ARGS=-a x86 -b 64
FILE=malloc://1024
CMDS=<<EOF
e asm.arch=x86
e asm.bits=64
.dr*
dr st0
EOF
EXPECT=<<EOF
0x00000000
EOF
RUN


NAME=reading a 128bit reg gives its low qword
FILE=malloc://0x200
ARGS=-a arm -b 64
CMDS=<<EOF
ar q0=5
?v q0
ae q0,x1,=
ar x1
ar v0h=1
?v q0
ar x2=7
?v x2
EOF
EXPECT=<<EOF
0x5
0x00000005
0x5
0x7
EOF
RUN

NAME=reading a 256bit reg gives its low qword
FILE=malloc://0x200
ARGS=-a kvx
CMDS=<<EOF
ar r0=9
ar r1=3
?v r0r1r2r3
EOF
EXPECT=<<EOF
0x9
EOF
RUN

NAME=zero write to a 128bit reg whose low qword is zero
FILE=malloc://0x200
ARGS=-a arm -b 64
CMDS=<<EOF
ar v0l=0xdead
ar q0=0
ar v0l
ar v0h=0xbeef
ar q0=0
ar v0h
ar v0h=1
ar q0=1
ar v0h
ar x0=0x100
ar x0=0
ar x0
EOF
EXPECT=<<EOF
0x00000000
0x00000000
0x00000000
0x00000000
EOF
RUN

NAME=zero write to a 128bit reg on big endian
FILE=malloc://0x200
ARGS=-a arm -b 64 -e cfg.bigendian=true
CMDS=<<EOF
ar v0l=0xdead
ar q0=0
ar v0l
ar v0h=0xbeef
ar q0=0
ar v0h
EOF
EXPECT=<<EOF
0x00000000
0x00000000
EOF
RUN

NAME=writes to a 256bit register land
FILE=malloc://0x100
ARGS=-a kvx
CMDS=<<EOF
ar r0r1r2r3=7
ar r0
ar r1=6
ar r0r1r2r3=0
ar r0
ar r1
EOF
EXPECT=<<EOF
0x00000007
0x00000000
0x00000000
EOF
RUN
