gprt0.as 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  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
  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. movl $__progname_storage+255, %eax
  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
  114. movq %rsi,operatingsystem_parameter_argv
  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,%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. .LFE9:
  139. .size ___start, .-___start
  140. .type _strrchr, @function
  141. _strrchr:
  142. .LFB10:
  143. pushq %rbp
  144. .LCFI3:
  145. movq %rsp, %rbp
  146. .LCFI4:
  147. movq %rdi, -24(%rbp)
  148. movb %sil, -25(%rbp)
  149. movq $0, -8(%rbp)
  150. .L13:
  151. movq -24(%rbp), %rdx
  152. movzbl (%rdx), %eax
  153. cmpb -25(%rbp), %al
  154. jne .L14
  155. movq -24(%rbp), %rax
  156. movq %rax, -8(%rbp)
  157. .L14:
  158. movq -24(%rbp), %rdx
  159. movzbl (%rdx), %eax
  160. testb %al, %al
  161. jne .L16
  162. movq -8(%rbp), %rax
  163. movq %rax, -16(%rbp)
  164. jmp .L12
  165. .L16:
  166. addq $1, -24(%rbp)
  167. jmp .L13
  168. .L12:
  169. movq -16(%rbp), %rax
  170. leave
  171. ret
  172. .LFE10:
  173. .size _strrchr, .-_strrchr
  174. #APP
  175. .text
  176. _eprol:
  177. #NO_APP
  178. .comm environ,8,8
  179. .comm __progname_storage,256,32
  180. .comm operatingsystem_parameter_envp,8,8
  181. .comm operatingsystem_parameter_argc,8,8
  182. .comm operatingsystem_parameter_argv,8,8
  183. .section .eh_frame,"a",@progbits
  184. .Lframe1:
  185. .long .LECIE1-.LSCIE1
  186. .LSCIE1:
  187. .long 0x0
  188. .byte 0x1
  189. .string "zR"
  190. .uleb128 0x1
  191. .sleb128 -8
  192. .byte 0x10
  193. .uleb128 0x1
  194. .byte 0x3
  195. .byte 0xc
  196. .uleb128 0x7
  197. .uleb128 0x8
  198. .byte 0x90
  199. .uleb128 0x1
  200. .align 8
  201. .LECIE1:
  202. .LSFDE1:
  203. .long .LEFDE1-.LASFDE1
  204. .LASFDE1:
  205. .long .LASFDE1-.Lframe1
  206. .long .LFB9
  207. .long .LFE9-.LFB9
  208. .uleb128 0x0
  209. .byte 0x4
  210. .long .LCFI0-.LFB9
  211. .byte 0xe
  212. .uleb128 0x10
  213. .byte 0x86
  214. .uleb128 0x2
  215. .byte 0x4
  216. .long .LCFI1-.LCFI0
  217. .byte 0xd
  218. .uleb128 0x6
  219. .align 8
  220. .LEFDE1:
  221. .LSFDE3:
  222. .long .LEFDE3-.LASFDE3
  223. .LASFDE3:
  224. .long .LASFDE3-.Lframe1
  225. .long .LFB10
  226. .long .LFE10-.LFB10
  227. .uleb128 0x0
  228. .byte 0x4
  229. .long .LCFI3-.LFB10
  230. .byte 0xe
  231. .uleb128 0x10
  232. .byte 0x86
  233. .uleb128 0x2
  234. .byte 0x4
  235. .long .LCFI4-.LCFI3
  236. .byte 0xd
  237. .uleb128 0x6
  238. .align 8
  239. .LEFDE3:
  240. .ident "GCC: (GNU) 4.2.1 20070719 "