NAME=fatmach0 string location
FILE=../bins/mach0/BatteryLife
EXPECT=<<EOF
batteryLevel
EOF
CMDS=<<EOF
s str.batteryLevel
ps
EOF
RUN

NAME=fatmach0 -b64
FILE=../bins/mach0/BatteryLife
ARGS=-aarm -b64
EXPECT=<<EOF
64
  0x100010f7c      stp x22, x21, [sp, -0x30]!
EOF
CMDS=<<EOF
e asm.bits
e asm.bytes=0
e asm.flags=0
e asm.lines.bb=0
pd 1
EOF
RUN

NAME=fatmach0 arm64
FILE=../bins/mach0/BatteryLife.arm_64.1
EXPECT=<<EOF
  0x100010f7c      stp x22, x21, [sp, -0x30]!
EOF
CMDS=<<EOF
e asm.bytes=0
e asm.flags=0
e asm.lines.bb=0
pd 1
EOF
RUN

NAME=fatmach0 arm32 string location
FILE=../bins/mach0/BatteryLife.arm_32.0
EXPECT=<<EOF
batteryLevel
EOF
CMDS=<<EOF
s str.batteryLevel
ps
EOF
RUN

NAME=fatmach0 arm16 symbol alignment
FILE=../bins/mach0/a.out
EXPECT=<<EOF
push {r7, lr}
EOF
CMDS=<<EOF
s sym._call
pi 1
EOF
RUN

NAME=mach0 arm16 symbol alignment
FILE=../bins/mach0/a.out.fat/a.out.arm_32.0
EXPECT=<<EOF
push {r7, lr}
EOF
CMDS=<<EOF
s sym._call
pi 1
EOF
RUN

NAME=fatmach0 arm64 symbol alignment
FILE=../bins/mach0/a.out
ARGS=-a arm -b 64
EXPECT=<<EOF
stp x29, x30, [sp, -0x10]!
EOF
CMDS=<<EOF
s sym._call
pi 1
EOF
RUN

NAME=mach0 arm64 symbol alignment
FILE=../bins/mach0/a.out.fat/a.out.arm_64.1
EXPECT=<<EOF
stp x29, x30, [sp, -0x10]!
EOF
CMDS=<<EOF
s sym._call
pi 1
EOF
RUN

NAME=fatmach0 entry0
FILE=../bins/mach0/fatmach0-3true
EXPECT=<<EOF
0x100000ef8
EOF
CMDS=<<EOF
?v entry0
EOF
RUN

NAME=fatmach0 entry0 data
FILE=../bins/mach0/fatmach0-3true
EXPECT=<<EOF
6a004889e54883e4f0488b7d08488d75
EOF
CMDS=<<EOF
p8 16 @ entry0
EOF
RUN

NAME=fatmach0 entry1
FILE=../bins/mach0/fatmach0-3true
ARGS=-a x86 -b 32
EXPECT=<<EOF
0x1f44
EOF
CMDS=<<EOF
?v entry0
EOF
RUN

NAME=fatmach0 entry1 data
FILE=../bins/mach0/fatmach0-3true
ARGS=-a x86 -b 32
EXPECT=<<EOF
6a0089e583e4f083ec108b5d04891c24
EOF
CMDS=<<EOF
p8 16 @ entry0
EOF
RUN

NAME=fatmach0 entry1 rabin2
FILE=../bins/mach0/fatmach0-3true
ARGS=-n
EXPECT=<<EOF
0x00001f44
EOF
CMDS=<<EOF
!rabin2 -a x86 -b 32 -qe ../bins/mach0/fatmach0-3true
EOF
RUN

NAME=fatmach0 entry1 rabin2
FILE=../bins/mach0/fatmach0-3true
ARGS=-n
EXPECT=<<EOF
0x00005f44
EOF
CMDS=<<EOF
!rabin2 -p -a x86 -b 32 -qe ../bins/mach0/fatmach0-3true
EOF
RUN

NAME=fatmach0 entry1 rabin2 (2)
FILE=../bins/mach0/fatmach0-3true
ARGS=-n
EXPECT=<<EOF
vaddr=0x00001f44 paddr=0x00005f44 haddr=0x00000420 type=program
EOF
CMDS=<<EOF
!rabin2 -a x86 -b 32 -e ../bins/mach0/fatmach0-3true | grep paddr=
EOF
RUN

NAME=fatmach0 entry2
FILE=../bins/mach0/fatmach0-3true
ARGS=-a ppc -b 32
EXPECT=<<EOF
0x1f64
EOF
CMDS=<<EOF
?v entry0
EOF
RUN

NAME=fatmach0 entry2 data
FILE=../bins/mach0/fatmach0-3true
ARGS=-a ppc -b 32
EXPECT=<<EOF
7c3a0b783821fffc5421003438000000
EOF
CMDS=<<EOF
p8 16 @ entry0
EOF
RUN

NAME=fatmach0 archs 3true
FILE=../bins/mach0/fatmach0-3true
EXPECT=<<EOF
000 0x00001000 13792 x86_64 x86 64 all
001 0x00005000 13760 x86_32 386
002 0x00009000 13616 ppc_32 7400
EOF
CMDS=<<EOF
iA
EOF
RUN

NAME=fatmach0 rabin2 archs iA
FILE=../bins/mach0/fatmach0-3true
EXPECT=<<EOF
000 0x00001000 13792 x86_64 x86 64 all
001 0x00005000 13760 x86_32 386
002 0x00009000 13616 ppc_32 7400
EOF
CMDS=<<EOF
iA
EOF
RUN

NAME=fatmach0 rabin2 archs
FILE=../bins/mach0/fatmach0-3true
EXPECT=<<EOF
000 0x00001000 13792 x86_64 x86 64 all
001 0x00005000 13760 x86_32 386
002 0x00009000 13616 ppc_32 7400
EOF
CMDS=<<EOF
!rabin2 -A ../bins/mach0/fatmach0-3true
EOF
RUN

NAME=fatmach0 extract
FILE=../bins/mach0/fatmach0-3true
ARGS=-n
EXPECT=<<EOF
fatmach0-3true.fat/fatmach0-3true.x86_64.0 created (13792)
fatmach0-3true.fat/fatmach0-3true.x86_32.1 created (13760)
fatmach0-3true.fat/fatmach0-3true.ppc_32.2 created (13616)
EOF
CMDS=<<EOF
!rabin2 -x ../bins/mach0/fatmach0-3true;!rm -rf fatmach0-3true.fat
EOF
RUN

NAME=fatmach0 sections
FILE=../bins/mach0/fatmach0-3true
ARGS=-a x86 -b 64
EXPECT=<<EOF
4
EOF
CMDS=<<EOF
om~?
EOF
RUN

NAME=fatmach0 rebase
FILE=../bins/mach0/fatmach0-3true
ARGS=-a x86 -b32 -B 0x90000000
EXPECT=<<EOF
[Symbols]

nth paddr       vaddr      bind   type size lib name
----------------------------------------------------
0    0x00005000 0x90000000 GLOBAL FUNC 0        __mh_execute_header
1    0x00005000 0x95613542 LOCAL  FUNC 0        radr://5614542
2    0x00005f94 0x90000f94 LOCAL  FUNC 0        imp.exit
EOF
CMDS=<<EOF
is
EOF
RUN
