/* crt0.S for the sparclet 701. At the moment, all the necessary syscalls are here. Convention has them in a separate file but libgloss is still in too much flux. */ .text .global start start: ! zero bss sethi %hi(_end), %o1 or %o1, %lo(_end), %o1 sethi %hi(_edata), %o0 or %o0, %lo (_edata), %o0 sub %o1, %o0, %o1 Lzero_bss: subcc %o1, 4, %o1 clr [%o0] bne Lzero_bss add %o0, 4, %o0 ! set up argc, argv, envp (?) ld [%sp+64], %o0 sll %o0, 2, %o2 add %o2, 4, %o2 add %sp, 68, %o1 add %o1, %o2, %o2 sethi %hi(_environ), %o3 st %o2, [%o3+%lo(_environ)] ! call main, exit call _main sub %sp, 32, %sp call _exit nop ! void _exit (int rc) .global __exit __exit: mov 1, %g1 ta 0 ! If that does not work, just loop forever. Lloop_forever: b Lloop_forever nop ! int _open (char *, int) .global _open _open: mov 5, %g1 ta 0 bcc Lnoerr nop b Lcerror nop ! int _close (int) .global _close _close: mov 6, %g1 ta 0 bcc Lnoerr nop b Lcerror nop ! int read (int, char *, int) .global _read _read: mov 3, %g1 ta 0 bcc Lnoerr nop b Lcerror nop ! int write (int, char *, int) .global _write _write: mov 4, %g1 ta 0 bcc Lnoerr nop b Lcerror nop Lnoerr: retl nop Lcerror: sethi %hi(__impure_ptr), %g1 st %o0, [%g1+%lo(__impure_ptr)] retl mov -1, %o0