;
; +-------------------------------------------------------------------------+
; |      This file was generated by The Interactive Disassembler (IDA)      |
; |           Copyright (c) 2024 Hex-Rays, <support@hex-rays.com>           |
; |                      License info: 48-2137-ACAB-99                      |
; |                                 HexRays                                 |
; +-------------------------------------------------------------------------+
;
; Input SHA256 : 938CCA4D92B67B4075858AF0B4D688425D95F2AA0ADECCCBC7BBEE26A52A9FF7
; Input MD5    : 9CFCE9BFE3D672A0776CA75ACD008BA0
; Input CRC32  : AD93E46B
; Compiler     : GNU C++

; File Name   : /mnt/tmpfs/libprogram-stage1-eef00c8be8d.so
; Format      : ELF64 for x86-64 (Shared object)
; Shared Name 'libprogram.so'
;
; Source File : 'crtstuff.c'
; Source File : 'program.544b1767a0473df8-cgu.0'
; Source File : 'crtstuff.c'

                .686p
                .mmx
                .model flat
.intel_syntax noprefix

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read
LOAD            segment mempage public 'DATA' use64
                assume cs:LOAD
dword_0         dd 464C457Fh            ; DATA XREF: LOAD:00000000000002B0↓o
                                        ; LOAD:00000000000002C8↓o ...
                                        ; File format: \x7FELF
                db 2                    ; File class: 64-bit
                db 1                    ; Data encoding: little-endian
                db 1                    ; File version
                db 0                    ; OS/ABI: UNIX System V ABI
                db 0                    ; ABI Version
                db 7 dup(0)             ; Padding
                dw 3                    ; File type: Shared object
                dw 3Eh                  ; Machine: x86-64
                dd 1                    ; File version
                dq 0                    ; Entry point
                dq 40h                  ; PHT file offset
                dq 1640h                ; SHT file offset
                dd 0                    ; Processor-specific flags
                dw 40h                  ; ELF header size
                dw 38h                  ; PHT entry size
                dw 0Ah                  ; Number of entries in PHT
                dw 40h                  ; SHT entry size
                dw 1Ch                  ; Number of entries in SHT
                dw 1Ah                  ; SHT entry index for string table
; ELF64 Program Header
; PHT Entry 0
dword_40        dd 6                    ; DATA XREF: LOAD:0000000000000050↓o
                                        ; Type: PHDR
                dd 4                    ; Flags
                dq 40h                  ; File offset
                dq offset dword_40      ; Virtual address
                dq 40h                  ; Physical address
                dq 230h                 ; Size in file image
                dq 230h                 ; Size in memory image
                dq 8                    ; Alignment
; PHT Entry 1
                dd 1                    ; Type: LOAD
                dd 4                    ; Flags
                dq 0                    ; File offset
                dq 0                    ; Virtual address
                dq 0                    ; Physical address
                dq 654h                 ; Size in file image
                dq 654h                 ; Size in memory image
                dq 1000h                ; Alignment
; PHT Entry 2
                dd 1                    ; Type: LOAD
                dd 5                    ; Flags
                dq 654h                 ; File offset
                dq offset _init_proc    ; Virtual address
                dq 1654h                ; Physical address
                dq 54Ch                 ; Size in file image
                dq 54Ch                 ; Size in memory image
                dq 1000h                ; Alignment
; PHT Entry 3
                dd 1                    ; Type: LOAD
                dd 6                    ; Flags
                dq 0BA0h                ; File offset
                dq offset __do_global_dtors_aux_fini_array_entry ; Virtual address
                dq 2BA0h                ; Physical address
                dq 248h                 ; Size in file image
                dq 460h                 ; Size in memory image
                dq 1000h                ; Alignment
; PHT Entry 4
                dd 1                    ; Type: LOAD
                dd 6                    ; Flags
                dq 0DE8h                ; File offset
                dq offset __dso_handle  ; Virtual address
                dq 3DE8h                ; Physical address
                dq 8                    ; Size in file image
                dq 9                    ; Size in memory image
                dq 1000h                ; Alignment
; PHT Entry 5
                dd 2                    ; Type: DYNAMIC
                dd 6                    ; Flags
                dq 0C28h                ; File offset
                dq offset stru_2C28     ; Virtual address
                dq 2C28h                ; Physical address
                dq 170h                 ; Size in file image
                dq 170h                 ; Size in memory image
                dq 8                    ; Alignment
; PHT Entry 6
                dd 6474E552h            ; Type: RO-AFTER
                dd 4                    ; Flags
                dq 0BA0h                ; File offset
                dq offset __do_global_dtors_aux_fini_array_entry ; Virtual address
                dq 2BA0h                ; Physical address
                dq 248h                 ; Size in file image
                dq 460h                 ; Size in memory image
                dq 1                    ; Alignment
; PHT Entry 7
                dd 6474E550h            ; Type: EH_FRAME
                dd 4                    ; Flags
                dq 5D0h                 ; File offset
                dq offset unk_5D0       ; Virtual address
                dq 5D0h                 ; Physical address
                dq 1Ch                  ; Size in file image
                dq 1Ch                  ; Size in memory image
                dq 4                    ; Alignment
; PHT Entry 8
                dd 6474E551h            ; Type: STACK
                dd 6                    ; Flags
                dq 0                    ; File offset
                dq 0                    ; Virtual address
                dq 0                    ; Physical address
                dq 0                    ; Size in file image
                dq 0                    ; Size in memory image
                dq 0                    ; Alignment
; PHT Entry 9
                dd 4                    ; Type: NOTE
                dd 4                    ; Flags
                dq 270h                 ; File offset
                dq offset dword_270     ; Virtual address
                dq 270h                 ; Physical address
                dq 24h                  ; Size in file image
                dq 24h                  ; Size in memory image
                dq 4                    ; Alignment
; ELF Note Entry
dword_270       dd 4                    ; DATA XREF: LOAD:0000000000000248↑o
                                        ; Name Size
                dd 14h                  ; Desc Size
                dd 3                    ; Type: NT_GNU_BUILD_ID
aGnu            db 'GNU',0              ; Name
                db 0DFh, 1Fh, 64h, 0C6h, 0FBh, 27h, 54h, 4Eh, 0F3h, 0FAh ; Desc
                db 0E5h, 0B7h, 80h, 28h, 41h, 0DDh, 0A7h, 29h, 0C8h, 8Ch
                align 8
; ELF Symbol Table
                Elf64_Sym <0>
                Elf64_Sym <offset aGmonStart - offset unk_378, 20h, 0, 0, \ ; "__gmon_start__"
                           offset dword_0, 0>
                Elf64_Sym <offset aItmDeregistert - offset unk_378, 20h, 0, 0, \ ; "_ITM_deregisterTMCloneTable"
                           offset dword_0, 0>
                Elf64_Sym <offset aItmRegistertmc - offset unk_378, 20h, 0, 0, \ ; "_ITM_registerTMCloneTable"
                           offset dword_0, 0>
                Elf64_Sym <offset aCxaFinalize - offset unk_378, 20h, 0, 0, \ ; "__cxa_finalize"
                           offset dword_0, 0>
                Elf64_Sym <offset aMemcpy - offset unk_378, 10h, 0, 0, offset dword_0,\ ; "memcpy"
                           0>
                Elf64_Sym <offset aGrPanic - offset unk_378, 10h, 0, 0, \ ; "gr_panic"
                           offset dword_0, 0>
                Elf64_Sym <offset aInit - offset unk_378, 12h, 0, 0Ch, offset init, \ ; "init"
                           2Fh>
; ELF GNU Hash Table
elf_gnu_hash_nbuckets dd 1
elf_gnu_hash_symbias dd 7
elf_gnu_hash_bitmask_nwords dd 1
elf_gnu_hash_shift dd 1Ah
elf_gnu_hash_indexes dq 200000080000000h
elf_gnu_hash_bucket dd 7
elf_gnu_hash_chain dd 7C988539h
; ELF String Table
unk_378         db    0                 ; DATA XREF: LOAD:00000000000002B0↑o
                                        ; LOAD:00000000000002C8↑o ...
aGmonStart      db '__gmon_start__',0   ; DATA XREF: LOAD:00000000000002B0↑o
aItmDeregistert db '_ITM_deregisterTMCloneTable',0
                                        ; DATA XREF: LOAD:00000000000002C8↑o
aItmRegistertmc db '_ITM_registerTMCloneTable',0
                                        ; DATA XREF: LOAD:00000000000002E0↑o
aCxaFinalize    db '__cxa_finalize',0   ; DATA XREF: LOAD:00000000000002F8↑o
aInit           db 'init',0             ; DATA XREF: LOAD:0000000000000340↑o
aMemcpy         db 'memcpy',0           ; DATA XREF: LOAD:0000000000000310↑o
aGrPanic        db 'gr_panic',0         ; DATA XREF: LOAD:0000000000000328↑o
aLibprogramSo   db 'libprogram.so',0
; ELF RELA Relocation Table
                Elf64_Rela <2BA0h, 8, 16F0h> ; R_X86_64_RELATIVE +16F0h
                Elf64_Rela <2BA8h, 8, 1730h> ; R_X86_64_RELATIVE +1730h
                Elf64_Rela <2BC8h, 8, 1995h> ; R_X86_64_RELATIVE +1995h
                Elf64_Rela <2BD0h, 8, 19CFh> ; R_X86_64_RELATIVE +19CFh
                Elf64_Rela <2BD8h, 8, 1979h> ; R_X86_64_RELATIVE +1979h
                Elf64_Rela <2BE0h, 8, 588h> ; R_X86_64_RELATIVE +588h
                Elf64_Rela <2BF0h, 8, 58Bh> ; R_X86_64_RELATIVE +58Bh
                Elf64_Rela <2C08h, 8, 5BDh> ; R_X86_64_RELATIVE +5BDh
                Elf64_Rela <2C18h, 8, 5CCh> ; R_X86_64_RELATIVE +5CCh
                Elf64_Rela <3DE8h, 8, 3DE8h> ; R_X86_64_RELATIVE +3DE8h
                Elf64_Rela <2D98h, 100000006h, 0> ; R_X86_64_GLOB_DAT __gmon_start__
                Elf64_Rela <2DA0h, 200000006h, 0> ; R_X86_64_GLOB_DAT _ITM_deregisterTMCloneTable
                Elf64_Rela <2DA8h, 300000006h, 0> ; R_X86_64_GLOB_DAT _ITM_registerTMCloneTable
                Elf64_Rela <2DB0h, 400000006h, 0> ; R_X86_64_GLOB_DAT __cxa_finalize
                Elf64_Rela <2DB8h, 500000006h, 0> ; R_X86_64_GLOB_DAT memcpy
                Elf64_Rela <2DC0h, 600000006h, 0> ; R_X86_64_GLOB_DAT gr_panic
; ELF JMPREL Relocation Table
                Elf64_Rela <2DE0h, 400000007h, 0> ; R_X86_64_JUMP_SLOT __cxa_finalize
LOAD            ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read
_rodata         segment byte public 'CONST' use64
                assume cs:_rodata
                ;org 588h
aMsg            db 'msg'                ; DATA XREF: .data.rel.ro:off_2BE0↓o
aHomeAlexWorkRu db '/home/alex/work/rust-regression/program/src/lib.rs'
                                        ; DATA XREF: .data.rel.ro:off_2BF0↓o
aPanickedWith   db 'panicked with ',27h ; DATA XREF: .data.rel.ro:off_2C08↓o
asc_5CC         db 27h                  ; DATA XREF: .data.rel.ro:0000000000002C18↓o
_rodata         ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read
LOAD            segment mempage public 'DATA' use64
                assume cs:LOAD
                ;org 5CDh
                align 10h
LOAD            ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read
_eh_frame_hdr   segment dword public 'CONST' use64
                assume cs:_eh_frame_hdr
                ;org 5D0h
unk_5D0         db    1                 ; DATA XREF: LOAD:00000000000001D8↑o
                db  1Bh
                db    3
                db  3Bh ; ;
                db  1Ch
                db    0
                db    0
                db    0
                db    2
                db    0
                db    0
                db    0
                db  70h ; p
                db  11h
                db    0
                db    0
                db  38h ; 8
                db    0
                db    0
                db    0
                db  70h ; p
                db  13h
                db    0
                db    0
                db  64h ; d
                db    0
                db    0
                db    0
_eh_frame_hdr   ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read
LOAD            segment mempage public 'DATA' use64
                assume cs:LOAD
                ;org 5ECh
                align 10h
LOAD            ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read
_eh_frame       segment qword public 'CONST' use64
                assume cs:_eh_frame
                ;org 5F0h
__FRAME_END__   db  14h
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    1
                db  7Ah ; z
                db  52h ; R
                db    0
                db    1
                db  78h ; x
                db  10h
                db    1
                db  1Bh
                db  0Ch
                db    7
                db    8
                db  90h
                db    1
                db    0
                db    0
                db  28h ; (
                db    0
                db    0
                db    0
                db  1Ch
                db    0
                db    0
                db    0
                db  30h ; 0
                db  11h
                db    0
                db    0
                db 0F2h
                db    1
                db    0
                db    0
                db    0
                db  41h ; A
                db  0Eh
                db  10h
                db  86h
                db    2
                db  43h ; C
                db  0Dh
                db    6
                db  4Dh ; M
                db  83h
                db    7
                db  8Ch
                db    6
                db  8Dh
                db    5
                db  8Eh
                db    4
                db  8Fh
                db    3
                db    3
                db 0E0h
                db    1
                db  0Ch
                db    7
                db    8
                db    0
                db    0
                db  18h
                db    0
                db    0
                db    0
                db  48h ; H
                db    0
                db    0
                db    0
                db    4
                db  13h
                db    0
                db    0
                db  39h ; 9
                db    0
                db    0
                db    0
                db    0
                db  41h ; A
                db  0Eh
                db  10h
                db  86h
                db    2
                db  43h ; C
                db  0Dh
                db    6
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
_eh_frame       ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
_init           segment dword public 'CODE' use64
                assume cs:_init
                ;org 1654h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

; =============== S U B R O U T I N E =======================================


                public _init_proc
_init_proc      proc near               ; DATA XREF: LOAD:00000000000000C0↑o
                endbr64                 ; _init
                sub     rsp, 8
                mov     rax, cs:__gmon_start___ptr
                test    rax, rax
                jz      short loc_166A
                call    rax ; __gmon_start__

loc_166A:                               ; CODE XREF: _init_proc+12↑j
                add     rsp, 8
                retn
_init_proc      endp

_init           ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
LOAD            segment mempage public 'CODE' use64
                assume cs:LOAD
                ;org 166Fh
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
                align 10h
LOAD            ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
_fini           segment dword public 'CODE' use64
                assume cs:_fini
                ;org 1670h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

; =============== S U B R O U T I N E =======================================


                public _term_proc
_term_proc      proc near
                endbr64                 ; _fini
                sub     rsp, 8
                add     rsp, 8
                retn
_term_proc      endp

_fini           ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
LOAD            segment mempage public 'CODE' use64
                assume cs:LOAD
                ;org 167Dh
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
                align 20h
LOAD            ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
_text           segment para public 'CODE' use64
                assume cs:_text
                ;org 1680h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

; =============== S U B R O U T I N E =======================================


deregister_tm_clones proc near          ; CODE XREF: __do_global_dtors_aux:loc_1717↓p
                lea     rdi, __dso_handle
                lea     rax, __dso_handle
                cmp     rax, rdi
                jz      short locret_16A8
                mov     rax, cs:_ITM_deregisterTMCloneTable_ptr
                test    rax, rax
                jz      short locret_16A8
                jmp     rax
; ---------------------------------------------------------------------------
                align 8

locret_16A8:                            ; CODE XREF: deregister_tm_clones+11↑j
                                        ; deregister_tm_clones+1D↑j
                retn
deregister_tm_clones endp

; ---------------------------------------------------------------------------
                align 10h

; =============== S U B R O U T I N E =======================================


register_tm_clones proc near            ; CODE XREF: frame_dummy+4↓j
                lea     rdi, __dso_handle
                lea     rsi, __dso_handle
                sub     rsi, rdi
                mov     rax, rsi
                shr     rsi, 3Fh
                sar     rax, 3
                add     rsi, rax
                sar     rsi, 1
                jz      short locret_16E8
                mov     rax, cs:_ITM_registerTMCloneTable_ptr
                test    rax, rax
                jz      short locret_16E8
                jmp     rax
; ---------------------------------------------------------------------------
                align 8

locret_16E8:                            ; CODE XREF: register_tm_clones+22↑j
                                        ; register_tm_clones+2E↑j
                retn
register_tm_clones endp

; ---------------------------------------------------------------------------
                align 10h

; =============== S U B R O U T I N E =======================================


__do_global_dtors_aux proc near         ; DATA XREF: .fini_array:__do_global_dtors_aux_fini_array_entry↓o
                endbr64
                cmp     cs:completed_0, 0
                jnz     short locret_1728
                push    rbp
                cmp     cs:__cxa_finalize_ptr, 0
                mov     rbp, rsp
                jz      short loc_1717
                mov     rdi, cs:__dso_handle ; void *
                call    ___cxa_finalize

loc_1717:                               ; CODE XREF: __do_global_dtors_aux+19↑j
                call    deregister_tm_clones
                mov     cs:completed_0, 1
                pop     rbp
                retn
; ---------------------------------------------------------------------------
                align 8

locret_1728:                            ; CODE XREF: __do_global_dtors_aux+B↑j
                retn
__do_global_dtors_aux endp

; ---------------------------------------------------------------------------
                align 10h

; =============== S U B R O U T I N E =======================================


frame_dummy     proc near               ; DATA XREF: .init_array:__frame_dummy_init_array_entry↓o
                endbr64
                jmp     register_tm_clones
frame_dummy     endp

; ---------------------------------------------------------------------------
                align 20h

; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

; core::fmt::write
_ZN4core3fmt5write17h42450338cf9c36b5E proc near
                                        ; CODE XREF: core::fmt::Write::write_fmt+17↓j
                                        ; <core::panic::panic_info::PanicMessage as core::fmt::Display>::fmt+18↓j

var_78          = qword ptr -78h
var_70          = qword ptr -70h
var_68          = qword ptr -68h
var_60          = qword ptr -60h
var_58          = qword ptr -58h
var_50          = qword ptr -50h
var_48          = qword ptr -48h
var_40          = qword ptr -40h
var_38          = byte ptr -38h
var_30          = qword ptr -30h

; __unwind {
                push    rbp
                mov     rbp, rsp
                push    r15
                push    r14
                push    r13
                push    r12
                push    rbx
                sub     rsp, 58h
                mov     [rbp+var_40], 20h ; ' '
                mov     [rbp+var_38], 3
                mov     [rbp+var_70], 0
                mov     [rbp+var_60], 0
                mov     [rbp+var_50], rdi
                mov     [rbp+var_48], rsi
                mov     r12, [rdx+20h]
                test    r12, r12
                mov     [rbp+var_30], rdx
                jz      loc_188C
                mov     rax, [rdx+28h]
                test    rax, rax
                jz      loc_18ED
                mov     r13, [rdx]
                mov     r14, [rdx+10h]
                add     r13, 8
                imul    rax, 38h ; '8'
                mov     [rbp+var_78], rax
                xor     ebx, ebx
                xor     r15d, r15d
                nop     dword ptr [rax+rax+00h]

loc_17B0:                               ; CODE XREF: core::fmt::write+144↓j
                mov     rdx, [r13+0]
                test    rdx, rdx
                jz      short loc_17D0
                mov     rdi, [rbp+var_50]
                mov     rax, [rbp+var_48]
                mov     rsi, [r13-8]
                call    qword ptr [rax+18h]
                test    al, al
                jnz     loc_191D

loc_17D0:                               ; CODE XREF: core::fmt::write+77↑j
                mov     eax, [r12+rbx+28h]
                mov     dword ptr [rbp+var_40], eax
                movzx   eax, byte ptr [r12+rbx+30h]
                mov     [rbp+var_38], al
                mov     eax, [r12+rbx+2Ch]
                mov     dword ptr [rbp+var_40+4], eax
                mov     rcx, [r12+rbx+10h]
                mov     rax, [r12+rbx+18h]
                test    rcx, rcx
                jz      short loc_1813
                cmp     ecx, 1
                jnz     short loc_1809
                shl     rax, 4
                cmp     qword ptr [r14+rax+8], 0
                jz      short loc_180D

loc_1809:                               ; CODE XREF: core::fmt::write+BB↑j
                xor     ecx, ecx
                jmp     short loc_1818
; ---------------------------------------------------------------------------

loc_180D:                               ; CODE XREF: core::fmt::write+C7↑j
                add     rax, r14
                mov     rax, [rax]

loc_1813:                               ; CODE XREF: core::fmt::write+B6↑j
                mov     ecx, 1

loc_1818:                               ; CODE XREF: core::fmt::write+CB↑j
                mov     [rbp+var_70], rcx
                mov     [rbp+var_68], rax
                mov     rcx, [r12+rbx]
                cmp     rcx, 2
                jz      short loc_1840
                mov     rax, [r12+rbx+8]
                cmp     ecx, 1
                jnz     short loc_184A
                shl     rax, 4
                cmp     qword ptr [r14+rax+8], 0
                jz      short loc_1844

loc_1840:                               ; CODE XREF: core::fmt::write+E8↑j
                xor     ecx, ecx
                jmp     short loc_184F
; ---------------------------------------------------------------------------

loc_1844:                               ; CODE XREF: core::fmt::write+FE↑j
                add     rax, r14
                mov     rax, [rax]

loc_184A:                               ; CODE XREF: core::fmt::write+F2↑j
                mov     ecx, 1

loc_184F:                               ; CODE XREF: core::fmt::write+102↑j
                mov     [rbp+var_60], rcx
                mov     [rbp+var_58], rax
                mov     rax, [r12+rbx+20h]
                shl     rax, 4
                mov     rdi, [r14+rax]
                lea     rsi, [rbp+var_70]
                call    qword ptr [r14+rax+8]
                test    al, al
                jnz     loc_191D
                add     r13, 10h
                add     rbx, 38h ; '8'
                inc     r15
                cmp     [rbp+var_78], rbx
                jnz     loc_17B0
                jmp     short loc_18F0
; ---------------------------------------------------------------------------

loc_188C:                               ; CODE XREF: core::fmt::write+40↑j
                mov     rbx, [rdx+18h]
                test    rbx, rbx
                jz      short loc_18ED
                mov     r12, [rdx+10h]
                mov     r13, [rdx]
                shl     rbx, 4
                xor     r14d, r14d
                xor     r15d, r15d
                db      2Eh
                nop     word ptr [rax+rax+00000000h]

loc_18B0:                               ; CODE XREF: core::fmt::write+1A9↓j
                mov     rdx, [r13+r14+8]
                test    rdx, rdx
                jz      short loc_18CE
                mov     rdi, [rbp+var_50]
                mov     rax, [rbp+var_48]
                mov     rsi, [r13+r14+0]
                call    qword ptr [rax+18h]
                test    al, al
                jnz     short loc_191D

loc_18CE:                               ; CODE XREF: core::fmt::write+178↑j
                mov     rdi, [r12+r14]
                lea     rsi, [rbp+var_70]
                call    qword ptr [r12+r14+8]
                test    al, al
                jnz     short loc_191D
                add     r14, 10h
                inc     r15
                cmp     rbx, r14
                jnz     short loc_18B0
                jmp     short loc_18F0
; ---------------------------------------------------------------------------

loc_18ED:                               ; CODE XREF: core::fmt::write+4D↑j
                                        ; core::fmt::write+153↑j
                xor     r15d, r15d

loc_18F0:                               ; CODE XREF: core::fmt::write+14A↑j
                                        ; core::fmt::write+1AB↑j
                mov     rax, [rbp+var_30]
                cmp     r15, [rax+8]
                jnb     short loc_1921
                mov     rax, [rbp+var_30]
                mov     rax, [rax]
                shl     r15, 4
                mov     rdi, [rbp+var_50]
                mov     rcx, [rbp+var_48]
                mov     rsi, [rax+r15]
                mov     rdx, [rax+r15+8]
                call    qword ptr [rcx+18h]
                test    al, al
                jz      short loc_1921

loc_191D:                               ; CODE XREF: core::fmt::write+8A↑j
                                        ; core::fmt::write+12F↑j ...
                mov     al, 1
                jmp     short loc_1923
; ---------------------------------------------------------------------------

loc_1921:                               ; CODE XREF: core::fmt::write+1B8↑j
                                        ; core::fmt::write+1DB↑j
                xor     eax, eax

loc_1923:                               ; CODE XREF: core::fmt::write+1DF↑j
                add     rsp, 58h
                pop     rbx
                pop     r12
                pop     r13
                pop     r14
                pop     r15
                pop     rbp
                retn
; } // starts at 1740
_ZN4core3fmt5write17h42450338cf9c36b5E endp

; ---------------------------------------------------------------------------
                align 20h

; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

; core::panicking::panic_fmt
_ZN4core9panicking9panic_fmt17hf986df957479a2d9E proc near ; CODE XREF: init+2A↓p

var_40          = xmmword ptr -40h
var_30          = xmmword ptr -30h
var_20          = xmmword ptr -20h
var_10          = qword ptr -10h
var_8           = word ptr -8

; __unwind {
                push    rbp
                mov     rbp, rsp
                sub     rsp, 40h
                movups  xmm0, xmmword ptr [rdi]
                movups  xmm1, xmmword ptr [rdi+10h]
                movups  xmm2, xmmword ptr [rdi+20h]
                movaps  [rbp+var_20], xmm2
                movaps  [rbp+var_30], xmm1
                movaps  [rbp+var_40], xmm0
                lea     rax, off_2BF0   ; "/home/alex/work/rust-regression/program"...
                mov     [rbp+var_10], rax
                mov     [rbp+var_8], 1
                lea     rdi, [rbp+var_40]
                call    rust_begin_unwind
; } // starts at 1940
_ZN4core9panicking9panic_fmt17hf986df957479a2d9E endp ; sp-analysis failed


; =============== S U B R O U T I N E =======================================


; core::fmt::Write::write_fmt
_ZN4core3fmt5Write9write_fmt17he5b4ca05c5ed9456E proc near
                                        ; CODE XREF: rust_begin_unwind+63↓p
                                        ; DATA XREF: .data.rel.ro:0000000000002BD8↓o
                mov     rdx, rsi
                mov     rax, [rsi+8]
                cmp     rax, 1
                jz      short loc_1989
                test    rax, rax

loc_1989:                               ; CODE XREF: core::fmt::Write::write_fmt+B↑j
                lea     rsi, unk_2BB0
                jmp     _ZN4core3fmt5write17h42450338cf9c36b5E ; core::fmt::write
_ZN4core3fmt5Write9write_fmt17he5b4ca05c5ed9456E endp


; =============== S U B R O U T I N E =======================================


; <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_str
_ZN81_$LT$arrayvec__array_string__ArrayString$LT$_$GT$$u20$as$u20$core__fmt__Write$GT$9write_str17h7f63bc799397b7c4E proc near
                                        ; DATA XREF: .data.rel.ro:0000000000002BC8↓o
                push    r15
                push    r14
                push    rbx
                mov     rbx, rdx
                mov     eax, [rdi]
                mov     r15d, 400h
                sub     r15, rax
                cmp     r15, rdx
                jb      short loc_19C3
                mov     r14, rdi
                add     rdi, rax
                add     rdi, 4          ; dest
                mov     rdx, rbx        ; n
                call    cs:memcpy_ptr
                add     [r14], ebx

loc_19C3:                               ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_str+16↑j
                cmp     r15, rbx
                setb    al
                pop     rbx
                pop     r14
                pop     r15
                retn
_ZN81_$LT$arrayvec__array_string__ArrayString$LT$_$GT$$u20$as$u20$core__fmt__Write$GT$9write_str17h7f63bc799397b7c4E endp


; =============== S U B R O U T I N E =======================================


; <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char
_ZN81_$LT$arrayvec__array_string__ArrayString$LT$_$GT$$u20$as$u20$core__fmt__Write$GT$10write_char17h62e5f55538f223e2E proc near
                                        ; DATA XREF: .data.rel.ro:0000000000002BD0↓o
                mov     ecx, [rdi]
                mov     rdx, rcx
                sub     rdx, 400h
                setnz   al
                cmp     esi, 80h
                setb    r8b
                test    r8b, al
                jz      short loc_19F9
                mov     [rdi+rcx+4], sil
                push    1
                jmp     loc_1AA9
; ---------------------------------------------------------------------------

loc_19F9:                               ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char+1C↑j
                neg     rdx
                cmp     esi, 800h
                setb    al
                cmp     rdx, 2
                setnb   r8b
                test    al, r8b
                jz      short loc_1A2E
                mov     eax, esi
                shr     eax, 6
                or      al, 0C0h
                mov     [rdi+rcx+4], al
                and     sil, 3Fh
                or      sil, 80h
                mov     [rdi+rcx+5], sil
                push    2
                jmp     short loc_1AA9
; ---------------------------------------------------------------------------

loc_1A2E:                               ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char+41↑j
                cmp     esi, 10000h
                setb    al
                cmp     rdx, 3
                setnb   r8b
                test    al, r8b
                jz      short loc_1A6D
                mov     eax, esi
                shr     eax, 0Ch
                or      al, 0E0h
                mov     [rdi+rcx+4], al
                mov     eax, esi
                shr     eax, 6
                and     al, 3Fh
                or      al, 80h
                mov     [rdi+rcx+5], al
                and     sil, 3Fh
                or      sil, 80h
                mov     [rdi+rcx+6], sil
                push    3
                jmp     short loc_1AA9
; ---------------------------------------------------------------------------

loc_1A6D:                               ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char+73↑j
                mov     al, 1
                cmp     rdx, 3
                jbe     short locret_1AB0
                mov     eax, esi
                shr     eax, 12h
                or      al, 0F0h
                mov     [rdi+rcx+4], al
                mov     eax, esi
                shr     eax, 0Ch
                and     al, 3Fh
                or      al, 80h
                mov     [rdi+rcx+5], al
                mov     eax, esi
                shr     eax, 6
                and     al, 3Fh
                or      al, 80h
                mov     [rdi+rcx+6], al
                and     sil, 3Fh
                or      sil, 80h
                mov     [rdi+rcx+7], sil
                push    4

loc_1AA9:                               ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char+25↑j
                                        ; <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char+5D↑j ...
                pop     rax
                add     ecx, eax
                mov     [rdi], ecx
                xor     eax, eax

locret_1AB0:                            ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char+A4↑j
                retn
_ZN81_$LT$arrayvec__array_string__ArrayString$LT$_$GT$$u20$as$u20$core__fmt__Write$GT$10write_char17h62e5f55538f223e2E endp


; =============== S U B R O U T I N E =======================================


                public init
init            proc near               ; DATA XREF: LOAD:0000000000000340↑o

var_30          = byte ptr -30h

                sub     rsp, 38h
                lea     rax, off_2BE0   ; "msg"
                lea     rdi, [rsp+38h+var_30]
                mov     [rdi], rax
                mov     qword ptr [rdi+8], 1
                mov     qword ptr [rdi+10h], 8
                xorps   xmm0, xmm0
                movups  xmmword ptr [rdi+18h], xmm0
                call    _ZN4core9panicking9panic_fmt17hf986df957479a2d9E ; core::panicking::panic_fmt
init            endp ; sp-analysis failed


; =============== S U B R O U T I N E =======================================


rust_begin_unwind proc near             ; CODE XREF: core::panicking::panic_fmt+34↑p

var_468         = byte ptr -468h
var_438         = byte ptr -438h
var_404         = byte ptr -404h
var_400         = byte ptr -400h

                sub     rsp, 478h
                movups  xmm0, xmmword ptr [rdi]
                movups  xmm1, xmmword ptr [rdi+10h]
                movups  xmm2, xmmword ptr [rdi+20h]
                lea     rax, [rsp+478h+var_468]
                movaps  xmmword ptr [rax+20h], xmm2
                movaps  xmmword ptr [rax+10h], xmm1
                movaps  xmmword ptr [rax], xmm0
                lea     rdi, [rsp+478h+var_404]
                and     dword ptr [rdi], 0
                mov     rcx, rsp
                mov     [rcx], rax
                lea     rax, off_2C08   ; "panicked with '"
                lea     rsi, [rsp+478h+var_438]
                mov     [rsi], rax
                mov     qword ptr [rsi+8], 2
                and     qword ptr [rsi+20h], 0
                lea     rax, _ZN76_$LT$core__panic__panic_info__PanicMessage$u20$as$u20$core__fmt__Display$GT$3fmt17h99a5d0e6dcda5aebE ; <core::panic::panic_info::PanicMessage as core::fmt::Display>::fmt
                mov     [rcx+8], rax
                mov     [rsi+10h], rcx
                mov     qword ptr [rsi+18h], 1
                call    _ZN4core3fmt5Write9write_fmt17he5b4ca05c5ed9456E ; core::fmt::Write::write_fmt
                lea     rdi, [rsp+478h+var_400]
                mov     esi, [rdi-4]
                call    cs:gr_panic_ptr
rust_begin_unwind endp ; sp-analysis failed


; =============== S U B R O U T I N E =======================================


; <core::panic::panic_info::PanicMessage as core::fmt::Display>::fmt
_ZN76_$LT$core__panic__panic_info__PanicMessage$u20$as$u20$core__fmt__Display$GT$3fmt17h99a5d0e6dcda5aebE proc near
                                        ; DATA XREF: rust_begin_unwind+4C↑o
                mov     rdx, rdi
                mov     rax, [rdi+8]
                cmp     rax, 1
                jz      short loc_1B66
                test    rax, rax

loc_1B66:                               ; CODE XREF: <core::panic::panic_info::PanicMessage as core::fmt::Display>::fmt+B↑j
                mov     rdi, [rsi+20h]
                mov     rsi, [rsi+28h]
                jmp     _ZN4core3fmt5write17h42450338cf9c36b5E ; core::fmt::write
_ZN76_$LT$core__panic__panic_info__PanicMessage$u20$as$u20$core__fmt__Display$GT$3fmt17h99a5d0e6dcda5aebE endp

_text           ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
LOAD            segment mempage public 'CODE' use64
                assume cs:LOAD
                ;org 1B73h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
                align 20h
LOAD            ends

; ===========================================================================

; Segment type: Pure code
; Segment permissions: Read/Execute
_plt            segment para public 'CODE' use64
                assume cs:_plt
                ;org 1B80h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing

; =============== S U B R O U T I N E =======================================


sub_1B80        proc near               ; CODE XREF: .plt:0000000000001B9B↓j
                push    cs:qword_2DD0
                jmp     cs:qword_2DD8
sub_1B80        endp

; ---------------------------------------------------------------------------
                align 10h
; [00000006 BYTES: COLLAPSED FUNCTION ___cxa_finalize]
; ---------------------------------------------------------------------------
                push    0
                jmp     sub_1B80
_plt            ends

; ELF Termination Function Table
; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
_fini_array     segment qword public 'DATA' use64
                assume cs:_fini_array
                ;org 2BA0h
__do_global_dtors_aux_fini_array_entry dq offset __do_global_dtors_aux
                                        ; DATA XREF: LOAD:00000000000000F8↑o
                                        ; LOAD:00000000000001A0↑o
_fini_array     ends

; ELF Initialization Function Table
; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
_init_array     segment qword public 'DATA' use64
                assume cs:_init_array
                ;org 2BA8h
__frame_dummy_init_array_entry dq offset frame_dummy
_init_array     ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
_data_rel_ro    segment qword public 'DATA' use64
                assume cs:_data_rel_ro
                ;org 2BB0h
unk_2BB0        db    0                 ; DATA XREF: core::fmt::Write::write_fmt:loc_1989↑o
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    4
                db    4
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    4
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                dq offset _ZN81_$LT$arrayvec__array_string__ArrayString$LT$_$GT$$u20$as$u20$core__fmt__Write$GT$9write_str17h7f63bc799397b7c4E ; <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_str
                dq offset _ZN81_$LT$arrayvec__array_string__ArrayString$LT$_$GT$$u20$as$u20$core__fmt__Write$GT$10write_char17h62e5f55538f223e2E ; <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_char
                dq offset _ZN4core3fmt5Write9write_fmt17he5b4ca05c5ed9456E ; core::fmt::Write::write_fmt
off_2BE0        dq offset aMsg          ; DATA XREF: init+4↑o
                                        ; "msg"
                db    3
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
off_2BF0        dq offset aHomeAlexWorkRu
                                        ; DATA XREF: core::panicking::panic_fmt+1F↑o
                                        ; "/home/alex/work/rust-regression/program"...
                db  32h ; 2
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db  0Bh
                db    0
                db    0
                db    0
                db    5
                db    0
                db    0
                db    0
off_2C08        dq offset aPanickedWith ; DATA XREF: rust_begin_unwind+30↑o
                                        ; "panicked with '"
                db  0Fh
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                dq offset asc_5CC       ; "'"
                db    1
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
                db    0
_data_rel_ro    ends

; ELF Dynamic Information
; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
LOAD            segment mempage public 'DATA' use64
                assume cs:LOAD
                ;org 2C28h
stru_2C28       Elf64_Dyn <0Eh, 6Ah>    ; DATA XREF: LOAD:0000000000000168↑o
                                        ; .got.plt:_GLOBAL_OFFSET_TABLE_↓o
                                        ; DT_SONAME libprogram.so
                Elf64_Dyn <1Eh, 8>      ; DT_FLAGS
                Elf64_Dyn <6FFFFFFBh, 1> ; DT_FLAGS_1
                Elf64_Dyn <7, 3F0h>     ; DT_RELA
                Elf64_Dyn <8, 180h>     ; DT_RELASZ
                Elf64_Dyn <9, 18h>      ; DT_RELAENT
                Elf64_Dyn <6FFFFFF9h, 0Ah> ; DT_RELACOUNT
                Elf64_Dyn <17h, 570h>   ; DT_JMPREL
                Elf64_Dyn <2, 18h>      ; DT_PLTRELSZ
                Elf64_Dyn <3, 2DC8h>    ; DT_PLTGOT
                Elf64_Dyn <14h, 7>      ; DT_PLTREL
                Elf64_Dyn <6, 298h>     ; DT_SYMTAB
                Elf64_Dyn <0Bh, 18h>    ; DT_SYMENT
                Elf64_Dyn <5, 378h>     ; DT_STRTAB
                Elf64_Dyn <0Ah, 78h>    ; DT_STRSZ
                Elf64_Dyn <6FFFFEF5h, 358h> ; DT_GNU_HASH
                Elf64_Dyn <19h, 2BA8h>  ; DT_INIT_ARRAY
                Elf64_Dyn <1Bh, 8>      ; DT_INIT_ARRAYSZ
                Elf64_Dyn <1Ah, 2BA0h>  ; DT_FINI_ARRAY
                Elf64_Dyn <1Ch, 8>      ; DT_FINI_ARRAYSZ
                Elf64_Dyn <0Ch, 1654h>  ; DT_INIT
                Elf64_Dyn <0Dh, 1670h>  ; DT_FINI
                Elf64_Dyn <0>           ; DT_NULL
LOAD            ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
_got            segment qword public 'DATA' use64
                assume cs:_got
                ;org 2D98h
__gmon_start___ptr dq offset __gmon_start__ ; DATA XREF: _init_proc+8↑r
_ITM_deregisterTMCloneTable_ptr dq offset _ITM_deregisterTMCloneTable
                                        ; DATA XREF: deregister_tm_clones+13↑r
_ITM_registerTMCloneTable_ptr dq offset _ITM_registerTMCloneTable
                                        ; DATA XREF: register_tm_clones+24↑r
__cxa_finalize_ptr dq offset __cxa_finalize ; DATA XREF: __do_global_dtors_aux+E↑r
memcpy_ptr      dq offset memcpy        ; DATA XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_str+25↑r
gr_panic_ptr    dq offset gr_panic      ; DATA XREF: rust_begin_unwind+70↑r
_got            ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
_got_plt        segment qword public 'DATA' use64
                assume cs:_got_plt
                ;org 2DC8h
_GLOBAL_OFFSET_TABLE_ dq offset stru_2C28
qword_2DD0      dq 0                    ; DATA XREF: sub_1B80↑r
qword_2DD8      dq 0                    ; DATA XREF: sub_1B80+6↑r
off_2DE0        dq offset __cxa_finalize ; DATA XREF: ___cxa_finalize↑r
_got_plt        ends

; ===========================================================================

; Segment type: Uninitialized
; Segment permissions: Read/Write
_relro_padding  segment byte public 'BSS' use64
                assume cs:_relro_padding
                ;org 2DE8h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
                align 400h
_relro_padding  ends

; ===========================================================================

; Segment type: Pure data
; Segment permissions: Read/Write
_data           segment qword public 'DATA' use64
                assume cs:_data
                ;org 3DE8h
; void *_dso_handle
__dso_handle    dq offset __dso_handle  ; DATA XREF: LOAD:0000000000000130↑o
                                        ; deregister_tm_clones↑o ...
_data           ends

; ===========================================================================

; Segment type: Uninitialized
; Segment permissions: Read/Write
_bss            segment byte public 'BSS' use64
                assume cs:_bss
                ;org 3DF0h
                assume es:nothing, ss:nothing, ds:_data, fs:nothing, gs:nothing
completed_0     db ?                    ; DATA XREF: __do_global_dtors_aux+4↑r
                                        ; __do_global_dtors_aux+2C↑w
_bss            ends

; ===========================================================================

; Segment type: Externs
; extern
                extrn __gmon_start__:near ; weak ; CODE XREF: _init_proc+14↑p
                                        ; DATA XREF: .got:__gmon_start___ptr↑o
                extrn _ITM_deregisterTMCloneTable ; weak
                                        ; DATA XREF: .got:_ITM_deregisterTMCloneTable_ptr↑o
                extrn _ITM_registerTMCloneTable ; weak
                                        ; DATA XREF: .got:_ITM_registerTMCloneTable_ptr↑o
; int _cxa_finalize(void *)
                extrn __cxa_finalize:near ; weak ; CODE XREF: ___cxa_finalize↑j
                                        ; DATA XREF: .got:__cxa_finalize_ptr↑o ...
; void *memcpy(void *dest, const void *src, size_t n)
                extrn memcpy:near       ; CODE XREF: <arrayvec::array_string::ArrayString<_> as core::fmt::Write>::write_str+25↑p
                                        ; DATA XREF: .got:memcpy_ptr↑o
                extrn gr_panic:near     ; CODE XREF: rust_begin_unwind+70↑p
                                        ; DATA XREF: .got:gr_panic_ptr↑o


                end