| ##============================================================================== |
| ## |
| ## crt0.S |
| ## |
| ## IQ2000 startup code |
| ## |
| ##============================================================================== |
| ## |
| ## Copyright (c) 2000, Cygnus Solutions, A Red Hat Company |
| ## |
| ## The authors hereby grant permission to use, copy, modify, distribute, |
| ## and license this software and its documentation for any purpose, provided |
| ## that existing copyright notices are retained in all copies and that this |
| ## notice is included verbatim in any distributions. No written agreement, |
| ## license, or royalty fee is required for any of the authorized uses. |
| ## Modifications to this software may be copyrighted by their authors |
| ## and need not follow the licensing terms described here, provided that |
| ## the new terms are clearly indicated on the first page of each file where |
| ## they apply. |
| ## |
| |
| ##------------------------------------------------------------------------------ |
| |
| .file "crt0.S" |
| |
| ##------------------------------------------------------------------------------ |
| ## Startup code |
| .section .text |
| .global _start |
| _start: |
| lui %29,%hi(__stack) |
| ori %29,%29,%lo(__stack) |
| |
| lui %24,%hi(_edata) # get start of bss |
| ori %24,%24,%lo(_edata) |
| |
| lui %25,%hi(_end) # get end of bss |
| ori %25,%25,%lo(_end) |
| |
| beq %24,%25,.L0 # check if end and start are the same |
| # do nothing if no bss |
| |
| .L1: |
| sb %0,0(%24) # clear a byte and bump pointer |
| addi %24,%24,1 |
| bne %24,%25,.L1 |
| nop |
| |
| .L0: |
| jal _main # call _main to run ctors/dtors |
| nop |
| xor %4,%4,%4 |
| jal main # call main program |
| xor %5,%5,%5 |
| jal exit # all done, no need to return or |
| or %4,%0,%2 # exit with main's return value |
| |
| .section .data |
| .global __dso_handle |
| .weak __dso_handle |
| __dso_handle: |
| .long 0 |