NAME=dwarf5crash
FILE=bins/elf/dwarf/dwarf5-crash
CMDS=<<EOF
CL
EOF
EXPECT=<<EOF
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 84
colu: 1
addr: 0x00001050
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 94
colu: 3
addr: 0x00001054
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 95
colu: 3
addr: 0x00001059
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 96
colu: 3
addr: 0x00001059
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 96
colu: 3
addr: 0x00001061
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 98
colu: 1
addr: 0x00001066
file: /build/gcc-11-xKiWfi/gcc-11-11.3.0/build/x86_64-linux-gnu/libgcc/../../../src/libgcc/config/i386/crtfastmath.c
line: 98
colu: 1
addr: 0x00001067
file: /tmp/a.c
line: 8
colu: 0
addr: 0x00001160
file: /tmp/a.c
line: 10
colu: 20
addr: 0x00001170
file: /tmp/a.c
line: 10
colu: 12
addr: 0x00001175
file: /tmp/a.c
line: 10
colu: 10
addr: 0x0000117d
file: /tmp/a.c
line: 9
colu: 21
addr: 0x00001183
file: /tmp/a.c
line: 9
colu: 3
addr: 0x0000118e
file: /tmp/a.c
line: 12
colu: 1
addr: 0x00001190
file: /tmp/a.c
line: 12
colu: 1
addr: 0x0000119a
EOF
RUN

NAME="ansi injection via dwarf"
FILE=bins/elf/dwarf_test_func_patched
ARGS=-AA
CMDS=<<EOF
CL
xc
EOF
EXPECT=<<EOF
file: /_test.c
line: 4
colu: 28
addr: 0x00001149
file: /_test.c
line: 5
colu: 5
addr: 0x00001159
file: /_test.c
line: 6
colu: 1
addr: 0x00001165
file: /_test.c
line: 8
colu: 12
addr: 0x00001168
file: /_test.c
line: 9
colu: 5
addr: 0x00001170
file: /_test.c
line: 10
colu: 12
addr: 0x0000117f
file: /_test.c
line: 11
colu: 1
addr: 0x00001184
file: /_test.c
line: 11
colu: 1
addr: 0x00001186
- offset -  6061 6263 6465 6667 6869 6A6B 6C6D 6E6F  0123456789ABCDEF  comment
0x00001060  f30f 1efa 31ed 4989 d15e 4889 e248 83e4  ....1.I..^H..H..  ; rip ; [16] -r-x section size 294 named .text ; arg3
0x00001070  f050 5445 31c0 31c9 488d 3de9 0000 00ff  .PTE1.1.H.=.....
0x00001080  1553 2f00 00f4 662e 0f1f 8400 0000 0000  .S/...f.........
0x00001090  488d 3d79 2f00 0048 8d05 722f 0000 4839  H.=y/..H..r/..H9  ; sym.deregister_tm_clones
0x000010a0  f874 1548 8b05 362f 0000 4885 c074 09ff  .t.H..6/..H..t..
0x000010b0  e00f 1f80 0000 0000 c30f 1f80 0000 0000  ................
0x000010c0  488d 3d49 2f00 0048 8d35 422f 0000 4829  H.=I/..H.5B/..H)  ; sym.register_tm_clones
0x000010d0  fe48 89f0 48c1 ee3f 48c1 f803 4801 c648  .H..H..?H...H..H
0x000010e0  d1fe 7414 488b 0505 2f00 0048 85c0 7408  ..t.H.../..H..t.
0x000010f0  ffe0 660f 1f44 0000 c30f 1f80 0000 0000  ..f..D..........
0x00001100  f30f 1efa 803d 052f 0000 0075 2b55 4883  .....=./...u+UH.  ; sym.__do_global_dtors_aux
0x00001110  3de2 2e00 0000 4889 e574 0c48 8b3d e62e  =.....H..t.H.=..
0x00001120  0000 e819 ffff ffe8 64ff ffff c605 dd2e  ........d.......
0x00001130  0000 015d c30f 1f00 c30f 1f80 0000 0000  ...]............
0x00001140  f30f 1efa e977 ffff fff3 0f1e fa55 4889  .....w.......UH.  ; sym.frame_dummy  ; dbg._func ; void _func(char * msg);
0x00001150  e548 83ec 1048 897d f848 8b45 f848 89c7  .H...H.}.H.E.H.. ; arg1 ; const char *s
EOF
RUN

NAME="open companion file for macho dwarf"
FILE=bins/mach0/dwarf/a.out
CMDS=<<EOF
CL
EOF
EXPECT=<<EOF
file: /Users/pancake/hello.c
line: 2
colu: 0
addr: 0x100003f64
file: /Users/pancake/hello.c
line: 0
colu: 0
addr: 0x100003f6c
file: /Users/pancake/hello.c
line: 3
colu: 2
addr: 0x100003f74
file: /Users/pancake/hello.c
line: 0
colu: 0
addr: 0x100003f78
file: /Users/pancake/hello.c
line: 5
colu: 2
addr: 0x100003f80
file: /Users/pancake/hello.c
line: 6
colu: 1
addr: 0x100003f88
file: /Users/pancake/hello.c
line: 6
colu: 1
addr: 0x100003f90
EOF
RUN

NAME="pdf dwarf invalid main for analysis not found (aa)"
FILE=bins/src/dwarftest
CMDS=<<EOF
e asm.dwarf=true
e anal.nopskip=true # if set to true it fucks the test
aa
pd 1 @main
EOF
EXPECT=<<EOF
            ; DATA XREF from entry0 @ 0x40045d(r)
/ 44: int main (int argc, char **argv, char **envp);
| afv: vars(1:sp[0xc..0xc])
|           0x0040052d      55             push rbp                    ; dwarftest.c:4
EOF
RUN

NAME="Mach-O dSYM lines (armv7)"
FILE=bins/mach0/TestRTTI-armv7-dSYM
CMDS=<<EOF
CL 0x0000a24e
EOF
EXPECT=<<EOF
file: /Users/ftamagni/src/TestRTTI/TestRTTI/TestRTTI.cpp
line: 18
colu: 0
addr: 0x0000a24e
EOF
RUN

NAME="Mach-O dSYM symbols (armv7)"
FILE=bins/mach0/TestRTTI-armv7-dSYM
CMDS=<<EOF
is~main[1]
EOF
EXPECT=<<EOF
0x00006376
EOF
RUN

NAME="function info integration c++"
FILE=bins/elf/dwarf3_many_comp_units.elf 
CMDS=<<EOF
e asm.dwarf=false
e asm.var.summary=0
aaa
pd 13 @ main
EOF
EXPECT=<<EOF
            ;-- main:
            ; ICOD XREF from entry0 @ 0x10c1(r)
/ 139: int dbg.main (int argc, char **argv, char **envp);
|           ; var Mammal *m @ rbp-0x18
|           ; var Bird *b @ rbp-0x20
|           ; var int output @ rbp-0x24
|           0x0000123b      f30f1efa       endbr64                     ; int main();
|           0x0000123f      55             push rbp
|           0x00001240      4889e5         mov rbp, rsp
|           0x00001243      53             push rbx
|           0x00001244      4883ec28       sub rsp, 0x28
|           0x00001248      bf08000000     mov edi, 8
|           0x0000124d      e81efeffff     call sym.imp.operator_new_unsigned_long_
|           0x00001252      4889c3         mov rbx, rax
|           0x00001255      4889df         mov rdi, rbx                ; int64_t arg1
|           0x00001258      e827010000     call dbg.Bird::Bird()
|           0x0000125d      48895de0       mov qword [b], rbx
|           0x00001261      bf08000000     mov edi, 8
|           0x00001266      e805feffff     call sym.imp.operator_new_unsigned_long_
EOF
RUN


NAME="function info integration 1 rust"
FILE=bins/elf/dwarf_rust_bubble 
CMDS=<<EOF
e asm.dwarf=false
e asm.var.summary=0
aaa
pd 75 @ dbg.main
EOF
EXPECT=<<EOF
            ;-- rust::main::h523dcf5432fcfd88:
            ; ICOD XREF from main @ 0x5b0d(r)
/ 940: int dbg.main (int argc, char **argv);
|           ; var int64_t var_8h @ rsp+0x8
|           ; var int64_t var_10h @ rsp+0x10
|           ; var int64_t var_18h @ rsp+0x18
|           ; var int64_t var_20h @ rsp+0x20
|           ; var int64_t var_28h @ rsp+0x28
|           ; var int64_t var_30h @ rsp+0x30
|           ; var int64_t var_38h @ rsp+0x38
|           ; var int64_t var_40h @ rsp+0x40
|           ; var int64_t var_48h @ rsp+0x48
|           ; var int64_t var_50h @ rsp+0x50
|           ; var int64_t var_58h @ rsp+0x58
|           ; var int64_t var_60h @ rsp+0x60
|           ; var int64_t var_68h @ rsp+0x68
|           ; var int64_t var_70h @ rsp+0x70
|           ; var int64_t var_78h @ rsp+0x78
|           ; var i32[11] numbers @ rsp+0x80
|           ; var int64_t var_84h @ rsp+0x84
|           ; var int64_t var_88h @ rsp+0x88
|           ; var int64_t var_8ch @ rsp+0x8c
|           ; var int64_t var_90h @ rsp+0x90
|           ; var int64_t var_94h @ rsp+0x94
|           ; var int64_t var_98h @ rsp+0x98
|           ; var int64_t var_9ch @ rsp+0x9c
|           ; var int64_t var_a0h @ rsp+0xa0
|           ; var int64_t var_a4h @ rsp+0xa4
|           ; var int64_t var_a8h @ rsp+0xa8
|           ; var int64_t var_d8h @ rsp+0xd8
|           ; var int64_t var_e0h @ rsp+0xe0
|           ; var int64_t var_e8h @ rsp+0xe8
|           ; var int64_t var_f0h @ rsp+0xf0
|           ; var int64_t var_120h @ rsp+0x120
|           ; var int64_t var_128h @ rsp+0x128
|           ; var int64_t var_130h @ rsp+0x130
|           ; var &str[6] strings @ rsp+0x138
|           ; var int64_t var_140h @ rsp+0x140
|           ; var int64_t var_148h @ rsp+0x148
|           ; var int64_t var_150h @ rsp+0x150
|           ; var int64_t var_158h @ rsp+0x158
|           ; var int64_t var_160h @ rsp+0x160
|           ; var int64_t var_168h @ rsp+0x168
|           ; var int64_t var_170h @ rsp+0x170
|           ; var int64_t var_178h @ rsp+0x178
|           ; var int64_t var_180h @ rsp+0x180
|           ; var int64_t var_188h @ rsp+0x188
|           ; var int64_t var_1b8h @ rsp+0x1b8
|           ; var int64_t var_1c0h @ rsp+0x1c0
|           ; var int64_t var_1c8h @ rsp+0x1c8
|           ; var int64_t var_1d0h @ rsp+0x1d0
|           ; var int64_t var_200h @ rsp+0x200
|           ; var int64_t var_208h @ rsp+0x208
|           ; var int64_t var_210h @ rsp+0x210
|           ; var int64_t var_218h @ rsp+0x218
|           ; var int64_t var_220h @ rsp+0x220
|           ; var int64_t var_228h @ rsp+0x228
|           ; var &str[6] *arg0 @ rsp+0x230
|           0x00005750      4881ec3802..   sub rsp, 0x238              ; void main();
|           0x00005757      c784248000..   mov dword [numbers], 8
|           0x00005762      c784248400..   mov dword [var_84h], 7
|           0x0000576d      c784248800..   mov dword [var_88h], 1
|           0x00005778      c784248c00..   mov dword [var_8ch], 2
|           0x00005783      c784249000..   mov dword [var_90h], 9
|           0x0000578e      c784249400..   mov dword [var_94h], 3
|           0x00005799      c784249800..   mov dword [var_98h], 4
|           0x000057a4      c784249c00..   mov dword [var_9ch], 5
|           0x000057af      c78424a000..   mov dword [var_a0h], 0
|           0x000057ba      c78424a400..   mov dword [var_a4h], 6
|           0x000057c5      488b05842b..   mov rax, qword [0x00038350] ; [0x38350:8]=0x38330 reloc.fixup.Before:_After:_beachartcardeal
|           0x000057cc      488d8c2480..   lea rcx, [numbers]
|           0x000057d4      48898c24e8..   mov qword [var_e8h], rcx
|           0x000057dc      488b8c24e8..   mov rcx, qword [var_e8h]
|           0x000057e4      48898c2418..   mov qword [var_218h], rcx
|           0x000057ec      4889cf         mov rdi, rcx                ; int64_t arg1
|           0x000057ef      488d35da0f..   lea rsi, [sym.core::array::__impl_core::fmt::Debug_for__T_____::fmt::h894a83bd2e78b654] ; 0x67d0 ; "H\x83\xecHH\x89|$8H\x89t$@\xb8\n" ; int64_t arg2
|           0x000057f6      4889442478     mov qword [var_78h], rax
|           0x000057fb      e8501b0000     call dbg.new<[i32; 10]>     ; core::fmt::ArgumentV1::new::h4b3dd9450748c5fc
|           0x00005800      4889442470     mov qword [var_70h], rax
|           0x00005805      4889542468     mov qword [var_68h], rdx
|           0x0000580a      488b442470     mov rax, qword [var_70h]
|           0x0000580f      48898424d8..   mov qword [var_d8h], rax
|           0x00005817      488b4c2468     mov rcx, qword [var_68h]
|           0x0000581c      48898c24e0..   mov qword [var_e0h], rcx
|           0x00005824      488d9424d8..   lea rdx, [var_d8h]
|           0x0000582c      488dbc24a8..   lea rdi, [var_a8h]          ; int64_t arg1
|           0x00005834      488b742478     mov rsi, qword [var_78h]    ; int64_t arg2
|           0x00005839      41b802000000   mov r8d, 2
|           0x0000583f      4889542460     mov qword [var_60h], rdx
|           0x00005844      4c89c2         mov rdx, r8                 ; int64_t arg3
|           0x00005847      488b4c2460     mov rcx, qword [var_60h]    ; int64_t arg4
|           0x0000584c      41b801000000   mov r8d, 1                  ; int64_t arg5
|           0x00005852      e8591b0000     call dbg.new_v1             ; core::fmt::Arguments::new_v1::h2673b5bf555c0288
|           0x00005857      488dbc24a8..   lea rdi, [var_a8h]
|           0x0000585f      ff15b3430300   call qword [dbg._print]     ; [0x39c18:8]=0xa2d0 dbg._print
|           0x00005865      488d842480..   lea rax, [numbers]
|           0x0000586d      4889c7         mov rdi, rax                ; int64_t arg1
|           0x00005870      be0a000000     mov esi, 0xa                ; int64_t arg2
|           0x00005875      e8f6f9ffff     call dbg.bubble_sort<i32>   ; rust::bubble_sort::h0777bc845caabc60
|           0x0000587a      488b05f72a..   mov rax, qword [0x00038378] ; [0x38378:8]=0x38358 reloc.fixup.After:_beachartcardealempty_usr
|           0x00005881      488d8c2480..   lea rcx, [numbers]
|           0x00005889      48898c2430..   mov qword [var_130h], rcx
|           0x00005891      488b8c2430..   mov rcx, qword [var_130h]
|           0x00005899      48898c2420..   mov qword [var_220h], rcx
|           0x000058a1      4889cf         mov rdi, rcx                ; int64_t arg1
|           0x000058a4      488d35250f..   lea rsi, [sym.core::array::__impl_core::fmt::Debug_for__T_____::fmt::h894a83bd2e78b654] ; 0x67d0 ; "H\x83\xecHH\x89|$8H\x89t$@\xb8\n" ; int64_t arg2
|           0x000058ab      4889442458     mov qword [var_58h], rax
|           0x000058b0      e89b1a0000     call dbg.new<[i32; 10]>     ; core::fmt::ArgumentV1::new::h4b3dd9450748c5fc
|           0x000058b5      4889442450     mov qword [var_50h], rax
|           0x000058ba      4889542448     mov qword [var_48h], rdx
|           0x000058bf      488b442450     mov rax, qword [var_50h]
|           0x000058c4      4889842420..   mov qword [var_120h], rax
|           0x000058cc      488b4c2448     mov rcx, qword [var_48h]
|           0x000058d1      48898c2428..   mov qword [var_128h], rcx
|           0x000058d9      488d942420..   lea rdx, [var_120h]
|           0x000058e1      488dbc24f0..   lea rdi, [var_f0h]          ; int64_t arg1
|           0x000058e9      488b742458     mov rsi, qword [var_58h]    ; int64_t arg2
|           0x000058ee      41b802000000   mov r8d, 2
|           0x000058f4      4889542440     mov qword [var_40h], rdx
|           0x000058f9      4c89c2         mov rdx, r8                 ; int64_t arg3
|           0x000058fc      488b4c2440     mov rcx, qword [var_40h]    ; int64_t arg4
|           0x00005901      41b801000000   mov r8d, 1                  ; int64_t arg5
|           0x00005907      e8a41a0000     call dbg.new_v1             ; core::fmt::Arguments::new_v1::h2673b5bf555c0288
|           0x0000590c      488dbc24f0..   lea rdi, [var_f0h]
|           0x00005914      ff15fe420300   call qword [dbg._print]     ; [0x39c18:8]=0xa2d0 dbg._print
|           0x0000591a      488d052b47..   lea rax, [0x0002a04c]       ; "dealempty/usr/src/rustc-1.43.0/src/libcore/slice/mod.rscalled `Option::unwrap()` on a `None` valuesrc/libstd/env.rsfailed to ge"
|           0x00005921      488d0d2147..   lea rcx, [0x0002a049]       ; "cardealempty/usr/src/rustc-1.43.0/src/libcore/slice/mod.rscalled `Option::unwrap()` on a `None` valuesrc/libstd/env.rsfailed to"
|           0x00005928      488d151747..   lea rdx, [0x0002a046]       ; "artcardealempty/usr/src/rustc-1.43.0/src/libcore/slice/mod.rscalled `Option::unwrap()` on a `None` valuesrc/libstd/env.rsfailed"
|           0x0000592f      488d350b47..   lea rsi, [0x0002a041]       ; "beachartcardealempty/usr/src/rustc-1.43.0/src/libcore/slice/mod.rscalled `Option::unwrap()` on a `None` valuesrc/libstd/env.rsf"
|           0x00005936      488d3d1347..   lea rdi, [0x0002a050]       ; "empty/usr/src/rustc-1.43.0/src/libcore/slice/mod.rscalled `Option::unwrap()` on a `None` valuesrc/libstd/env.rsfailed to get en"
|           0x0000593d      4889bc2438..   mov qword [strings], rdi
|           0x00005945      48c7842440..   mov qword [var_140h], 5
|           0x00005951      4889b42448..   mov qword [var_148h], rsi
EOF
RUN


NAME="function info integration 2 rust"
FILE=bins/elf/dwarf_rust_bubble 
CMDS=<<EOF
e asm.dwarf=false
e asm.var.summary=0
aaa
pd 40 @  dbg.bubble_sort_i32_
EOF
EXPECT=<<EOF
            ;-- rust::bubble_sort::h0777bc845caabc60:
            ;-- dbg.bubble_sort_i32_:
            ; CALL XREF from rust::main::h523dcf5432fcfd88 @ 0x5875(x) ; dbg.main
/ 614: dbg.bubble_sort<i32> (int64_t arg1, int64_t arg2);
|           ; arg int64_t arg1 @ rdi
|           ; arg int64_t arg2 @ rsi
|           ; var int64_t var_fh @ rsp+0xf
|           ; var int64_t var_10h @ rsp+0x10
|           ; var int64_t var_18h @ rsp+0x18
|           ; var int64_t var_20h @ rsp+0x20
|           ; var int64_t var_28h @ rsp+0x28
|           ; var int64_t var_30h @ rsp+0x30
|           ; var int64_t var_38h @ rsp+0x38
|           ; var int64_t var_40h @ rsp+0x40
|           ; var int64_t var_48h @ rsp+0x48
|           ; var usize n @ rsp+0x50
|           ; var bool swapped @ rsp+0x5f
|           ; var int64_t var_60h @ rsp+0x60
|           ; var int64_t var_68h @ rsp+0x68
|           ; var Range<usize> iter @ rsp+0x70
|           ; var int64_t var_78h @ rsp+0x78
|           ; var int64_t var_80h @ rsp+0x80
|           ; var int64_t var_88h @ rsp+0x88
|           ; var &mut [i32] values @ rsp+0x90
|           ; var int64_t var_98h @ rsp+0x98
|           ; var usize val @ rsp+0xa0
|           ; var usize __next @ rsp+0xa8
|           ; var usize i @ rsp+0xb0
|           0x00005270      4881ecb800..   sub rsp, 0xb8               ; void bubble_sort<i32>(&mut [i32] values);
|           0x00005277      4889bc2490..   mov qword [values], rdi     ; arg1
|           0x0000527f      4889b42498..   mov qword [var_98h], rsi    ; arg2
|           0x00005287      48897c2448     mov qword [var_48h], rdi    ; arg1
|           0x0000528c      4889742440     mov qword [var_40h], rsi    ; arg2
|           0x00005291      e8ea090000     call dbg.len<i32>           ; core::slice::_<impl [T]>::len::hbaf7153778228b73
|           0x00005296      4889442450     mov qword [n], rax
|           0x0000529b      c644245f01     mov byte [swapped], 1
|           ; CODE XREF from rust::bubble_sort::h0777bc845caabc60 @ 0x5441(x)
|           0x000052a0      f644245f01     test byte [swapped], 1
|       ,=< 0x000052a5      7508           jne 0x52af
|       |   0x000052a7      4881c4b800..   add rsp, 0xb8
|       |   0x000052ae      c3             ret
|       |   ; CODE XREF from rust::bubble_sort::h0777bc845caabc60 @ 0x52a5(x)
|       `-> 0x000052af      c644245f00     mov byte [swapped], 0
|           0x000052b4      488b442450     mov rax, qword [n]
|           0x000052b9      48c7442460..   mov qword [var_60h], 1
|           0x000052c2      4889442468     mov qword [var_68h], rax
|           0x000052c7      488b7c2460     mov rdi, qword [var_60h]    ; int64_t arg1
|           0x000052cc      488b742468     mov rsi, qword [var_68h]    ; int64_t arg2
|           0x000052d1      e83a140000     call dbg.into_iter<core::ops::range::Range<usize>> ; _<I as core::iter::traits::collect::IntoIterator>::into_iter::h12f1e7995fb38cf5
|           0x000052d6      4889442438     mov qword [var_38h], rax
|           0x000052db      4889542430     mov qword [var_30h], rdx
|           0x000052e0      488b442438     mov rax, qword [var_38h]
|           0x000052e5      4889442470     mov qword [iter], rax
|           0x000052ea      488b4c2430     mov rcx, qword [var_30h]
|           0x000052ef      48894c2478     mov qword [var_78h], rcx
|           ; CODE XREF from rust::bubble_sort::h0777bc845caabc60 @ 0x5432(x)
|           0x000052f4      488d7c2470     lea rdi, [iter]             ; int64_t arg1
|           0x000052f9      e812130000     call dbg.next<usize>        ; core::iter::range::_<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next::h707e8283b20ce50a
|           0x000052fe      4889942488..   mov qword [var_88h], rdx
|           0x00005306      4889842480..   mov qword [var_80h], rax
|           0x0000530e      488b842480..   mov rax, qword [var_80h]
|           0x00005316      4885c0         test rax, rax
|       ,=< 0x00005319      7404           je 0x531f
|      ,==< 0x0000531b      eb00           jmp 0x531d
|      ||   ; CODE XREF from rust::bubble_sort::h0777bc845caabc60 @ 0x531b(x)
|     ,`--> 0x0000531d      eb23           jmp 0x5342
|     | |   ; CODE XREF from rust::bubble_sort::h0777bc845caabc60 @ 0x5319(x)
|     | `-> 0x0000531f      488b442450     mov rax, qword [n]
|     |     0x00005324      482d01000000   sub rax, 1
|     |     0x0000532a      0f92c1         setb cl
|     |     0x0000532d      f6c101         test cl, 1
|     |     0x00005330      4889442428     mov qword [var_28h], rax
|     | ,=< 0x00005335      0f857f010000   jne 0x54ba
EOF
RUN

NAME="big endian variable info"
FILE=bins/elf/ppc64_sudoku_dwarf 
CMDS=<<EOF
e asm.dwarf=false
e asm.var.summary=0
aaa
pdf @  dbg.init
EOF
EXPECT=<<EOF
            ;-- method.Grid.init__:
            ;-- Grid::init():
            ; CALL XREF from dbg.main @ 0x10001ae8(x)
/ 64: dbg.init (Grid * const this);
|           ; arg Grid * const this @ r3
|           0x100012bc      39030144       addi r8, r3, 0x144          ; arg1 [0m; void init(Grid * const this);
|           0x100012c0      38e30168       addi r7, r3, 0x168          ; arg1
|           0x100012c4      39400000       li r10, 0
|           ; CODE XREF from Grid::init() @ 0x100012e8(x)
|       .-> 0x100012c8      3928febc       addi r9, r8, -0x144
|       :   0x100012cc      38c00009       li r6, 9
|       :   0x100012d0      7cc903a6       mtctr r6
|       :   ; CODE XREF from Grid::init() @ 0x100012dc(x)
|      .--> 0x100012d4      91490000       stw r10, 0(r9)
|      ::   0x100012d8      39290024       addi r9, r9, 0x24
|      `==< 0x100012dc      4200fff8       bdnz 0x100012d4
|       :   0x100012e0      39080004       addi r8, r8, 4
|       :   0x100012e4      7c283840       cmpld r8, r7
|       `=< 0x100012e8      4082ffe0       bne 0x100012c8
|           0x100012ec      39200000       li r9, 0
|           0x100012f0      91230144       stw r9, 0x144(r3)           ; arg1
|           0x100012f4      91230148       stw r9, 0x148(r3)           ; arg1
\           0x100012f8      4e800020       blr
EOF
RUN

NAME="function info integration ada - wrap"
FILE=bins/elf/ada_test_dwarf 
CMDS=<<EOF
e asm.dwarf=false
e asm.cmt.wrap=true
e asm.var.summary=0
aaa
pdf @  dbg.main
EOF
EXPECT=<<EOF
            ;-- main:
            ; ICOD XREF from entry0 @ 0x2271(r)
/ 101: int dbg.main (int argc, char **argv, char **envp);
|           ; arg int argc @ rdi
|           ; arg char **argv @ rsi
|           ; arg char **envp @ rdx
|           ; var ada_main__main__seh___PAD seh @ rbp-0x8
|           ; var system__address volatile ensure_reference @ rbp-0x10
|           ; var int64_t var_14h @ rbp-0x14
|           ; var char **var_20h @ rbp-0x20
|           ; var char **var_28h @ rbp-0x28
; integer main(integer const argc,void * const argv,void * const envp)
|           0x00002742      55             push rbp
|           0x00002743      4889e5         mov rbp, rsp
|           0x00002746      4883ec30       sub rsp, 0x30
|           0x0000274a      897dec         mov dword [var_14h], edi    ; argc
|           0x0000274d      488975e0       mov qword [var_20h], rsi    ; argv
|           0x00002751      488955d8       mov qword [var_28h], rdx    ; envp
|           0x00002755      488d05dc08..   lea rax, obj.__gnat_ada_main_program_name ; 0x3038 ; "_ada_ada_test"
|           0x0000275c      488945f0       mov qword [ensure_reference], rax
|           0x00002760      8b45ec         mov eax, dword [var_14h]
|           0x00002763      8905572a0000   mov dword [obj.gnat_argc], eax ; [0x51c0:4]=0
|           0x00002769      488b45e0       mov rax, qword [var_20h]
|           0x0000276d      488905b429..   mov qword [obj.gnat_argv], rax ; [0x5128:8]=0
|           0x00002774      488b45d8       mov rax, qword [var_28h]
|           0x00002778      4889051129..   mov qword [obj.gnat_envp], rax ; [0x5090:8]=0
|           0x0000277f      488d45f8       lea rax, [seh.F]
|           0x00002783      4889c7         mov rdi, rax
|           0x00002786      e875f9ffff     call sym.imp.__gnat_initialize
|           0x0000278b      e8e8fcffff     call dbg.adainit
|           0x00002790      e847000000     call dbg._ada_ada_test
|           0x00002795      e8b6fcffff     call dbg.adafinal
|           0x0000279a      e8d1f8ffff     call sym.imp.__gnat_finalize
|           0x0000279f      8b054b290000   mov eax, dword [obj.gnat_exit_status] ; [0x50f0:4]=0
|           0x000027a5      c9             leave
\           0x000027a6      c3             ret
EOF
RUN

NAME="function info integration ada"
FILE=bins/elf/ada_test_dwarf 
CMDS=<<EOF
e asm.dwarf=false
e asm.cmt.wrap=false
e asm.var.summary=0
aaa
pdf @  dbg.main
EOF
EXPECT=<<EOF
            ;-- main:
            ; ICOD XREF from entry0 @ 0x2271(r)
/ 101: int dbg.main (int argc, char **argv, char **envp);
|           ; arg int argc @ rdi
|           ; arg char **argv @ rsi
|           ; arg char **envp @ rdx
|           ; var ada_main__main__seh___PAD seh @ rbp-0x8
|           ; var system__address volatile ensure_reference @ rbp-0x10
|           ; var int64_t var_14h @ rbp-0x14
|           ; var char **var_20h @ rbp-0x20
|           ; var char **var_28h @ rbp-0x28
|           0x00002742      55             push rbp                    ; integer main(integer const argc,void * const argv,void * const envp);
|           0x00002743      4889e5         mov rbp, rsp
|           0x00002746      4883ec30       sub rsp, 0x30
|           0x0000274a      897dec         mov dword [var_14h], edi    ; argc
|           0x0000274d      488975e0       mov qword [var_20h], rsi    ; argv
|           0x00002751      488955d8       mov qword [var_28h], rdx    ; envp
|           0x00002755      488d05dc08..   lea rax, obj.__gnat_ada_main_program_name ; 0x3038 ; "_ada_ada_test"
|           0x0000275c      488945f0       mov qword [ensure_reference], rax
|           0x00002760      8b45ec         mov eax, dword [var_14h]
|           0x00002763      8905572a0000   mov dword [obj.gnat_argc], eax ; [0x51c0:4]=0
|           0x00002769      488b45e0       mov rax, qword [var_20h]
|           0x0000276d      488905b429..   mov qword [obj.gnat_argv], rax ; [0x5128:8]=0
|           0x00002774      488b45d8       mov rax, qword [var_28h]
|           0x00002778      4889051129..   mov qword [obj.gnat_envp], rax ; [0x5090:8]=0
|           0x0000277f      488d45f8       lea rax, [seh.F]
|           0x00002783      4889c7         mov rdi, rax
|           0x00002786      e875f9ffff     call sym.imp.__gnat_initialize
|           0x0000278b      e8e8fcffff     call dbg.adainit
|           0x00002790      e847000000     call dbg._ada_ada_test
|           0x00002795      e8b6fcffff     call dbg.adafinal
|           0x0000279a      e8d1f8ffff     call sym.imp.__gnat_finalize
|           0x0000279f      8b054b290000   mov eax, dword [obj.gnat_exit_status] ; [0x50f0:4]=0
|           0x000027a5      c9             leave
\           0x000027a6      c3             ret
EOF
RUN

NAME="function info integration freepascal"
FILE=bins/efi/freepascal_test_dwarf 
CMDS=<<EOF
e asm.var.summary=0
e asm.dwarf=false
aaa
pd 20 @  dbg.palya
EOF
EXPECT=<<EOF
            ;-- unit p(mozgkigyo palya(smallint,smallint)):
            ; CALL XREFS from dbg.$main @ 0x405237(x), 0x40542d(x), 0x405ba3(x), 0x406e29(x)
/ 439: dbg.palya() ();
|           ; var SmallInt mag @ rbp-0x8
|           ; var SmallInt szel @ rbp-0x10
|           ; var SmallInt i @ rbp-0x14
|           ; var int64_t var_20h @ rbp-0x20
|           ; var int64_t var_28h @ rbp-0x28
|           0x00401980      55             push rbp                    ; void palya(SmallInt mag,SmallInt szel);
|           0x00401981      4889e5         mov rbp, rsp
|           0x00401984      488d6424d0     lea rsp, [rsp - 0x30]
|           0x00401989      48895dd8       mov qword [var_28h], rbx
|           0x0040198d      4c8965e0       mov qword [var_20h], r12
|           0x00401991      66897df8       mov word [mag], di
|           0x00401995      668975f0       mov word [szel], si
|           0x00401999      b801000000     mov eax, 1
|           0x0040199e      bf01000000     mov edi, 1                  ; int64_t arg2
|           0x004019a3      89c6           mov esi, eax                ; int64_t arg_8h
|           0x004019a5      e8b6a10200     call sym.unit_crt_gotoxy_tcrtcoord_tcrtcoord_ ; unit crt gotoxy(tcrtcoord,tcrtcoord)
|           0x004019aa      66448b65f0     mov r12w, word [szel]
|           0x004019af      66c745ec0100   mov word [i], 1
|           0x004019b5      66443b65ec     cmp r12w, word [i]
|       ,=< 0x004019ba      7c45           jl 0x401a01
|       |   0x004019bc      66816dec0100   sub word [i], 1
|       |   0x004019c2      66666690       nop
|       |   0x004019c6      6690           nop
|       |   ; CODE XREF from unit p$mozgkigyo palya(smallint,smallint) @ 0x4019ff(x)
|       |   0x004019c8      668145ec0100   add word [i], 1
|       |   0x004019ce      e82d280200     call sym.fpc_get_output__   ; fpc_get_output()
EOF
RUN
