|
@@ -0,0 +1,249 @@
|
|
|
+ .file "crt0.c"
|
|
|
+ .globl __progname
|
|
|
+ .section .rodata
|
|
|
+.LC0:
|
|
|
+ .string ""
|
|
|
+ .data
|
|
|
+ .align 8
|
|
|
+ .type __progname, @object
|
|
|
+ .size __progname, 8
|
|
|
+__progname:
|
|
|
+ .quad .LC0
|
|
|
+#APP
|
|
|
+ .text
|
|
|
+ .align 8
|
|
|
+ .globl __start
|
|
|
+ .globl _start
|
|
|
+_start:
|
|
|
+__start:
|
|
|
+ movq %rbx,%r9
|
|
|
+ movq %rcx,%r8
|
|
|
+ movq %rdx,%rcx
|
|
|
+ movq (%rsp),%rdi
|
|
|
+ leaq 16(%rsp,%rdi,8),%rdx
|
|
|
+ leaq 8(%rsp),%rsi
|
|
|
+ subq $8,%rsp
|
|
|
+ andq $~15,%rsp
|
|
|
+ addq $8,%rsp
|
|
|
+ jmp ___start
|
|
|
+
|
|
|
+#NO_APP
|
|
|
+ .text
|
|
|
+ .globl ___start
|
|
|
+ .type ___start, @function
|
|
|
+___start:
|
|
|
+.LFB9:
|
|
|
+ pushq %rbp
|
|
|
+.LCFI0:
|
|
|
+ movq %rsp, %rbp
|
|
|
+.LCFI1:
|
|
|
+ subq $64, %rsp
|
|
|
+.LCFI2:
|
|
|
+ movl %edi, -20(%rbp)
|
|
|
+ movq %rsi, -32(%rbp)
|
|
|
+ movq %rdx, -40(%rbp)
|
|
|
+ movq %rcx, -48(%rbp)
|
|
|
+ movq %r8, -56(%rbp)
|
|
|
+ movq %r9, -64(%rbp)
|
|
|
+ movq -40(%rbp), %rax
|
|
|
+ movq %rax, environ(%rip)
|
|
|
+ movq %rax,operatingsystem_parameter_envp(%rip)
|
|
|
+ movq -32(%rbp), %rax
|
|
|
+ movq (%rax), %rax
|
|
|
+ movq %rax, -8(%rbp)
|
|
|
+ cmpq $0, -8(%rbp)
|
|
|
+ je .L2
|
|
|
+ movq -8(%rbp), %rdi
|
|
|
+ movl $47, %esi
|
|
|
+ call _strrchr
|
|
|
+ movq %rax, __progname(%rip)
|
|
|
+ movq __progname(%rip), %rax
|
|
|
+ testq %rax, %rax
|
|
|
+ jne .L4
|
|
|
+ movq -8(%rbp), %rax
|
|
|
+ movq %rax, __progname(%rip)
|
|
|
+ jmp .L6
|
|
|
+.L4:
|
|
|
+ movq __progname(%rip), %rax
|
|
|
+ addq $1, %rax
|
|
|
+ movq %rax, __progname(%rip)
|
|
|
+.L6:
|
|
|
+ movq $__progname_storage, -16(%rbp)
|
|
|
+ jmp .L7
|
|
|
+.L8:
|
|
|
+ movq __progname(%rip), %rcx
|
|
|
+ movzbl (%rcx), %edx
|
|
|
+ movq -16(%rbp), %rax
|
|
|
+ movb %dl, (%rax)
|
|
|
+ addq $1, -16(%rbp)
|
|
|
+ leaq 1(%rcx), %rax
|
|
|
+ movq %rax, __progname(%rip)
|
|
|
+.L7:
|
|
|
+ movq __progname(%rip), %rax
|
|
|
+ movzbl (%rax), %eax
|
|
|
+ testb %al, %al
|
|
|
+ je .L9
|
|
|
+ movl $__progname_storage+255, %eax
|
|
|
+ cmpq %rax, -16(%rbp)
|
|
|
+ jb .L8
|
|
|
+.L9:
|
|
|
+ movq -16(%rbp), %rax
|
|
|
+ movb $0, (%rax)
|
|
|
+ movq $__progname_storage, __progname(%rip)
|
|
|
+.L2:
|
|
|
+ # movl $_mcleanup, %edi
|
|
|
+ # call atexit
|
|
|
+ # movl $_etext, %eax
|
|
|
+ # movq %rax, %rsi
|
|
|
+ # movl $_eprol, %eax
|
|
|
+ # movq %rax, %rdi
|
|
|
+ # call monstartup
|
|
|
+ # movl $0, %eax
|
|
|
+ # call __init
|
|
|
+ movq environ(%rip), %rdx
|
|
|
+ movq -32(%rbp), %rsi
|
|
|
+ movl -20(%rbp), %edi
|
|
|
+ movq %rdi,operatingsystem_parameter_argc(%rip)
|
|
|
+ movq %rsi,operatingsystem_parameter_argv(%rip)
|
|
|
+ movl $0, %eax
|
|
|
+ call main
|
|
|
+ # movl %eax, %edi
|
|
|
+ # call exit
|
|
|
+ jmp _haltproc
|
|
|
+ .p2align 2,0x90
|
|
|
+
|
|
|
+.globl _haltproc
|
|
|
+.type _haltproc,@function
|
|
|
+
|
|
|
+_haltproc:
|
|
|
+ movq $1,%rax
|
|
|
+ movzwq operatingsystem_result(%rip),%rbx
|
|
|
+ pushq %rbx
|
|
|
+ call .Lactualsyscall
|
|
|
+ addq $8,%rsp
|
|
|
+ jmp _haltproc
|
|
|
+
|
|
|
+.Lactualsyscall:
|
|
|
+ int $0x80
|
|
|
+ jb .LErrorcode
|
|
|
+ xor %rbx,%rbx
|
|
|
+ ret
|
|
|
+.LErrorcode:
|
|
|
+ movq %rax,%rbx
|
|
|
+ movq $-1,%rax
|
|
|
+.LFE9:
|
|
|
+ .size ___start, .-___start
|
|
|
+ .type _strrchr, @function
|
|
|
+_strrchr:
|
|
|
+.LFB10:
|
|
|
+ pushq %rbp
|
|
|
+.LCFI3:
|
|
|
+ movq %rsp, %rbp
|
|
|
+.LCFI4:
|
|
|
+ movq %rdi, -24(%rbp)
|
|
|
+ movb %sil, -25(%rbp)
|
|
|
+ movq $0, -8(%rbp)
|
|
|
+.L13:
|
|
|
+ movq -24(%rbp), %rdx
|
|
|
+ movzbl (%rdx), %eax
|
|
|
+ cmpb -25(%rbp), %al
|
|
|
+ jne .L14
|
|
|
+ movq -24(%rbp), %rax
|
|
|
+ movq %rax, -8(%rbp)
|
|
|
+.L14:
|
|
|
+ movq -24(%rbp), %rdx
|
|
|
+ movzbl (%rdx), %eax
|
|
|
+ testb %al, %al
|
|
|
+ jne .L16
|
|
|
+ movq -8(%rbp), %rax
|
|
|
+ movq %rax, -16(%rbp)
|
|
|
+ jmp .L12
|
|
|
+.L16:
|
|
|
+ addq $1, -24(%rbp)
|
|
|
+ jmp .L13
|
|
|
+.L12:
|
|
|
+ movq -16(%rbp), %rax
|
|
|
+ leave
|
|
|
+ ret
|
|
|
+.LFE10:
|
|
|
+ .size _strrchr, .-_strrchr
|
|
|
+#APP
|
|
|
+ .text
|
|
|
+ _eprol:
|
|
|
+#NO_APP
|
|
|
+# This section is needed for NetBSD to recognize a NetBSD binary as such.
|
|
|
+# otherwise it will be startup in Linux emulation mode.
|
|
|
+
|
|
|
+.section ".note.netbsd.ident","a"
|
|
|
+.p2align 2
|
|
|
+
|
|
|
+.long 7
|
|
|
+.long 4
|
|
|
+# ELF NOTE TYPE NETBSD TAG
|
|
|
+.long 1
|
|
|
+.ascii "NetBSD\0\0"
|
|
|
+.long 199905
|
|
|
+
|
|
|
+ .comm environ,8,8
|
|
|
+ .comm __progname_storage,256,32
|
|
|
+ .comm operatingsystem_parameter_envp,8,8
|
|
|
+ .comm operatingsystem_parameter_argc,8,8
|
|
|
+ .comm operatingsystem_parameter_argv,8,8
|
|
|
+ .section .eh_frame,"a",@progbits
|
|
|
+.Lframe1:
|
|
|
+ .long .LECIE1-.LSCIE1
|
|
|
+.LSCIE1:
|
|
|
+ .long 0x0
|
|
|
+ .byte 0x1
|
|
|
+ .string "zR"
|
|
|
+ .uleb128 0x1
|
|
|
+ .sleb128 -8
|
|
|
+ .byte 0x10
|
|
|
+ .uleb128 0x1
|
|
|
+ .byte 0x3
|
|
|
+ .byte 0xc
|
|
|
+ .uleb128 0x7
|
|
|
+ .uleb128 0x8
|
|
|
+ .byte 0x90
|
|
|
+ .uleb128 0x1
|
|
|
+ .align 8
|
|
|
+.LECIE1:
|
|
|
+.LSFDE1:
|
|
|
+ .long .LEFDE1-.LASFDE1
|
|
|
+.LASFDE1:
|
|
|
+ .long .LASFDE1-.Lframe1
|
|
|
+ .long .LFB9
|
|
|
+ .long .LFE9-.LFB9
|
|
|
+ .uleb128 0x0
|
|
|
+ .byte 0x4
|
|
|
+ .long .LCFI0-.LFB9
|
|
|
+ .byte 0xe
|
|
|
+ .uleb128 0x10
|
|
|
+ .byte 0x86
|
|
|
+ .uleb128 0x2
|
|
|
+ .byte 0x4
|
|
|
+ .long .LCFI1-.LCFI0
|
|
|
+ .byte 0xd
|
|
|
+ .uleb128 0x6
|
|
|
+ .align 8
|
|
|
+.LEFDE1:
|
|
|
+.LSFDE3:
|
|
|
+ .long .LEFDE3-.LASFDE3
|
|
|
+.LASFDE3:
|
|
|
+ .long .LASFDE3-.Lframe1
|
|
|
+ .long .LFB10
|
|
|
+ .long .LFE10-.LFB10
|
|
|
+ .uleb128 0x0
|
|
|
+ .byte 0x4
|
|
|
+ .long .LCFI3-.LFB10
|
|
|
+ .byte 0xe
|
|
|
+ .uleb128 0x10
|
|
|
+ .byte 0x86
|
|
|
+ .uleb128 0x2
|
|
|
+ .byte 0x4
|
|
|
+ .long .LCFI4-.LCFI3
|
|
|
+ .byte 0xd
|
|
|
+ .uleb128 0x6
|
|
|
+ .align 8
|
|
|
+.LEFDE3:
|
|
|
+ .ident "GCC: (GNU) 4.2.1 20070719 "
|