.section .text

.global _start
_start:
	# get argc, argv, envp
	movl  (%esp), %edi
	leal 4(%esp), %esi
	leal 4(%esi, %edi, 4), %edx

	# align stack
	andl $-16, %esp
	xorl %ebp, %ebp

	# save argc, argv, envp
	subl $4, %esp
	pushl %edx
	pushl %esi
	pushl %edi

	subl $4, %esp

	pushl $__fini_array_end
	pushl $__fini_array_start
	pushl $_fini

	pushl $__init_array_end
	pushl $__init_array_start
	pushl $_init

	pushl %edx

	call _init_libc

	addl $(4 * 8), %esp

	# argc, argv, envp already on stack
	call main

	subl $12, %esp
	pushl %eax
	call exit

.size _start, . - _start