NAME=tn symbol
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
tn-*
tn sym.imp.__libc_start_main
af
afi~size
EOF
EXPECT=<<EOF
size: 33
EOF
RUN

NAME=tn 0x08048550
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
tn-*
tn 0x08048550
af
afi~size
EOF
EXPECT=<<EOF
size: 33
EOF
RUN

NAME=tn 0x00048550
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
tn-*
af
afi~size
EOF
EXPECT=<<EOF
size: 34
EOF
RUN

NAME=tn- symbol1 symbol2
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
tn-*
tn __libc_start_main
tn- abc __libc_start_main
af
afi~size
EOF
EXPECT=<<EOF
size: 34
EOF
RUN

NAME=without noreturn
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
tn-*
af
afi~size
EOF
EXPECT=<<EOF
size: 34
EOF
RUN

NAME=no no return
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
af
af-
afi~size
EOF
EXPECT=<<EOF
EOF
RUN

NAME=no no return 2
FILE=bins/elf/analysis/hello-objc-linux
CMDS=<<EOF
af
af-*
afi~size
EOF
EXPECT=<<EOF
EOF
RUN

NAME=noreturn real test
FILE=bins/elf/analysis/noreturn
CMDS=<<EOF
e asm.bytes=true
aa
s main
pdf
EOF
EXPECT=<<EOF
            ; DATA XREF from entry0 @ 0x40048d
/ int main(int argc, char **argv, char **envp);
|           ; var int64_t var_ch @ stack - 0xc
|           0x00400566      55             push  rbp
|           0x00400567      4889e5         mov   rbp, rsp
|           0x0040056a      4883ec10       sub   rsp, 0x10
|           0x0040056e      837dfc00       cmp   dword [var_ch], 0
|       ,=< 0x00400572      740a           je    0x40057e
|       |   0x00400574      bf00000000     mov   edi, 0
|       |   0x00400579      e8d2feffff     call  sym.imp.exit          ; void exit(int status)
|       `-> 0x0040057e      bf20064000     mov   edi, str.hello        ; 0x400620 ; "hello"
|           0x00400583      e8a8feffff     call  sym.imp.puts          ; int puts(const char *s)
|           0x00400588      b800000000     mov   eax, 0
|           0x0040058d      c9             leave
\           0x0040058e      c3             ret
EOF
RUN

NAME=noreturn address
FILE==
CMDS=<<EOF
e asm.arch=x86
e asm.bits=32
wa "call 0x10;ret"
tn 0x10
af
pif
EOF
EXPECT=<<EOF
call fcn.00000010
EOF
RUN

NAME=noreturn propagation
FILE=bins/elf/noreturn
CMDS=<<EOF
aa
echo -- before --
afb@ sym.might_not_return
tn 0x00001050 # TODO: this should be done automatically
aanr
echo -- after --
afb@ sym.might_not_return
EOF
EXPECT=<<EOF
-- before --
0x00001167 0x00001172 00:0000 11 j 0x00001172
0x00001172 0x00001177 00:0000 5 j 0x00001250
0x00001177 0x00001181 00:0000 10 j 0x0000124b f 0x00001181
0x00001181 0x000011ae 00:0000 45 j 0x000011b0 f 0x000011ae
0x000011ae 0x000011b0 00:0000 2 j 0x00001172
0x000011b0 0x000011c7 00:0000 23 j 0x0000123d f 0x000011c7
0x000011c7 0x000011e9 00:0000 34 s 0x000011e9 s 0x000011f7 s 0x00001205 s 0x00001213 s 0x00001221 s 0x0000122f
0x000011e9 0x000011f7 00:0000 14 j 0x0000124c
0x000011f7 0x00001205 00:0000 14 j 0x0000124c
0x00001205 0x00001213 00:0000 14 j 0x0000124c
0x00001213 0x00001221 00:0000 14 j 0x0000124c
0x00001221 0x0000122f 00:0000 14 j 0x0000124c
0x0000122f 0x0000123d 00:0000 14 j 0x0000124c
0x0000123d 0x0000124b 00:0000 14 j 0x0000124c
0x0000124b 0x0000124c 00:0000 1 j 0x0000124c
0x0000124c 0x00001250 00:0000 4 j 0x00001250
0x00001250 0x0000125a 00:0000 10 j 0x00001177 f 0x0000125a
0x0000125a 0x00001260 00:0000 6 j 0x000012d1 f 0x00001260
0x00001260 0x00001266 00:0000 6 j 0x000012da f 0x00001266
0x00001266 0x0000126c 00:0000 6 j 0x000012da f 0x0000126c
0x0000126c 0x00001272 00:0000 6 j 0x000012da f 0x00001272
0x00001272 0x0000127d 00:0000 11 j 0x000012da f 0x0000127d
0x0000127d 0x0000129f 00:0000 34 s 0x0000129f s 0x000012a6 s 0x000012bc s 0x000012c3 s 0x000012ca
0x0000129f 0x000012a6 00:0000 7 j 0x000012df
0x000012a6 0x000012bc 00:0000 22 j 0x000012bc
0x000012bc 0x000012c3 00:0000 7 j 0x000012df
0x000012c3 0x000012ca 00:0000 7 j 0x000012df
0x000012ca 0x000012d1 00:0000 7 j 0x000012df
0x000012d1 0x000012da 00:0000 9 j 0x00001172
0x000012da 0x000012df 00:0000 5 j 0x000012df
0x000012df 0x000012e1 00:0000 2
-- after --
0x00001167 0x00001172 00:0000 11 j 0x00001172
0x00001172 0x00001177 00:0000 5 j 0x00001250
0x00001177 0x00001181 00:0000 10 j 0x0000124b f 0x00001181
0x00001181 0x0000118b 00:0000 10
0x0000124b 0x00001250 00:0000 5 j 0x00001250
0x00001250 0x0000125a 00:0000 10 j 0x00001177 f 0x0000125a
0x0000125a 0x00001260 00:0000 6 j 0x000012d1 f 0x00001260
0x00001260 0x00001266 00:0000 6 j 0x000012da f 0x00001266
0x00001266 0x0000126c 00:0000 6 j 0x000012da f 0x0000126c
0x0000126c 0x00001272 00:0000 6 j 0x000012da f 0x00001272
0x00001272 0x0000127d 00:0000 11 j 0x000012da f 0x0000127d
0x0000127d 0x0000129f 00:0000 34 s 0x0000129f s 0x000012a6 s 0x000012bc s 0x000012c3 s 0x000012ca
0x0000129f 0x000012a6 00:0000 7 j 0x000012df
0x000012a6 0x000012b0 00:0000 10
0x000012bc 0x000012c3 00:0000 7 j 0x000012df
0x000012c3 0x000012ca 00:0000 7 j 0x000012df
0x000012ca 0x000012d1 00:0000 7 j 0x000012df
0x000012d1 0x000012da 00:0000 9 j 0x00001172
0x000012da 0x000012df 00:0000 5 j 0x000012df
0x000012df 0x000012e1 00:0000 2
EOF
RUN
