prt0.as 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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. gcc2_compiled.:
  11. .data
  12. .align 32
  13. .type rcsid , @object
  14. .size rcsid , 58
  15. rcsid:
  16. .string "$OpenBSD: crt0.c,v 1.11 2003/06/27 22:30:38 deraadt Exp $"
  17. .globl __progname
  18. .section .rodata
  19. .LC0:
  20. .string ""
  21. .data
  22. .align 4
  23. .type __progname , @object
  24. .size __progname , 4
  25. __progname:
  26. .long .LC0
  27. .align 4
  28. ___fpucw:
  29. .long 0x1332
  30. .globl ___fpc_brk_addr /* heap management */
  31. .type ___fpc_brk_addr,@object
  32. .size ___fpc_brk_addr,4
  33. ___fpc_brk_addr:
  34. .long 0
  35. #APP
  36. .text
  37. .align 4
  38. .globl __start
  39. .globl _start
  40. _start:
  41. __start:
  42. pushl %ebx #ps_strings
  43. pushl %ecx # obj
  44. pushl %edx # cleanup
  45. movl 12(%esp),%eax
  46. leal 20(%esp,%eax,4),%ecx
  47. leal 16(%esp),%edx
  48. pushl %ecx
  49. pushl %edx
  50. pushl %eax
  51. call ___start
  52. #NO_APP
  53. .text
  54. .align 4
  55. .globl ___start
  56. .type ___start , @function
  57. ___start:
  58. pushl %ebp
  59. movl %esp,%ebp
  60. subl $16,%esp
  61. pushl %esi
  62. pushl %ebx
  63. movl 12(%ebp),%esi
  64. movl 16(%ebp),%eax
  65. movl %eax,environ
  66. movl %eax,operatingsystem_parameter_envp
  67. movl (%esi),%ebx
  68. testl %ebx,%ebx
  69. je .L3
  70. addl $-8,%esp
  71. pushl $47
  72. pushl %ebx
  73. call _strrchr
  74. movl %eax,__progname
  75. addl $16,%esp
  76. testl %eax,%eax
  77. jne .L4
  78. movl %ebx,__progname
  79. jmp .L5
  80. .p2align 4,,7
  81. .L4:
  82. incl %eax
  83. movl %eax,__progname
  84. .L5:
  85. movl $__progname_storage,%edx
  86. jmp .L12
  87. .p2align 4,,7
  88. .L9:
  89. movb (%eax),%al
  90. movb %al,(%edx)
  91. incl __progname
  92. incl %edx
  93. .L12:
  94. movl __progname,%eax
  95. cmpb $0,(%eax)
  96. je .L7
  97. cmpl $__progname_storage+255,%edx
  98. jb .L9
  99. .L7:
  100. movb $0,(%edx)
  101. movl $__progname_storage,__progname
  102. .L3:
  103. # call __init
  104. subl $16,%esp
  105. pushl %eax
  106. movl 8(%ebp),%eax
  107. movl %eax,operatingsystem_parameter_argc
  108. movl %esi,operatingsystem_parameter_argv
  109. popl %eax
  110. # pushl environ
  111. # pushl %esi
  112. # pushl 8(%ebp)
  113. finit
  114. fwait
  115. fldcw ___fpucw
  116. xorl %ebp,%ebp
  117. call main
  118. # pushl %eax
  119. # call exit
  120. jmp _haltproc
  121. .p2align 2,0x90
  122. .globl _haltproc
  123. .type _haltproc,@function
  124. _haltproc:
  125. mov $1,%eax
  126. movzwl operatingsystem_result,%ebx
  127. pushl %ebx
  128. call .Lactualsyscall
  129. addl $4,%esp
  130. jmp _haltproc
  131. .Lactualsyscall:
  132. int $0x80
  133. jb .LErrorcode
  134. xor %ebx,%ebx
  135. ret
  136. .LErrorcode:
  137. mov %eax,%ebx
  138. mov $-1,%eax
  139. ret
  140. .p2align 2,0x90
  141. .Lfe1:
  142. .size ___start , . - ___start
  143. .align 4
  144. .type _strrchr , @function
  145. _strrchr:
  146. pushl %ebp
  147. movl %esp,%ebp
  148. pushl %ebx
  149. movl 8(%ebp),%eax
  150. movb 12(%ebp),%bl
  151. xorl %ecx,%ecx
  152. .p2align 4,,7
  153. .L14:
  154. movb (%eax),%dl
  155. cmpb %bl,%dl
  156. jne .L17
  157. movl %eax,%ecx
  158. .L17:
  159. testb %dl,%dl
  160. je .L16
  161. incl %eax
  162. jmp .L14
  163. .p2align 4,,7
  164. .L16:
  165. movl %ecx,%eax
  166. popl %ebx
  167. leave
  168. ret
  169. .size _strrchr , . - _strrchr
  170. .comm environ,4,4
  171. .comm __progname_storage,256,32
  172. .comm operatingsystem_parameter_envp,4,4
  173. .comm operatingsystem_parameter_argc,4,4
  174. .comm operatingsystem_parameter_argv,4,4