prt0.as 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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 %rdx,%rcx
  28. movq (%rsp),%rdi
  29. leaq 16(%rsp,%rdi,8),%rdx
  30. leaq 8(%rsp),%rsi
  31. subq $8,%rsp
  32. andq $~15,%rsp
  33. addq $8,%rsp
  34. jmp ___start
  35. #NO_APP
  36. .text
  37. .globl ___start
  38. .type ___start, @function
  39. ___start:
  40. .LFB9:
  41. pushq %rbp
  42. .LCFI0:
  43. movq %rsp, %rbp
  44. .LCFI1:
  45. subq $64, %rsp
  46. .LCFI2:
  47. movl %edi, -20(%rbp)
  48. movq %rsi, -32(%rbp)
  49. movq %rdx, -40(%rbp)
  50. movq %rcx, -48(%rbp)
  51. movq %r8, -56(%rbp)
  52. movq %r9, -64(%rbp)
  53. movq -40(%rbp), %rax
  54. movq %rax, environ(%rip)
  55. movq %rax,operatingsystem_parameter_envp(%rip)
  56. movq -32(%rbp), %rax
  57. movq (%rax), %rax
  58. movq %rax, -8(%rbp)
  59. cmpq $0, -8(%rbp)
  60. je .L2
  61. movq -8(%rbp), %rdi
  62. movl $47, %esi
  63. call _strrchr
  64. movq %rax, __progname(%rip)
  65. movq __progname(%rip), %rax
  66. testq %rax, %rax
  67. jne .L4
  68. movq -8(%rbp), %rax
  69. movq %rax, __progname(%rip)
  70. jmp .L6
  71. .L4:
  72. movq __progname(%rip), %rax
  73. addq $1, %rax
  74. movq %rax, __progname(%rip)
  75. .L6:
  76. leaq __progname_storage(%rip), %rax
  77. movq %rax, -16(%rbp)
  78. jmp .L7
  79. .L8:
  80. movq __progname(%rip), %rcx
  81. movzbl (%rcx), %edx
  82. movq -16(%rbp), %rax
  83. movb %dl, (%rax)
  84. addq $1, -16(%rbp)
  85. leaq 1(%rcx), %rax
  86. movq %rax, __progname(%rip)
  87. .L7:
  88. movq __progname(%rip), %rax
  89. movzbl (%rax), %eax
  90. testb %al, %al
  91. je .L9
  92. leaq __progname_storage+255(%rip), %rax
  93. cmpq %rax, -16(%rbp)
  94. jb .L8
  95. .L9:
  96. leaq __progname_storage(%rip), %rax
  97. movq %rax, __progname(%rip)
  98. movq -16(%rbp), %rax
  99. movb $0, (%rax)
  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),%rdi
  126. syscall
  127. jmp _haltproc
  128. .LFE9:
  129. .size ___start, .-___start
  130. .type _strrchr, @function
  131. _strrchr:
  132. .LFB10:
  133. pushq %rbp
  134. .LCFI3:
  135. movq %rsp, %rbp
  136. .LCFI4:
  137. movq %rdi, -24(%rbp)
  138. movb %sil, -25(%rbp)
  139. movq $0, -8(%rbp)
  140. .L13:
  141. movq -24(%rbp), %rdx
  142. movzbl (%rdx), %eax
  143. cmpb -25(%rbp), %al
  144. jne .L14
  145. movq -24(%rbp), %rax
  146. movq %rax, -8(%rbp)
  147. .L14:
  148. movq -24(%rbp), %rdx
  149. movzbl (%rdx), %eax
  150. testb %al, %al
  151. jne .L16
  152. movq -8(%rbp), %rax
  153. movq %rax, -16(%rbp)
  154. jmp .L12
  155. .L16:
  156. addq $1, -24(%rbp)
  157. jmp .L13
  158. .L12:
  159. movq -16(%rbp), %rax
  160. leave
  161. ret
  162. .LFE10:
  163. .size _strrchr, .-_strrchr
  164. #APP
  165. .text
  166. _eprol:
  167. #NO_APP
  168. .comm environ,8,8
  169. .comm __progname_storage,256,32
  170. .comm operatingsystem_parameter_envp,8,8
  171. .comm operatingsystem_parameter_argc,8,8
  172. .comm operatingsystem_parameter_argv,8,8
  173. .section .eh_frame,"a",@unwind
  174. .Lframe1:
  175. .long .LECIE1-.LSCIE1
  176. .LSCIE1:
  177. .long 0x0
  178. .byte 0x1
  179. .string "zR"
  180. .uleb128 0x1
  181. .sleb128 -8
  182. .byte 0x10
  183. .uleb128 0x1
  184. .byte 0x3
  185. .byte 0xc
  186. .uleb128 0x7
  187. .uleb128 0x8
  188. .byte 0x90
  189. .uleb128 0x1
  190. .align 8
  191. .LECIE1:
  192. .LSFDE1:
  193. .long .LEFDE1-.LASFDE1
  194. .LASFDE1:
  195. .long .LASFDE1-.Lframe1
  196. .long .LFB9-.
  197. .long .LFE9-.LFB9
  198. .uleb128 0x0
  199. .byte 0x4
  200. .long .LCFI0-.LFB9
  201. .byte 0xe
  202. .uleb128 0x10
  203. .byte 0x86
  204. .uleb128 0x2
  205. .byte 0x4
  206. .long .LCFI1-.LCFI0
  207. .byte 0xd
  208. .uleb128 0x6
  209. .align 8
  210. .LEFDE1:
  211. .LSFDE3:
  212. .long .LEFDE3-.LASFDE3
  213. .LASFDE3:
  214. .long .LASFDE3-.Lframe1
  215. .long .LFB10-.
  216. .long .LFE10-.LFB10
  217. .uleb128 0x0
  218. .byte 0x4
  219. .long .LCFI3-.LFB10
  220. .byte 0xe
  221. .uleb128 0x10
  222. .byte 0x86
  223. .uleb128 0x2
  224. .byte 0x4
  225. .long .LCFI4-.LCFI3
  226. .byte 0xd
  227. .uleb128 0x6
  228. .align 8
  229. .LEFDE3:
  230. .ident "GCC: (GNU) 4.2.1 20070719 "