Fix that SYS___syscall business.

This commit is contained in:
pk 1994-04-18 20:02:58 +00:00
parent 0d93a0839c
commit ae9be14d68
1 changed files with 22 additions and 15 deletions

View File

@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $Id: crt0.c,v 1.8 1994/04/05 02:26:19 cgd Exp $
* $Id: crt0.c,v 1.9 1994/04/18 20:02:58 pk Exp $
*/
@ -102,12 +102,13 @@ char *__progname = empty;
#define write(fd, s, n) __syscall(SYS_write, (fd), (s), (n))
#define dup(fd) __syscall(SYS_dup, (fd))
#define dup2(fd, fdnew) __syscall(SYS_dup2, (fd), (fdnew))
#ifdef sun
#define mmap(addr, len, prot, flags, fd, off) \
__syscall(SYS_mmap, (addr), (len), (prot), _MAP_NEW|(flags), (fd), (off))
#else
#define mmap(addr, len, prot, flags, fd, off) \
__syscall(SYS___syscall, (quad_t)SYS_mmap, (addr), (len), (prot), (flags), \
__syscall2((quad_t)SYS_mmap, (addr), (len), (prot), (flags), \
(fd), 0, (off_t)(off))
#endif
@ -167,6 +168,25 @@ asm (" mov %l2,%o2");
asm (" call _exit");
asm (" nop");
#ifdef DYNAMIC
/* System call entry */
asm(" .set SYSCALL_G2RFLAG, 0x400");
asm(" .set SYS___syscall, 198");
asm("___syscall2:");
asm(" sethi %hi(SYS___syscall), %g1"); /* `SYS___syscall' */
asm(" ba 1f");
asm(" or %g1, %lo(SYS___syscall), %g1");
asm("___syscall:");
asm(" clr %g1"); /* `SYS_syscall' */
asm("1:");
asm(" or %g1, SYSCALL_G2RFLAG, %g1"); /* Use quick return */
asm(" add %o7, 8, %g2");
asm(" ta %g0");
asm(" mov -0x1, %o0"); /* Note: no `errno' */
asm(" jmp %o7 + 0x8");
asm(" mov -0x1, %o1");
#endif
#ifdef MCRT0
static void
__do_mcrt ()
@ -409,19 +429,6 @@ _getenv(name)
return (char *)0;
}
#ifdef sparc
/* System call entry */
asm("___syscall:");
asm("clr %g1");
asm("ta %g0");
asm("bgeu Lsyscallx"); /* good result ? */
asm("nop");
asm("mov -0x1, %o0"); /* Note: no `errno' */
asm("Lsyscallx:");
asm("jmp %o7 + 0x8");
asm("nop");
#endif /* sparc */
#endif /* DYNAMIC */
static char *