section .text

extern _init
extern main
extern _fini
extern initialize_libc
extern exit

extern __argv

global _start
_start:
	; Set up end of the stack frame linked list.
	xor rbp, rbp
	push rbp ; rip=0
	push rbp ; rbp=0
	mov rbp, rsp

	call initialize_libc

	call _init

    mov rdi, 0 ; argc = 0
    mov rsi, __argv ; Dummy argv which is equal to {NULL}

	call main

    push rax

    call _fini

    pop rdi

	call exit