NAME=mach0 function dwarf
FILE=bins/mach0/twocall
CMDS=<<EOF
e dir.source=./bins/mach0
CLL
?e --
CLL
?e --
af
CLLf
?e --
CL
?e --
CLf
EOF
EXPECT=<<EOF
0x100003f64  main() {
--
0x100003f64  main() {
--
0x100003f64  main() {
0x100003f7c  	printf ("Hello\n");
0x100003f84  	scanf ("Hello\n");
0x100003f8c  }
--
file: /Users/pancake/prg/radare2/test/bins/mach0/twocall.c
line: 2
colu: 0
addr: 0x100003f64
file: /Users/pancake/prg/radare2/test/bins/mach0/twocall.c
line: 0
colu: 0
addr: 0x100003f70
file: /Users/pancake/prg/radare2/test/bins/mach0/twocall.c
line: 3
colu: 2
addr: 0x100003f7c
file: /Users/pancake/prg/radare2/test/bins/mach0/twocall.c
line: 4
colu: 2
addr: 0x100003f84
file: /Users/pancake/prg/radare2/test/bins/mach0/twocall.c
line: 5
colu: 1
addr: 0x100003f8c
file: /Users/pancake/prg/radare2/test/bins/mach0/twocall.c
line: 5
colu: 1
addr: 0x100003f98
--
twocall.c
EOF
RUN


NAME=dwarf names with command syntax stay data in generated scripts
FILE=bins/elf/dwarf_injection
ARGS=-N -e scr.color=0
CMDS=<<EOF
aaa
afl
s 0x40100b
afn*
agR*
.agR*
axtg
tk~func.x_e
tk~^leak
EOF
EXPECT=<<EOF
0x00401000    1     11 dbg.main
0x0040100b    1     22 dbg.x_?e INJECTED_FN
'f dbg.x_?e INJECTED_FN=0x0040100b
'@0x0040100b'afnq dbg.x_?e INJECTED_FN
'@0x0040100b'afs void leak(_#include "dwarf_injection.h"_);_int dbg.x__e_INJECTED_FN (int a;?e INJECTED_ARG;#_?e INJECTED_NL_[31m);
'agn dbg.main
'agn dbg.x__e_INJECTED_FN
'age dbg.main dbg.x__e_INJECTED_FN
'agn dbg.x_?e\ INJECTED_FN
'agn 0x401005 "entry0\ +\ 5"
'agn 0x40100b "dbg.x_?e\ INJECTED_FN"
age 0x401005 0x40100b
func.x_e_INJECTED_FN=a;?e INJECTED_ARG;#_?e INJECTED_NL_[31m
func.x_e_INJECTED_FN.arg.0=int,a;?e INJECTED_ARG;#_?e INJECTED_NL_[31m
func.x_e_INJECTED_FN.args=1
func.x_e_INJECTED_FN.cc=amd64
func.x_e_INJECTED_FN.ret=void leak(_#include "dwarf_injection.h"_);_int
EOF
RUN

NAME=function names drop control characters and command separators
FILE=malloc://32
ARGS=-a x86 -b 64
CMDS=<<EOF
e anal.in=io.maps
wx c3
af
'afn a;b|c`d`
afl
EOF
EXPECT=<<EOF
0x00000000    1      1 a_b_c_d_
EOF
RUN

NAME=dwarf deep pointer type chain does not exhaust the stack
FILE=bins/elf/dwarf_deep_type_chain
ARGS=-N
CMDS=<<EOF
tk~^t=
?e loaded
EOF
EXPECT=<<EOF
loaded
EOF
RUN

NAME=dwarf array with too many dimensions is not imported
FILE=bins/elf/dwarf_many_dimensions
ARGS=-N
CMDS=<<EOF
tk~^typedef.matrix=
tk~^typedef.huge=
EOF
EXPECT=<<EOF
typedef.matrix=int[3][4]
EOF
RUN

NAME=dwarf zero-size attribute forms are bounded by the unit size
FILE=bins/elf/dwarf_zero_size_attrs
ARGS=-N
CMDS=<<EOF
?e loaded
EOF
EXPECT=<<EOF
loaded
EOF
EXPECT_ERR=<<EOF
WARN: Too many attributes in DWARF compilation unit at 0x0
EOF
RUN

NAME=dwarf5 variables sharing one location list walk it once
FILE=bins/elf/dwarf5_shared_loclist
ARGS=-N
TIMEOUT=10
CMDS=<<EOF
k anal/dwarf/fcn.f0.addr
EOF
EXPECT=<<EOF
0x400100
EOF
RUN

NAME=dwarf5 location list reads across functions are bounded
FILE=bins/elf/dwarf5_loclist_many_functions
ARGS=-N
TIMEOUT=10
CMDS=<<EOF
k anal/dwarf/fcn.f0.addr
EOF
EXPECT=<<EOF
0x400100
EOF
EXPECT_ERR=<<EOF
WARN: Too many reads of .debug_loclists, ignoring the remaining location lists
EOF
RUN
