prt0.as 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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. leaq __progname_storage(%rip), %rax
  79. movq %rax, -16(%rbp)
  80. jmp .L7
  81. .L8:
  82. movq __progname(%rip), %rcx
  83. movzbl (%rcx), %edx
  84. movq -16(%rbp), %rax
  85. movb %dl, (%rax)
  86. addq $1, -16(%rbp)
  87. leaq 1(%rcx), %rax
  88. movq %rax, __progname(%rip)
  89. .L7:
  90. movq __progname(%rip), %rax
  91. movzbl (%rax), %eax
  92. testb %al, %al
  93. je .L9
  94. leaq __progname_storage+255(%rip), %rax
  95. cmpq %rax, -16(%rbp)
  96. jb .L8
  97. .L9:
  98. leaq __progname_storage(%rip), %rax
  99. movq %rax, __progname(%rip)
  100. movq -16(%rbp), %rax
  101. movb $0, (%rax)
  102. .L2:
  103. # movl $_mcleanup, %edi
  104. # call atexit
  105. # movl $_etext, %eax
  106. # movq %rax, %rsi
  107. # movl $_eprol, %eax
  108. # movq %rax, %rdi
  109. # call monstartup
  110. # movl $0, %eax
  111. # call __init
  112. movq environ(%rip), %rdx
  113. movq -32(%rbp), %rsi
  114. movl -20(%rbp), %edi
  115. movq %rdi,operatingsystem_parameter_argc(%rip)
  116. movq %rsi,operatingsystem_parameter_argv(%rip)
  117. movl $0, %eax
  118. call main
  119. # movl %eax, %edi
  120. # call exit
  121. jmp _haltproc
  122. .p2align 2,0x90
  123. .globl _haltproc
  124. .type _haltproc,@function
  125. _haltproc:
  126. movq $1,%rax
  127. movzwq operatingsystem_result(%rip),%rbx
  128. pushq %rbx
  129. call .Lactualsyscall
  130. addq $8,%rsp
  131. jmp _haltproc
  132. .Lactualsyscall:
  133. int $0x80
  134. jb .LErrorcode
  135. xor %rbx,%rbx
  136. ret
  137. .LErrorcode:
  138. movq %rax,%rbx
  139. movq $-1,%rax
  140. ret
  141. .LFE9:
  142. .size ___start, .-___start
  143. .type _strrchr, @function
  144. _strrchr:
  145. .LFB10:
  146. pushq %rbp
  147. .LCFI3:
  148. movq %rsp, %rbp
  149. .LCFI4:
  150. movq %rdi, -24(%rbp)
  151. movb %sil, -25(%rbp)
  152. movq $0, -8(%rbp)
  153. .L13:
  154. movq -24(%rbp), %rdx
  155. movzbl (%rdx), %eax
  156. cmpb -25(%rbp), %al
  157. jne .L14
  158. movq -24(%rbp), %rax
  159. movq %rax, -8(%rbp)
  160. .L14:
  161. movq -24(%rbp), %rdx
  162. movzbl (%rdx), %eax
  163. testb %al, %al
  164. jne .L16
  165. movq -8(%rbp), %rax
  166. movq %rax, -16(%rbp)
  167. jmp .L12
  168. .L16:
  169. addq $1, -24(%rbp)
  170. jmp .L13
  171. .L12:
  172. movq -16(%rbp), %rax
  173. leave
  174. ret
  175. .LFE10:
  176. .size _strrchr, .-_strrchr
  177. #APP
  178. .text
  179. _eprol:
  180. #NO_APP
  181. .comm environ,8,8
  182. .comm __progname_storage,256,32
  183. .comm operatingsystem_parameter_envp,8,8
  184. .comm operatingsystem_parameter_argc,8,8
  185. .comm operatingsystem_parameter_argv,8,8
  186. .section .eh_frame,"a",@unwind
  187. .Lframe1:
  188. .long .LECIE1-.LSCIE1
  189. .LSCIE1:
  190. .long 0x0
  191. .byte 0x1
  192. .string "zR"
  193. .uleb128 0x1
  194. .sleb128 -8
  195. .byte 0x10
  196. .uleb128 0x1
  197. .byte 0x3
  198. .byte 0xc
  199. .uleb128 0x7
  200. .uleb128 0x8
  201. .byte 0x90
  202. .uleb128 0x1
  203. .align 8
  204. .LECIE1:
  205. .LSFDE1:
  206. .long .LEFDE1-.LASFDE1
  207. .LASFDE1:
  208. .long .LASFDE1-.Lframe1
  209. .long .LFB9-.
  210. .long .LFE9-.LFB9
  211. .uleb128 0x0
  212. .byte 0x4
  213. .long .LCFI0-.LFB9
  214. .byte 0xe
  215. .uleb128 0x10
  216. .byte 0x86
  217. .uleb128 0x2
  218. .byte 0x4
  219. .long .LCFI1-.LCFI0
  220. .byte 0xd
  221. .uleb128 0x6
  222. .align 8
  223. .LEFDE1:
  224. .LSFDE3:
  225. .long .LEFDE3-.LASFDE3
  226. .LASFDE3:
  227. .long .LASFDE3-.Lframe1
  228. .long .LFB10-.
  229. .long .LFE10-.LFB10
  230. .uleb128 0x0
  231. .byte 0x4
  232. .long .LCFI3-.LFB10
  233. .byte 0xe
  234. .uleb128 0x10
  235. .byte 0x86
  236. .uleb128 0x2
  237. .byte 0x4
  238. .long .LCFI4-.LCFI3
  239. .byte 0xd
  240. .uleb128 0x6
  241. .align 8
  242. .LEFDE3:
  243. .ident "GCC: (GNU) 4.2.1 20070719 "