833 lines
25 KiB
Text
833 lines
25 KiB
Text
NAME=Printing il statements in various formats
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
CMDS=<<EOF
|
|
echo -- oneline
|
|
aoi 5
|
|
echo -- pretty
|
|
aoip 5
|
|
echo -- graph
|
|
agI
|
|
EOF
|
|
EXPECT=<<EOF
|
|
-- oneline
|
|
0x100508 (set r2 (let v (append (bv 16 0x1e) (bv 16 0x0)) (ite (msb (var v)) (cast 64 (msb (var v)) (var v)) (cast 64 false (var v)))))
|
|
0x10050c (seq (set a (var r2)) (set b (let v (bv 16 0x7c00) (ite (msb (var v)) (cast 64 (msb (var v)) (var v)) (cast 64 false (var v))))) empty (set r2 (+ (var a) (var b))) empty empty empty)
|
|
0x100510 (seq (set res (| (var r1) (var r1))) (set r9 (var res)) empty)
|
|
0x100514 (seq (set mstart (bv 8 0x0)) (set mstop (bv 8 0x3b)) (set m (bv 64 0x0)) (repeat (! (== (var mstart) (var mstop))) (seq (set m (| (var m) (>> (>> (bv 64 0x0) (bv 8 0x1) true) (var mstart) false))) (set mstart (mod (+ (var mstart) (bv 8 0x1)) (bv 8 0x40))))) (set m (| (var m) (>> (>> (bv 64 0x0) (bv 8 0x1) true) (var mstop) false))) (set mask (cast 64 false (var m))) empty (set result (& (let rotl64_x (var r1) (let rotl64_y (& (bv 8 0x3f) (bv 8 0x0)) (| (<< (var rotl64_x) (var rotl64_y) false) (>> (var rotl64_x) (- (bv 8 0x40) (cast 8 false (var rotl64_y))) false)))) (var mask))) (set r1 (var result)) empty)
|
|
0x100518 (set r0 (let v (bv 16 0x0) (ite (msb (var v)) (cast 64 (msb (var v)) (var v)) (cast 64 false (var v)))))
|
|
-- pretty
|
|
0x100508
|
|
(set r2
|
|
(let v
|
|
(append
|
|
(bv 16 0x1e)
|
|
(bv 16 0x0))
|
|
(ite
|
|
(msb
|
|
(var v))
|
|
(cast 64
|
|
(msb
|
|
(var v))
|
|
(var v))
|
|
(cast 64
|
|
false
|
|
(var v)))))
|
|
0x10050c
|
|
(seq
|
|
(set a
|
|
(var r2))
|
|
(set b
|
|
(let v
|
|
(bv 16 0x7c00)
|
|
(ite
|
|
(msb
|
|
(var v))
|
|
(cast 64
|
|
(msb
|
|
(var v))
|
|
(var v))
|
|
(cast 64
|
|
false
|
|
(var v)))))
|
|
empty
|
|
(set r2
|
|
(+
|
|
(var a)
|
|
(var b)))
|
|
empty
|
|
empty
|
|
empty)
|
|
0x100510
|
|
(seq
|
|
(set res
|
|
(|
|
|
(var r1)
|
|
(var r1)))
|
|
(set r9
|
|
(var res))
|
|
empty)
|
|
0x100514
|
|
(seq
|
|
(set mstart
|
|
(bv 8 0x0))
|
|
(set mstop
|
|
(bv 8 0x3b))
|
|
(set m
|
|
(bv 64 0x0))
|
|
(repeat
|
|
(!
|
|
(==
|
|
(var mstart)
|
|
(var mstop)))
|
|
(seq
|
|
(set m
|
|
(|
|
|
(var m)
|
|
(>>
|
|
(>>
|
|
(bv 64 0x0)
|
|
(bv 8 0x1)
|
|
true)
|
|
(var mstart)
|
|
false)))
|
|
(set mstart
|
|
(mod
|
|
(+
|
|
(var mstart)
|
|
(bv 8 0x1))
|
|
(bv 8 0x40)))))
|
|
(set m
|
|
(|
|
|
(var m)
|
|
(>>
|
|
(>>
|
|
(bv 64 0x0)
|
|
(bv 8 0x1)
|
|
true)
|
|
(var mstop)
|
|
false)))
|
|
(set mask
|
|
(cast 64
|
|
false
|
|
(var m)))
|
|
empty
|
|
(set result
|
|
(&
|
|
(let rotl64_x
|
|
(var r1)
|
|
(let rotl64_y
|
|
(&
|
|
(bv 8 0x3f)
|
|
(bv 8 0x0))
|
|
(|
|
|
(<<
|
|
(var rotl64_x)
|
|
(var rotl64_y)
|
|
false)
|
|
(>>
|
|
(var rotl64_x)
|
|
(-
|
|
(bv 8 0x40)
|
|
(cast 8
|
|
false
|
|
(var rotl64_y)))
|
|
false))))
|
|
(var mask)))
|
|
(set r1
|
|
(var result))
|
|
empty)
|
|
0x100518
|
|
(set r0
|
|
(let v
|
|
(bv 16 0x0)
|
|
(ite
|
|
(msb
|
|
(var v))
|
|
(cast 64
|
|
(msb
|
|
(var v))
|
|
(var v))
|
|
(cast 64
|
|
false
|
|
(var v)))))
|
|
-- graph
|
|
.----------.
|
|
| lis |
|
|
`----------'
|
|
v
|
|
|
|
|
|
|
|
.-----------.
|
|
| set: r2 |
|
|
`-----------'
|
|
v
|
|
|
|
|
|
|
|
.-----------.
|
|
| let: v |
|
|
`-----------'
|
|
v v
|
|
| |
|
|
.------------------------' |
|
|
| '-----------------.
|
|
| |
|
|
.-----------. .-------------.
|
|
| append | | ite |
|
|
`-----------' `-------------'
|
|
v v v v v
|
|
| | | | |
|
|
.-------------' | | | '-----------------.
|
|
| '---. .---------------' | |
|
|
| | | .-' |
|
|
| | | | |
|
|
| | | | |
|
|
| | | | |
|
|
.---------------. .--------------. .----------. .------------. .------------.
|
|
| bv: 16 0x1e | | bv: 16 0x0 | | msb | | cast: 64 | | cast: 64 |
|
|
`---------------' `--------------' `----------' `------------' `------------'
|
|
v v v v v
|
|
| | | | |
|
|
.----------------' | | | |
|
|
| .------------------' | | |
|
|
| | .----' | |
|
|
| | | .--------' |
|
|
| | | | '----.
|
|
| | | | |
|
|
.----------. .----------. .----------. .----------. .----------.
|
|
| var: v | | msb | | var: v | | false | | var: v |
|
|
`----------' `----------' `----------' `----------' `----------'
|
|
v
|
|
|
|
|
|
|
|
.----------.
|
|
| var: v |
|
|
`----------'
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc add instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
af
|
|
s sym.add_insns
|
|
aezi
|
|
aezse 16~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r23, old: 0x0, new: 0x1)
|
|
var_write(name: r2, old: 0x0, new: 0x2)
|
|
var_write(name: r3, old: 0x0, new: 0x3)
|
|
var_write(name: r4, old: 0x0, new: 0x4)
|
|
var_write(name: cr0, old: 0x0, new: 0x4)
|
|
var_write(name: r10, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
var_write(name: cr0, old: 0x4, new: 0x2)
|
|
var_write(name: r11, old: 0x0, new: 0xffffffffffff0000)
|
|
var_write(name: r11, old: 0xffffffffffff0000, new: 0xffffffffffffffff)
|
|
var_write(name: r12, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x2, new: 0x2)
|
|
var_write(name: r13, old: 0x0, new: 0x2)
|
|
var_write(name: ca, old: 0x1, new: 0x0)
|
|
var_write(name: cr0, old: 0x2, new: 0x4)
|
|
var_write(name: r12, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
var_write(name: cr0, old: 0x4, new: 0x2)
|
|
var_write(name: r16, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x2, new: 0x2)
|
|
var_write(name: r12, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x2, new: 0x2)
|
|
var_write(name: r17, old: 0x0, new: 0x1)
|
|
var_write(name: ca, old: 0x1, new: 0x0)
|
|
var_write(name: cr0, old: 0x2, new: 0x4)
|
|
var_write(name: r17, old: 0x1, new: 0xffffffffffffffff)
|
|
var_write(name: ca, old: 0x0, new: 0x0)
|
|
var_write(name: cr0, old: 0x4, new: 0x8)
|
|
var_write(name: r17, old: 0xffffffffffffffff, new: 0x1)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc sub instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
af
|
|
s sym.sub_insns
|
|
aezi
|
|
aezse 18~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: r23, old: 0x0, new: 0x1)
|
|
var_write(name: r2, old: 0x0, new: 0x2)
|
|
var_write(name: r3, old: 0x0, new: 0x3)
|
|
var_write(name: r23, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x0, new: 0x4)
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: cr0, old: 0x4, new: 0x2)
|
|
var_write(name: r11, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: cr0, old: 0x2, new: 0x8)
|
|
var_write(name: r11, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: ca, old: 0x0, new: 0x0)
|
|
var_write(name: cr0, old: 0x8, new: 0x8)
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
var_write(name: cr0, old: 0x8, new: 0x2)
|
|
var_write(name: r11, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: ca, old: 0x1, new: 0x0)
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
var_write(name: r11, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: ca, old: 0x1, new: 0x0)
|
|
var_write(name: cr0, old: 0x2, new: 0x8)
|
|
var_write(name: r12, old: 0x0, new: 0xfffffffffffffffe)
|
|
var_write(name: ca, old: 0x0, new: 0x0)
|
|
var_write(name: cr0, old: 0x8, new: 0x8)
|
|
var_write(name: r13, old: 0x0, new: 0xfffffffffffffffd)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
var_write(name: cr0, old: 0x8, new: 0x8)
|
|
var_write(name: r12, old: 0xfffffffffffffffe, new: 0xfffffffffffffffe)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x8, new: 0x8)
|
|
var_write(name: r11, old: 0xffffffffffffffff, new: 0x0)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x8, new: 0x2)
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x2, new: 0x2)
|
|
var_write(name: r10, old: 0x0, new: 0x0)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x2, new: 0x2)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc store instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
e io.cache=true
|
|
wc-*
|
|
s sym.store_insns
|
|
aezi
|
|
aezse 15~mem_write
|
|
aezse 4~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
mem_write(addr: 0x1e2010, old: 0x0, new: 0xff)
|
|
mem_write(addr: 0x1e2020, old: 0x0, new: 0xffff)
|
|
mem_write(addr: 0x1e2030, old: 0x0, new: 0xffffffff)
|
|
mem_write(addr: 0x1e2040, old: 0x0, new: 0xffffffffffffffff)
|
|
mem_write(addr: 0x1e2010, old: 0xff, new: 0xff)
|
|
mem_write(addr: 0x1e2020, old: 0xffff, new: 0xffff)
|
|
mem_write(addr: 0x1e2030, old: 0xffffffff, new: 0xffffffff)
|
|
mem_write(addr: 0x1e2040, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: r21, old: 0x1e2010, new: 0x1e2010)
|
|
var_write(name: r21, old: 0x1e2010, new: 0x1e2020)
|
|
var_write(name: r21, old: 0x1e2020, new: 0x1e2030)
|
|
var_write(name: r21, old: 0x1e2030, new: 0x1e2040)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc load instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
e io.cache=true
|
|
wc-*
|
|
s sym.test_loads
|
|
aezi
|
|
aezse 16~var_write
|
|
aezs 2
|
|
aezse 3~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r30, old: 0x0, new: 0x0)
|
|
var_write(name: lr, old: 0x0, new: 0x100a44)
|
|
var_write(name: r4, old: 0x0, new: 0x4)
|
|
var_write(name: r11, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: r12, old: 0x0, new: 0x10)
|
|
var_write(name: r13, old: 0x0, new: 0x20)
|
|
var_write(name: r14, old: 0x0, new: 0x30)
|
|
var_write(name: r21, old: 0x0, new: 0x1e0000)
|
|
var_write(name: r21, old: 0x1e0000, new: 0x1e2010)
|
|
var_write(name: r21, old: 0x1e2010, new: 0x1e2020)
|
|
var_write(name: r21, old: 0x1e2020, new: 0x1e2030)
|
|
var_write(name: r21, old: 0x1e2030, new: 0x1e2040)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc logical instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.logical_insns
|
|
aezi
|
|
aezs 1 # backup lr
|
|
aezse 17~var_write
|
|
# EXTS tests
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
# Count zeros tests
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 2~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezse 2~var_write
|
|
# eqv tests
|
|
aezse 2~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r0, old: 0x0, new: 0x0)
|
|
var_write(name: r23, old: 0x0, new: 0x1)
|
|
var_write(name: r11, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: r21, old: 0x0, new: 0x1)
|
|
var_write(name: r12, old: 0x0, new: 0xfffffffffffffffe)
|
|
var_write(name: r23, old: 0x1, new: 0x1)
|
|
var_write(name: cr0, old: 0x0, new: 0x4)
|
|
var_write(name: r19, old: 0x0, new: 0xffff0000)
|
|
var_write(name: cr0, old: 0x4, new: 0x4)
|
|
var_write(name: r23, old: 0x1, new: 0x1)
|
|
var_write(name: r12, old: 0xfffffffffffffffe, new: 0xfffffffffffffffe)
|
|
var_write(name: r5, old: 0x0, new: 0x5555)
|
|
var_write(name: r5, old: 0x5555, new: 0x55550000)
|
|
var_write(name: r5, old: 0x55550000, new: 0xffffffffaaaaffff)
|
|
var_write(name: r5, old: 0xffffffffaaaaffff, new: 0xffffffffaaaa3333)
|
|
var_write(name: r5, old: 0xffffffffaaaa3333, new: 0xffffffff66663333)
|
|
var_write(name: r12, old: 0xfffffffffffffffe, new: 0xfffffffffffffffe)
|
|
var_write(name: r12, old: 0xfffffffffffffffe, new: 0xfffffffffffffffe)
|
|
var_write(name: r20, old: 0x0, new: 0xffffffff66663333)
|
|
var_write(name: r10, old: 0x0, new: 0xffffffffffffff80)
|
|
var_write(name: r10, old: 0xffffffffffffff80, new: 0x7f)
|
|
var_write(name: r10, old: 0x7f, new: 0xffffffffffff8000)
|
|
var_write(name: r10, old: 0xffffffffffff8000, new: 0x7fff)
|
|
var_write(name: r10, old: 0x7fff, new: 0xffffffff80000000)
|
|
var_write(name: r10, old: 0xffffffff80000000, new: 0x7fffffff)
|
|
var_write(name: r13, old: 0x0, new: 0x40)
|
|
var_write(name: r13, old: 0x40, new: 0x0)
|
|
var_write(name: r13, old: 0x0, new: 0x20)
|
|
var_write(name: r13, old: 0x20, new: 0x0)
|
|
var_write(name: r13, old: 0x0, new: 0x20)
|
|
var_write(name: r11, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: r19, old: 0xffff0000, new: 0xfffffffffffffffe)
|
|
var_write(name: lr, old: 0x100c20, new: 0x0)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc compare instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.compare_insns
|
|
aezi
|
|
aezs 2
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezs 5
|
|
aezse 1~var_write
|
|
aezse 4~var_write
|
|
aezs 4
|
|
aezse 1~var_write
|
|
aezs 1
|
|
aezse 1~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: cr0, old: 0x0, new: 0x8)
|
|
var_write(name: cr0, old: 0x8, new: 0x8)
|
|
var_write(name: cr1, old: 0x0, new: 0x4)
|
|
var_write(name: cr1, old: 0x4, new: 0x4)
|
|
var_write(name: cr2, old: 0x0, new: 0x8)
|
|
var_write(name: cr2, old: 0x8, new: 0x8)
|
|
var_write(name: cr3, old: 0x0, new: 0x2)
|
|
var_write(name: cr3, old: 0x2, new: 0x2)
|
|
var_write(name: cr4, old: 0x0, new: 0x4)
|
|
var_write(name: cr5, old: 0x0, new: 0x8)
|
|
var_write(name: cr6, old: 0x0, new: 0x8)
|
|
var_write(name: cr7, old: 0x0, new: 0x8)
|
|
var_write(name: r9, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: r9, old: 0xffffffffffffffff, new: 0xff00)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc shift instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.shift_insns
|
|
aezi
|
|
aezs 4
|
|
aezse 6~var_write
|
|
aezs 3
|
|
aezse 4~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r10, old: 0x0, new: 0xedcba98765432100)
|
|
var_write(name: r10, old: 0xedcba98765432100, new: 0xfedcba987654321)
|
|
var_write(name: r10, old: 0xfedcba987654321, new: 0x65432100)
|
|
var_write(name: r10, old: 0x65432100, new: 0x7654321)
|
|
var_write(name: ca, old: 0x0, new: 0x0)
|
|
var_write(name: r10, old: 0x7654321, new: 0xffedcba987654321)
|
|
var_write(name: ca, old: 0x0, new: 0x0)
|
|
var_write(name: r10, old: 0xffedcba987654321, new: 0xffedcba987654321)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
var_write(name: r10, old: 0xffedcba987654321, new: 0xfffffffff89abcde)
|
|
var_write(name: ca, old: 0x1, new: 0x1)
|
|
var_write(name: r10, old: 0xfffffffff89abcde, new: 0xfffffffff89abcde)
|
|
var_write(name: r10, old: 0xfffffffff89abcde, new: 0x32100000)
|
|
var_write(name: r10, old: 0x32100000, new: 0x7654)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc rotate instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.rotate_insns
|
|
aezi
|
|
aezs 4
|
|
aezse 16~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r10, old: 0x0, new: 0x4320000)
|
|
var_write(name: r10, old: 0x4320000, new: 0x5432107654321076)
|
|
var_write(name: r10, old: 0x5432107654321076, new: 0x0)
|
|
var_write(name: r10, old: 0x0, new: 0x5432107650001076)
|
|
var_write(name: r10, old: 0x5432107650001076, new: 0x0)
|
|
var_write(name: r10, old: 0x0, new: 0x4000000)
|
|
var_write(name: r10, old: 0x4000000, new: 0xa9876543210f)
|
|
var_write(name: r10, old: 0xa9876543210f, new: 0x0)
|
|
var_write(name: r10, old: 0x0, new: 0xcba98765432100)
|
|
var_write(name: r10, old: 0xcba98765432100, new: 0xedcba9876543210f)
|
|
var_write(name: r10, old: 0xedcba9876543210f, new: 0x65432107)
|
|
var_write(name: r10, old: 0x65432107, new: 0xcba9876543210)
|
|
var_write(name: r10, old: 0xcba9876543210, new: 0x43210)
|
|
var_write(name: r10, old: 0x43210, new: 0x7edcba9876543210)
|
|
var_write(name: cr0, old: 0x0, new: 0x4)
|
|
var_write(name: r10, old: 0x7edcba9876543210, new: 0xfedcba9876543210)
|
|
var_write(name: cr0, old: 0x4, new: 0x8)
|
|
var_write(name: r10, old: 0xfedcba9876543210, new: 0x0)
|
|
var_write(name: cr0, old: 0x8, new: 0x2)
|
|
EOF
|
|
RUN
|
|
|
|
|
|
NAME=ppc CR logical instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.cr_logical_insns
|
|
aezi
|
|
aezs 3
|
|
aezse 5~var_write
|
|
aezs
|
|
aezse 2~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc div and mul instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.div_mul_insns
|
|
aezi
|
|
aezs 1
|
|
aezs 4 # -1 into r11
|
|
aezs 5 # max into r28
|
|
aezse 1~var_write
|
|
aezs 5 # max into r28
|
|
aezse 2~var_write
|
|
# High words/double words
|
|
aezs 5 # min into r27
|
|
aezse 1~var_write
|
|
aezs 5 # min into r27
|
|
aezs 5 # max into r28
|
|
aezse 1~var_write
|
|
aezs 6 # r2 = 2 & max into r28
|
|
aezse 1~var_write
|
|
aezs 5 # max into r28
|
|
aezse 1~var_write
|
|
aezs 5 # max d into r28
|
|
aezs 4 # minus into r11
|
|
aezse 1~var_write
|
|
aezse 1~var_write
|
|
aezs 5 # max w into r28
|
|
aezs 4 # minus into r11
|
|
aezse 1~var_write
|
|
aezse 1~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: r19, old: 0x0, new: 0xffffffff80000001)
|
|
var_write(name: r19, old: 0xffffffff80000001, new: 0x8000000000000001)
|
|
var_write(name: r19, old: 0x8000000000000001, new: 0x8000000000000001)
|
|
var_write(name: r19, old: 0x8000000000000001, new: 0xc000000000000000)
|
|
var_write(name: r19, old: 0xc000000000000000, new: 0xc0000000)
|
|
var_write(name: r19, old: 0xc0000000, new: 0x1)
|
|
var_write(name: r19, old: 0x1, new: 0x1)
|
|
var_write(name: r19, old: 0x1, new: 0x8000000000000001)
|
|
var_write(name: r19, old: 0x8000000000000001, new: 0x0)
|
|
var_write(name: r19, old: 0x0, new: 0xffffffff80000001)
|
|
var_write(name: r19, old: 0xffffffff80000001, new: 0x0)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=ppc branch instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.branch_insns
|
|
aezi
|
|
aezs 1
|
|
aezse 48
|
|
EOF
|
|
EXPECT=<<EOF
|
|
pc_write(old: 0x10095c, new: 0x100960)
|
|
var_write(name: r23, old: 0x0, new: 0x1)
|
|
pc_write(old: 0x100960, new: 0x100964)
|
|
var_write(name: r20, old: 0x0, new: 0x0)
|
|
pc_write(old: 0x100964, new: 0x100968)
|
|
var_write(name: lr, old: 0x0, new: 0x100968)
|
|
pc_write(old: 0x100968, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x100968)
|
|
pc_write(old: 0x100968, new: 0x10096c)
|
|
var_write(name: r20, old: 0x0, new: 0x100000)
|
|
pc_write(old: 0x10096c, new: 0x100970)
|
|
var_write(name: r20, old: 0x100000, new: 0x100954)
|
|
pc_write(old: 0x100970, new: 0x100974)
|
|
var_write(name: ctr, old: 0x0, new: 0x100954)
|
|
pc_write(old: 0x100974, new: 0x100978)
|
|
var_write(name: lr, old: 0x100968, new: 0x100978)
|
|
pc_write(old: 0x100978, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x100978)
|
|
pc_write(old: 0x100978, new: 0x10097c)
|
|
var_write(name: ctr, old: 0x100954, new: 0x100953)
|
|
var_write(name: lr, old: 0x100978, new: 0x10097c)
|
|
pc_write(old: 0x10097c, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x10097c)
|
|
pc_write(old: 0x10097c, new: 0x100980)
|
|
var_write(name: ctr, old: 0x100953, new: 0x1)
|
|
pc_write(old: 0x100980, new: 0x100984)
|
|
var_write(name: ctr, old: 0x1, new: 0x0)
|
|
var_write(name: lr, old: 0x10097c, new: 0x100984)
|
|
pc_write(old: 0x100984, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x100984)
|
|
pc_write(old: 0x100984, new: 0x100988)
|
|
var_write(name: lr, old: 0x100984, new: 0x100988)
|
|
pc_write(old: 0x100988, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x100988)
|
|
pc_write(old: 0x100988, new: 0x10098c)
|
|
var_write(name: cr0, old: 0x0, new: 0x2)
|
|
pc_write(old: 0x10098c, new: 0x100990)
|
|
var_write(name: lr, old: 0x100988, new: 0x100990)
|
|
pc_write(old: 0x100990, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x100990)
|
|
pc_write(old: 0x100990, new: 0x100994)
|
|
var_write(name: ctr, old: 0x0, new: 0x100954)
|
|
pc_write(old: 0x100994, new: 0x100998)
|
|
var_write(name: r10, old: 0x0, new: 0xfff0000)
|
|
pc_write(old: 0x100998, new: 0x10099c)
|
|
var_write(name: r10, old: 0xfff0000, new: 0xfff0ff0)
|
|
pc_write(old: 0x10099c, new: 0x1009a0)
|
|
var_write(name: cr7, old: 0x0, new: 0x0)
|
|
var_write(name: cr6, old: 0x0, new: 0xf)
|
|
var_write(name: cr5, old: 0x0, new: 0xf)
|
|
var_write(name: cr4, old: 0x0, new: 0x0)
|
|
var_write(name: cr3, old: 0x0, new: 0xf)
|
|
var_write(name: cr2, old: 0x0, new: 0xf)
|
|
var_write(name: cr1, old: 0x0, new: 0xf)
|
|
var_write(name: cr0, old: 0x2, new: 0x0)
|
|
pc_write(old: 0x1009a0, new: 0x1009a4)
|
|
var_write(name: ctr, old: 0x100954, new: 0x100953)
|
|
var_write(name: lr, old: 0x100990, new: 0x1009a4)
|
|
pc_write(old: 0x1009a4, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x1009a4)
|
|
pc_write(old: 0x1009a4, new: 0x1009a8)
|
|
var_write(name: r10, old: 0xfff0ff0, new: 0x1000)
|
|
pc_write(old: 0x1009a8, new: 0x1009ac)
|
|
var_write(name: cr6, old: 0xf, new: 0x0)
|
|
pc_write(old: 0x1009ac, new: 0x1009b0)
|
|
var_write(name: ctr, old: 0x100953, new: 0x100952)
|
|
var_write(name: lr, old: 0x1009a4, new: 0x1009b0)
|
|
pc_write(old: 0x1009b0, new: 0x1009b0)
|
|
pc_write(old: 0x1009b0, new: 0x1009b4)
|
|
var_write(name: ctr, old: 0x100952, new: 0x1)
|
|
pc_write(old: 0x1009b4, new: 0x1009b8)
|
|
var_write(name: cr6, old: 0x0, new: 0x0)
|
|
pc_write(old: 0x1009b8, new: 0x1009bc)
|
|
var_write(name: ctr, old: 0x1, new: 0x0)
|
|
var_write(name: lr, old: 0x1009b0, new: 0x1009bc)
|
|
pc_write(old: 0x1009bc, new: 0x1009bc)
|
|
pc_write(old: 0x1009bc, new: 0x1009c0)
|
|
var_write(name: ctr, old: 0x0, new: 0x1)
|
|
pc_write(old: 0x1009c0, new: 0x1009c4)
|
|
var_write(name: r10, old: 0x1000, new: 0x0)
|
|
pc_write(old: 0x1009c4, new: 0x1009c8)
|
|
var_write(name: r10, old: 0x0, new: 0x10000000)
|
|
pc_write(old: 0x1009c8, new: 0x1009cc)
|
|
var_write(name: cr6, old: 0x0, new: 0x0)
|
|
pc_write(old: 0x1009cc, new: 0x1009d0)
|
|
var_write(name: ctr, old: 0x1, new: 0x0)
|
|
var_write(name: lr, old: 0x1009bc, new: 0x1009d0)
|
|
pc_write(old: 0x1009d0, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x1009d0)
|
|
pc_write(old: 0x1009d0, new: 0x1009d4)
|
|
var_write(name: ctr, old: 0x0, new: 0x0)
|
|
pc_write(old: 0x1009d4, new: 0x1009d8)
|
|
var_write(name: ctr, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: lr, old: 0x1009d0, new: 0x1009d8)
|
|
pc_write(old: 0x1009d8, new: 0x1009d8)
|
|
pc_write(old: 0x1009d8, new: 0x1009dc)
|
|
var_write(name: ctr, old: 0xffffffffffffffff, new: 0x1)
|
|
pc_write(old: 0x1009dc, new: 0x1009e0)
|
|
var_write(name: r3, old: 0x0, new: 0x3)
|
|
pc_write(old: 0x1009e0, new: 0x1009e4)
|
|
var_write(name: cr6, old: 0x0, new: 0x0)
|
|
pc_write(old: 0x1009e4, new: 0x1009e8)
|
|
var_write(name: ctr, old: 0x1, new: 0x0)
|
|
var_write(name: lr, old: 0x1009d8, new: 0x1009e8)
|
|
pc_write(old: 0x1009e8, new: 0x1009e8)
|
|
pc_write(old: 0x1009e8, new: 0x1009ec)
|
|
var_write(name: lr, old: 0x1009e8, new: 0x1009ec)
|
|
pc_write(old: 0x1009ec, new: 0x100954)
|
|
pc_write(old: 0x100954, new: 0x100958)
|
|
pc_write(old: 0x100958, new: 0x1009ec)
|
|
pc_write(old: 0x1009ec, new: 0x1009f0)
|
|
var_write(name: lr, old: 0x1009ec, new: 0x0)
|
|
pc_write(old: 0x1009f0, new: 0x1009f4)
|
|
pc_write(old: 0x1009f4, new: 0x0)
|
|
EOF
|
|
BROKEN=1
|
|
RUN
|
|
|
|
NAME=ppc special instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.special_insns
|
|
aezi
|
|
aezse 2 # nop, xnor
|
|
aezs 3
|
|
aezse 2 # isel
|
|
EOF
|
|
EXPECT=<<EOF
|
|
EOF
|
|
BROKEN=1
|
|
RUN
|
|
|
|
NAME=ppc move to from spr instructions
|
|
FILE=bins/elf/ppc/ppc64le_uplifted
|
|
ARGS=-appc
|
|
CMDS=<<EOF
|
|
s sym.read_set_spr
|
|
aezi
|
|
aezs 1
|
|
aezs 5
|
|
aezse 4~var_write
|
|
aezs 5 # max into r28
|
|
aezse 1~var_write
|
|
EOF
|
|
EXPECT=<<EOF
|
|
var_write(name: ctr, old: 0x0, new: 0xffffffffffffffff)
|
|
var_write(name: r28, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: lr, old: 0x100a1c, new: 0xffffffffffffffff)
|
|
var_write(name: r28, old: 0xffffffffffffffff, new: 0xffffffffffffffff)
|
|
var_write(name: xer, old: 0x0, new: 0xe0000000)
|
|
var_write(name: so, old: 0x0, new: 0x1)
|
|
var_write(name: ov, old: 0x0, new: 0x1)
|
|
var_write(name: ca, old: 0x0, new: 0x1)
|
|
EOF
|
|
RUN
|
|
|
|
NAME=emulateme-big-endian
|
|
FILE=bins/elf/ppc/emulateme-ppc64be
|
|
TIMEOUT=30
|
|
ARGS=-T
|
|
CMDS=<<EOF
|
|
s sym.decrypt
|
|
ps @ obj.seckrit
|
|
aezi
|
|
o malloc://0x1000 0x400000
|
|
o malloc://0x10 0x500000
|
|
e io.cache=1
|
|
e cfg.bigendian=1
|
|
w AnyColourYouLike @ 0x500000
|
|
ar r1=0x400000
|
|
ar r3=0x500000
|
|
aezsu 0x001005a8
|
|
e str.search.encoding=utf8
|
|
ps @ obj.seckrit
|
|
EOF
|
|
EXPECT=<<EOF
|
|
QSMwX\x14Q_El\x17\x7fnx\x7f\x1c
|
|
Hello from RzIL!
|
|
EOF
|
|
EXPECT_ERR=
|
|
RUN
|
|
|
|
NAME=emulateme-little-endian
|
|
FILE=bins/elf/ppc/emulateme-ppc64le
|
|
TIMEOUT=30
|
|
ARGS=-T
|
|
CMDS=<<EOF
|
|
s sym.decrypt
|
|
e str.search.encoding=utf8
|
|
ps @ obj.seckrit
|
|
aezi
|
|
o malloc://0x1000 0x400000
|
|
o malloc://0x10 0x500000
|
|
e io.cache=1
|
|
w AnyColourYouLike @ 0x500000
|
|
ar r1=0x400000
|
|
ar r3=0x500000
|
|
aezsu 0x001007f8
|
|
ps @ obj.seckrit
|
|
EOF
|
|
EXPECT=<<EOF
|
|
QSMwX\x14Q_El\x17\x7fnx\x7f\x1c
|
|
Hello from RzIL!
|
|
EOF
|
|
EXPECT_ERR=<<EOF
|
|
ERROR: I128/U128 not supported
|
|
ERROR: I128/U128 not supported
|
|
ERROR: I128/U128 not supported
|
|
ERROR: I128/U128 not supported
|
|
EOF
|
|
RUN
|