gprt0.as 4.0 KB

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