prt0.as 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. .section ".note.openbsd.ident", "a"
  2. .p2align 2
  3. .long 8
  4. .long 4
  5. .long 1
  6. .ascii "OpenBSD\0"
  7. .long 0
  8. .previous
  9. .file "crt0.c"
  10. .globl __progname
  11. .section .rodata
  12. .LC0:
  13. .string ""
  14. .data
  15. .align 8
  16. .type __progname, @object
  17. .size __progname, 8
  18. __progname:
  19. .quad .LC0
  20. #APP
  21. .text
  22. .align 8
  23. .globl __start
  24. .globl _start
  25. _start:
  26. __start:
  27. movq %rbx,%r9
  28. movq %rcx,%r8
  29. movq %rdx,%rcx
  30. movq (%rsp),%rdi
  31. leaq 16(%rsp,%rdi,8),%rdx
  32. leaq 8(%rsp),%rsi
  33. subq $8,%rsp
  34. andq $~15,%rsp
  35. addq $8,%rsp
  36. jmp ___start
  37. #NO_APP
  38. .text
  39. .globl ___start
  40. .type ___start, @function
  41. ___start:
  42. .LFB9:
  43. pushq %rbp
  44. .LCFI0:
  45. movq %rsp, %rbp
  46. .LCFI1:
  47. subq $64, %rsp
  48. .LCFI2:
  49. movl %edi, -20(%rbp)
  50. movq %rsi, -32(%rbp)
  51. movq %rdx, -40(%rbp)
  52. movq %rcx, -48(%rbp)
  53. movq %r8, -56(%rbp)
  54. movq %r9, -64(%rbp)
  55. movq -40(%rbp), %rax
  56. movq %rax, environ(%rip)
  57. movq %rax,operatingsystem_parameter_envp(%rip)
  58. movq -32(%rbp), %rax
  59. movq (%rax), %rax
  60. movq %rax, -8(%rbp)
  61. cmpq $0, -8(%rbp)
  62. je .L2
  63. movq -8(%rbp), %rdi
  64. movl $47, %esi
  65. call _strrchr
  66. movq %rax, __progname(%rip)
  67. movq __progname(%rip), %rax
  68. testq %rax, %rax
  69. jne .L4
  70. movq -8(%rbp), %rax
  71. movq %rax, __progname(%rip)
  72. jmp .L6
  73. .L4:
  74. movq __progname(%rip), %rax
  75. addq $1, %rax
  76. movq %rax, __progname(%rip)
  77. .L6:
  78. movq $__progname_storage, -16(%rbp)
  79. jmp .L7
  80. .L8:
  81. movq __progname(%rip), %rcx
  82. movzbl (%rcx), %edx
  83. movq -16(%rbp), %rax
  84. movb %dl, (%rax)
  85. addq $1, -16(%rbp)
  86. leaq 1(%rcx), %rax
  87. movq %rax, __progname(%rip)
  88. .L7:
  89. movq __progname(%rip), %rax
  90. movzbl (%rax), %eax
  91. testb %al, %al
  92. je .L9
  93. movq $__progname_storage+255, %rax
  94. cmpq %rax, -16(%rbp)
  95. jb .L8
  96. .L9:
  97. movq -16(%rbp), %rax
  98. movb $0, (%rax)
  99. movq $__progname_storage, __progname(%rip)
  100. .L2:
  101. # movl $_mcleanup, %edi
  102. # call atexit
  103. # movl $_etext, %eax
  104. # movq %rax, %rsi
  105. # movl $_eprol, %eax
  106. # movq %rax, %rdi
  107. # call monstartup
  108. # movl $0, %eax
  109. # call __init
  110. movq environ(%rip), %rdx
  111. movq -32(%rbp), %rsi
  112. movl -20(%rbp), %edi
  113. movq %rdi,operatingsystem_parameter_argc(%rip)
  114. movq %rsi,operatingsystem_parameter_argv(%rip)
  115. movl $0, %eax
  116. call main
  117. # movl %eax, %edi
  118. # call exit
  119. jmp _haltproc
  120. .p2align 2,0x90
  121. .globl _haltproc
  122. .type _haltproc,@function
  123. _haltproc:
  124. movq $1,%rax
  125. movzwq operatingsystem_result(%rip),%rbx
  126. pushq %rbx
  127. call .Lactualsyscall
  128. addq $8,%rsp
  129. jmp _haltproc
  130. .Lactualsyscall:
  131. int $0x80
  132. jb .LErrorcode
  133. xor %rbx,%rbx
  134. ret
  135. .LErrorcode:
  136. movq %rax,%rbx
  137. movq $-1,%rax
  138. ret
  139. .LFE9:
  140. .size ___start, .-___start
  141. .type _strrchr, @function
  142. _strrchr:
  143. .LFB10:
  144. pushq %rbp
  145. .LCFI3:
  146. movq %rsp, %rbp
  147. .LCFI4:
  148. movq %rdi, -24(%rbp)
  149. movb %sil, -25(%rbp)
  150. movq $0, -8(%rbp)
  151. .L13:
  152. movq -24(%rbp), %rdx
  153. movzbl (%rdx), %eax
  154. cmpb -25(%rbp), %al
  155. jne .L14
  156. movq -24(%rbp), %rax
  157. movq %rax, -8(%rbp)
  158. .L14:
  159. movq -24(%rbp), %rdx
  160. movzbl (%rdx), %eax
  161. testb %al, %al
  162. jne .L16
  163. movq -8(%rbp), %rax
  164. movq %rax, -16(%rbp)
  165. jmp .L12
  166. .L16:
  167. addq $1, -24(%rbp)
  168. jmp .L13
  169. .L12:
  170. movq -16(%rbp), %rax
  171. leave
  172. ret
  173. .LFE10:
  174. .size _strrchr, .-_strrchr
  175. #APP
  176. .text
  177. _eprol:
  178. #NO_APP
  179. .comm environ,8,8
  180. .comm __progname_storage,256,32
  181. .comm operatingsystem_parameter_envp,8,8
  182. .comm operatingsystem_parameter_argc,8,8
  183. .comm operatingsystem_parameter_argv,8,8
  184. .section .eh_frame,"a",@progbits
  185. .Lframe1:
  186. .long .LECIE1-.LSCIE1
  187. .LSCIE1:
  188. .long 0x0
  189. .byte 0x1
  190. .string "zR"
  191. .uleb128 0x1
  192. .sleb128 -8
  193. .byte 0x10
  194. .uleb128 0x1
  195. .byte 0x3
  196. .byte 0xc
  197. .uleb128 0x7
  198. .uleb128 0x8
  199. .byte 0x90
  200. .uleb128 0x1
  201. .align 8
  202. .LECIE1:
  203. .LSFDE1:
  204. .long .LEFDE1-.LASFDE1
  205. .LASFDE1:
  206. .long .LASFDE1-.Lframe1
  207. .long .LFB9
  208. .long .LFE9-.LFB9
  209. .uleb128 0x0
  210. .byte 0x4
  211. .long .LCFI0-.LFB9
  212. .byte 0xe
  213. .uleb128 0x10
  214. .byte 0x86
  215. .uleb128 0x2
  216. .byte 0x4
  217. .long .LCFI1-.LCFI0
  218. .byte 0xd
  219. .uleb128 0x6
  220. .align 8
  221. .LEFDE1:
  222. .LSFDE3:
  223. .long .LEFDE3-.LASFDE3
  224. .LASFDE3:
  225. .long .LASFDE3-.Lframe1
  226. .long .LFB10
  227. .long .LFE10-.LFB10
  228. .uleb128 0x0
  229. .byte 0x4
  230. .long .LCFI3-.LFB10
  231. .byte 0xe
  232. .uleb128 0x10
  233. .byte 0x86
  234. .uleb128 0x2
  235. .byte 0x4
  236. .long .LCFI4-.LCFI3
  237. .byte 0xd
  238. .uleb128 0x6
  239. .align 8
  240. .LEFDE3:
  241. .ident "GCC: (GNU) 4.2.1 20070719 "