Module Name:    src
Committed By:   matt
Date:           Thu Sep 10 01:52:34 UTC 2009

Modified Files:
        src/sys/compat/irix [matt-nb5-mips64]: irix_exec.c irix_exec_elf32.c
            irix_fcntl.c irix_kmem.c irix_prctl.c irix_signal.c irix_sysmp.c
            irix_syssgi.c irix_types.h

Log Message:
Make LP64 safe (XXX probably need an irix32).


To generate a diff of this commit:
cvs rdiff -u -r1.52.14.1 -r1.52.14.2 src/sys/compat/irix/irix_exec.c
cvs rdiff -u -r1.15 -r1.15.18.1 src/sys/compat/irix/irix_exec_elf32.c
cvs rdiff -u -r1.25 -r1.25.18.1 src/sys/compat/irix/irix_fcntl.c
cvs rdiff -u -r1.8 -r1.8.18.1 src/sys/compat/irix/irix_kmem.c
cvs rdiff -u -r1.48 -r1.48.14.1 src/sys/compat/irix/irix_prctl.c
cvs rdiff -u -r1.48.18.1 -r1.48.18.2 src/sys/compat/irix/irix_signal.c
cvs rdiff -u -r1.21 -r1.21.18.1 src/sys/compat/irix/irix_sysmp.c
cvs rdiff -u -r1.48 -r1.48.16.1 src/sys/compat/irix/irix_syssgi.c
cvs rdiff -u -r1.18 -r1.18.18.1 src/sys/compat/irix/irix_types.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/irix/irix_exec.c
diff -u src/sys/compat/irix/irix_exec.c:1.52.14.1 src/sys/compat/irix/irix_exec.c:1.52.14.2
--- src/sys/compat/irix/irix_exec.c:1.52.14.1	Wed Aug 26 03:46:40 2009
+++ src/sys/compat/irix/irix_exec.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_exec.c,v 1.52.14.1 2009/08/26 03:46:40 matt Exp $ */
+/*	$NetBSD: irix_exec.c,v 1.52.14.2 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001-2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_exec.c,v 1.52.14.1 2009/08/26 03:46:40 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_exec.c,v 1.52.14.2 2009/09/10 01:52:34 matt Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_syscall_debug.h"
@@ -127,7 +127,10 @@
 	struct frame *f = l->l_md.md_regs;
 
 	/* Enable 64 bit instructions (eg: sd) */
-	f->f_regs[_R_SR] |= MIPS3_SR_UX;
+	f->f_regs[_R_SR] |= MIPS3_SR_UX | MIPS3_SR_FR;
+#ifdef _LP64
+	f->f_regs[_R_SR] |= MIPS3_SR_KX;
+#endif
 }
 
 /*

Index: src/sys/compat/irix/irix_exec_elf32.c
diff -u src/sys/compat/irix/irix_exec_elf32.c:1.15 src/sys/compat/irix/irix_exec_elf32.c:1.15.18.1
--- src/sys/compat/irix/irix_exec_elf32.c:1.15	Mon Apr 28 20:23:41 2008
+++ src/sys/compat/irix/irix_exec_elf32.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_exec_elf32.c,v 1.15 2008/04/28 20:23:41 martin Exp $ */
+/*	$NetBSD: irix_exec_elf32.c,v 1.15.18.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,11 +30,15 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_exec_elf32.c,v 1.15 2008/04/28 20:23:41 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_exec_elf32.c,v 1.15.18.1 2009/09/10 01:52:34 matt Exp $");
 
 #ifndef ELFSIZE
+#ifdef _LP64
+#define ELFSIZE		64	/* XXX should die */
+#else
 #define ELFSIZE		32	/* XXX should die */
 #endif
+#endif
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -56,6 +60,7 @@
 
 #include <compat/irix/irix_exec.h>
 
+#ifdef EXEC_ELF32
 /*
  * IRIX o32 ABI probe function
  */
@@ -90,6 +95,7 @@
 	printf("epp->ep_vm_minaddr = 0x%lx\n", epp->ep_vm_minaddr);
 #endif
 	epp->ep_vm_minaddr = epp->ep_vm_minaddr & ~0xfUL;
+	l->l_proc->l_md.md_abi = _MIP_BSD_API_O32;
 	return 0;
 }
 
@@ -126,6 +132,46 @@
 	printf("epp->ep_vm_minaddr = 0x%lx\n", epp->ep_vm_minaddr);
 #endif
 	epp->ep_vm_minaddr = epp->ep_vm_minaddr & ~0xfUL;
+	l->l_proc->l_md.md_abi = _MIP_BSD_API_N32;
+	return 0;
+}
+#endif /* EXEC_ELF32 */
+
+#ifdef EXEC_ELF64
+/*
+ * IRIX n32 ABI probe function
+ */
+int
+ELFNAME2(irix,probe_n64)(l, epp, eh, itp, pos)
+	struct lwp *l;
+	struct exec_package *epp;
+	void *eh;
+	char *itp;
+	vaddr_t *pos;
+{
+	int error = 0;
+
+#ifdef DEBUG_IRIX
+	printf("irix_probe_n64()\n");
+#endif
+	if ((((Elf_Ehdr *)epp->ep_hdr)->e_flags & IRIX_EF_IRIX_ABI_MASK) !=
+	    IRIX_EF_IRIX_ABI64)
+		return error;
+
+	if (itp) {
+		/* n32 binaries use /lib64/libc.so.1 */
+		if (strncmp(itp, "/lib64/libc.so", 14) &&
+		    strncmp(itp, "/usr/lib64/libc.so", 18))
+			return ENOEXEC;
+		if ((error = emul_find_interp(l, epp, itp)))
+			return error;
+	}
+#ifdef DEBUG_IRIX
+	printf("irix_probe_n32: returning 0\n");
+	printf("epp->ep_vm_minaddr = 0x%lx\n", epp->ep_vm_minaddr);
+#endif
+	epp->ep_vm_minaddr = epp->ep_vm_minaddr & ~0xfUL;
+	l->l_proc->l_md.md_abi = _MIP_BSD_API_N32;
 	return 0;
 }
 
@@ -152,7 +198,7 @@
 	 * the code that sets up the stack in copyargs():
 	 */
 #ifdef DEBUG_IRIX
-	printf("irix_elf32_copyargs(): *stackp = %p\n", *stackp);
+	printf("%s(): *stackp = %p\n", __func__, *stackp);
 #endif
 	/*
 	 * This is borrowed from sys/kern/kern_exec.c:copyargs()

Index: src/sys/compat/irix/irix_fcntl.c
diff -u src/sys/compat/irix/irix_fcntl.c:1.25 src/sys/compat/irix/irix_fcntl.c:1.25.18.1
--- src/sys/compat/irix/irix_fcntl.c:1.25	Mon Apr 28 20:23:41 2008
+++ src/sys/compat/irix/irix_fcntl.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_fcntl.c,v 1.25 2008/04/28 20:23:41 martin Exp $ */
+/*	$NetBSD: irix_fcntl.c,v 1.25.18.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001-2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_fcntl.c,v 1.25 2008/04/28 20:23:41 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_fcntl.c,v 1.25.18.1 2009/09/10 01:52:34 matt Exp $");
 
 #include <sys/types.h>
 #include <sys/signal.h>
@@ -62,8 +62,8 @@
 #include <compat/svr4/svr4_syscallargs.h>
 
 static int fd_truncate(struct lwp *, int, int, off_t, register_t *);
-static int bsd_to_irix_fcntl_flags(int);
-static int irix_to_bsd_fcntl_flags(int);
+static uintptr_t bsd_to_irix_fcntl_flags(uintptr_t);
+static uintptr_t irix_to_bsd_fcntl_flags(uintptr_t);
 
 int
 irix_sys_lseek64(struct lwp *l, const struct irix_sys_lseek64_args *uap, register_t *retval)
@@ -161,12 +161,12 @@
 		 * All unsupported flags are silently ignored
 		 * except FDIRECT taht will return EINVAL
 		 */
-		if ((int)SCARG(uap, arg) & IRIX_FDIRECT)
+		if ((uintptr_t)SCARG(uap, arg) & IRIX_FDIRECT)
 			return EINVAL;
 
 		SCARG(&bsd_ua, fd) = SCARG(uap, fd);
 		SCARG(&bsd_ua, arg) =
-		    (char *)irix_to_bsd_fcntl_flags((int)SCARG(uap, arg));
+		    (char *)irix_to_bsd_fcntl_flags((uintptr_t)SCARG(uap, arg));
 		SCARG(&bsd_ua, cmd) = F_SETFL;
 		return sys_fcntl(l, &bsd_ua, retval);
 		break;
@@ -329,10 +329,10 @@
 	return 0;
 }
 
-static int
-irix_to_bsd_fcntl_flags(int flags)
+static uintptr_t
+irix_to_bsd_fcntl_flags(uintptr_t flags)
 {
-	int ret = 0;
+	long ret = 0;
 
 	if (flags & IRIX_FNDELAY) ret |= FNDELAY;
 	if (flags & IRIX_FAPPEND) ret |= FAPPEND;
@@ -355,8 +355,8 @@
 	return ret;
 }
 
-static int
-bsd_to_irix_fcntl_flags(int flags)
+static uintptr_t
+bsd_to_irix_fcntl_flags(uintptr_t flags)
 {
 	int ret = 0;
 

Index: src/sys/compat/irix/irix_kmem.c
diff -u src/sys/compat/irix/irix_kmem.c:1.8 src/sys/compat/irix/irix_kmem.c:1.8.18.1
--- src/sys/compat/irix/irix_kmem.c:1.8	Mon Apr 28 20:23:41 2008
+++ src/sys/compat/irix/irix_kmem.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_kmem.c,v 1.8 2008/04/28 20:23:41 martin Exp $ */
+/*	$NetBSD: irix_kmem.c,v 1.8.18.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_kmem.c,v 1.8 2008/04/28 20:23:41 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_kmem.c,v 1.8.18.1 2009/09/10 01:52:34 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -98,7 +98,7 @@
 	printf("irix_kmemread(): addr = %p\n", uio->uio_iov->iov_base);
 	printf("irix_kmemread(): len = 0x%08lx\n", (long)uio->uio_iov->iov_len);
 #endif
-	offset = (void *)(uint32_t)uio->uio_offset; /* XXX */
+	offset = (void *)(uintptr_t)uio->uio_offset; /* XXX */
 	if (offset == &averunnable) { /* load average */
 		struct irix_loadavg iav;
 		int scale = averunnable.fscale / IRIX_LOADAVG_SCALE;

Index: src/sys/compat/irix/irix_prctl.c
diff -u src/sys/compat/irix/irix_prctl.c:1.48 src/sys/compat/irix/irix_prctl.c:1.48.14.1
--- src/sys/compat/irix/irix_prctl.c:1.48	Wed Jul  2 19:49:58 2008
+++ src/sys/compat/irix/irix_prctl.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_prctl.c,v 1.48 2008/07/02 19:49:58 rmind Exp $ */
+/*	$NetBSD: irix_prctl.c,v 1.48.14.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001-2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_prctl.c,v 1.48 2008/07/02 19:49:58 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_prctl.c,v 1.48.14.1 2009/09/10 01:52:34 matt Exp $");
 
 #include <sys/errno.h>
 #include <sys/types.h>
@@ -101,9 +101,9 @@
 		int shmask = 0;
 		struct irix_emuldata *ied;
 
-		p2 = pfind((pid_t)SCARG(uap, arg1));
+		p2 = pfind((pid_t)(uintptr_t)SCARG(uap, arg1));
 
-		if (p2 == p || SCARG(uap, arg1) == 0) {
+		if (p2 == p || SCARG(uap, arg1) == NULL) {
 			/* XXX return our own shmask */
 			return 0;
 		}
@@ -160,7 +160,7 @@
 	}
 
 	case IRIX_PR_ISBLOCKED: {	/* Is process blocked? */
-		pid_t pid = (pid_t)SCARG(uap, arg1);
+		pid_t pid = (pid_t)(uintptr_t)SCARG(uap, arg1);
 		struct irix_emuldata *ied;
 		struct proc *target;
 

Index: src/sys/compat/irix/irix_signal.c
diff -u src/sys/compat/irix/irix_signal.c:1.48.18.1 src/sys/compat/irix/irix_signal.c:1.48.18.2
--- src/sys/compat/irix/irix_signal.c:1.48.18.1	Fri Aug 21 17:58:58 2009
+++ src/sys/compat/irix/irix_signal.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_signal.c,v 1.48.18.1 2009/08/21 17:58:58 matt Exp $ */
+/*	$NetBSD: irix_signal.c,v 1.48.18.2 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 1994, 2001-2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_signal.c,v 1.48.18.1 2009/08/21 17:58:58 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_signal.c,v 1.48.18.2 2009/09/10 01:52:34 matt Exp $");
 
 #include <sys/types.h>
 #include <sys/signal.h>
@@ -141,7 +141,7 @@
 	}
 	isi->isi_signo = native_to_svr4_signo[sig];
 	isi->isi_errno = 0;
-	isi->isi_addr = (irix_app32_ptr_t)addr;
+	isi->isi_addr = (intptr_t)addr;
 
 	switch (code) {
 	case T_TLB_MOD:
@@ -278,12 +278,12 @@
 		    + l->l_sigstk.ss_size);
 	else
 		/* cast for O64 case */
-		sp = (void *)(u_int32_t)f->f_regs[_R_SP];
+		sp = (void *)(intptr_t)f->f_regs[_R_SP];
 
 	/*
 	 * Build the signal frame
 	 */
-	bzero(&sf, sizeof(sf));
+	memset(&sf, 0, sizeof(sf));
 	if (SIGACTION(p, ksi->ksi_signo).sa_flags & SA_SIGINFO) {
 		irix_set_ucontext(&sf.isf_ctx.iss.iuc, mask, ksi->ksi_trap, l);
 		irix_signal_siginfo(&sf.isf_ctx.iss.iis, ksi->ksi_signo,
@@ -295,8 +295,8 @@
 	/*
 	 * Compute the new stack address after copying sigframe
 	 */
-	sp = (void *)((unsigned long)sp - sizeof(sf.isf_ctx));
-	sp = (void *)((unsigned long)sp & ~0xfUL); /* 16 bytes alignement */
+	sp = (void *)((intptr_t)sp - sizeof(sf.isf_ctx));
+	sp = (void *)((intptr_t)sp & ~0xfUL); /* 16 bytes alignement */
 
 	/*
 	 * Install the sigframe onto the stack
@@ -324,8 +324,8 @@
 	 */
 	f->f_regs[_R_A0] = native_to_svr4_signo[ksi->ksi_signo];/* signo */
 	f->f_regs[_R_A1] = 0;			/* NULL */
-	f->f_regs[_R_A2] = (unsigned long)sp;	/* ucontext/sigcontext */
-	f->f_regs[_R_A3] = (unsigned long)catcher;/* signal handler address */
+	f->f_regs[_R_A2] = (intptr_t)sp;	/* ucontext/sigcontext */
+	f->f_regs[_R_A3] = (intptr_t)catcher;	/* signal handler address */
 
 	/*
 	 * When siginfo is selected, the higher bit of A0 is set
@@ -335,14 +335,14 @@
 	 */
 	if (SIGACTION(p, ksi->ksi_signo).sa_flags & SA_SIGINFO) {
 		f->f_regs[_R_A0] |= 0x80000000;
-		f->f_regs[_R_A1] = (u_long)sp +
-		    ((u_long)&sf.isf_ctx.iss.iis - (u_long)&sf);
+		f->f_regs[_R_A1] = (intptr_t)sp +
+		    ((intptr_t)&sf.isf_ctx.iss.iis - (intptr_t)&sf);
 	}
 
 	/*
 	 * Set up the new stack pointer
 	 */
-	f->f_regs[_R_SP] = (unsigned long)sp;
+	f->f_regs[_R_SP] = (intptr_t)sp;
 #ifdef DEBUG_IRIX
 	printf("stack pointer at %p, A1 = %p\n", sp, (void *)f->f_regs[_R_A1]);
 #endif /* DEBUG_IRIX */
@@ -353,7 +353,7 @@
 	 * see irix_sys_sigaction for details about how we get
 	 * the signal trampoline address.
 	 */
-	f->f_regs[_R_PC] = (unsigned long)
+	f->f_regs[_R_PC] = (intptr_t)
 	    (((struct irix_emuldata *)(p->p_emuldata))->ied_sigtramp[ksi->ksi_signo]);
 
 	/*
@@ -365,7 +365,6 @@
 #ifdef DEBUG_IRIX
 	printf("returning from irix_sendsig()\n");
 #endif
-	return;
 }
 
 static void
@@ -393,7 +392,7 @@
 	}
 	scp->isc_regs[0] = 0;
 	scp->isc_fp_rounded_result = 0;
-	scp->isc_regmask = ~0x1UL;
+	scp->isc_regmask = -2;
 	scp->isc_mdhi = f->f_regs[_R_MULHI];
 	scp->isc_mdlo = f->f_regs[_R_MULLO];
 	scp->isc_pc = f->f_regs[_R_PC];

Index: src/sys/compat/irix/irix_sysmp.c
diff -u src/sys/compat/irix/irix_sysmp.c:1.21 src/sys/compat/irix/irix_sysmp.c:1.21.18.1
--- src/sys/compat/irix/irix_sysmp.c:1.21	Mon Apr 28 20:23:42 2008
+++ src/sys/compat/irix/irix_sysmp.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_sysmp.c,v 1.21 2008/04/28 20:23:42 martin Exp $ */
+/*	$NetBSD: irix_sysmp.c,v 1.21.18.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001-2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_sysmp.c,v 1.21 2008/04/28 20:23:42 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_sysmp.c,v 1.21.18.1 2009/09/10 01:52:34 matt Exp $");
 
 #include <sys/errno.h>
 #include <sys/param.h>
@@ -89,16 +89,16 @@
 		break;
 
 	case IRIX_MP_KERNADDR: 	/* Kernel structure addresses */
-		return irix_sysmp_kernaddr((int)SCARG(uap, arg1), retval);
+		return irix_sysmp_kernaddr((intptr_t)SCARG(uap, arg1), retval);
 		break;
 
 	case IRIX_MP_SASZ: 	/* System accounting structure size */
-		return irix_sysmp_sasz((int)SCARG(uap, arg1), retval);
+		return irix_sysmp_sasz((intptr_t)SCARG(uap, arg1), retval);
 		break;
 
 	case IRIX_MP_SAGET1: /* Get system accounting structure for one CPU */
 	case IRIX_MP_SAGET:  /* Get system accounting structure for all CPU */
-		return irix_sysmp_saget((int)SCARG(uap, arg1),
+		return irix_sysmp_saget((intptr_t)SCARG(uap, arg1),
 		    (char *)SCARG(uap, arg2), (size_t)SCARG(uap, arg3));
 		break;
 

Index: src/sys/compat/irix/irix_syssgi.c
diff -u src/sys/compat/irix/irix_syssgi.c:1.48 src/sys/compat/irix/irix_syssgi.c:1.48.16.1
--- src/sys/compat/irix/irix_syssgi.c:1.48	Mon Apr 28 20:23:42 2008
+++ src/sys/compat/irix/irix_syssgi.c	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_syssgi.c,v 1.48 2008/04/28 20:23:42 martin Exp $ */
+/*	$NetBSD: irix_syssgi.c,v 1.48.16.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001, 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,15 +30,19 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_syssgi.c,v 1.48 2008/04/28 20:23:42 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_syssgi.c,v 1.48.16.1 2009/09/10 01:52:34 matt Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ddb.h"
 #endif
 
 #ifndef ELFSIZE
+#ifdef _LP64
+#define ELFSIZE 64
+#else
 #define ELFSIZE 32
 #endif
+#endif
 
 /* round up and down to page boundaries. Borrowed from sys/kern/exec_elf32.c */
 #define ELF_ROUND(a, b)         (((a) + (b) - 1) & ~((b) - 1))
@@ -109,7 +113,7 @@
 	case IRIX_SGI_SETGROUPS: {	/* setgroups(2) */
 		struct sys_setgroups_args cup;
 
-		SCARG(&cup, gidsetsize) = (int)SCARG(uap, arg1);
+		SCARG(&cup, gidsetsize) = (intptr_t)SCARG(uap, arg1);
 		SCARG(&cup, gidset) = (gid_t *)SCARG(uap, arg2);
 		return (sys_setgroups(l, &cup, retval));
 		break;
@@ -118,7 +122,7 @@
 	case IRIX_SGI_GETGROUPS: {	/* getgroups(2) */
 		struct sys_getgroups_args cup;
 
-		SCARG(&cup, gidsetsize) = (int)SCARG(uap, arg1);
+		SCARG(&cup, gidsetsize) = (intptr_t)SCARG(uap, arg1);
 		SCARG(&cup, gidset) = (gid_t *)SCARG(uap, arg2);
 		return (sys_getgroups(l, &cup, retval));
 		break;
@@ -131,7 +135,7 @@
 	case IRIX_SGI_GETSID: {	/* Get session ID: getsid(2) */
 		struct sys_getsid_args cup;
 
-		SCARG(&cup, pid) = (pid_t)SCARG(uap, arg1);
+		SCARG(&cup, pid) = (pid_t)(intptr_t)SCARG(uap, arg1);
 		return (sys_getsid(l, &cup, retval));
 		break;
 	}
@@ -139,7 +143,7 @@
 	case IRIX_SGI_GETPGID: {/* Get parent process GID: getpgid(2) */
 		struct sys_getpgid_args cup;
 
-		SCARG(&cup, pid) = (pid_t)SCARG(uap, arg1);
+		SCARG(&cup, pid) = (pid_t)(intptr_t)SCARG(uap, arg1);
 		return (sys_getpgid(l, &cup, retval));
 		break;
 	}
@@ -147,21 +151,21 @@
 	case IRIX_SGI_SETPGID: {/* Get parent process GID: setpgid(2) */
 		struct sys_setpgid_args cup;
 
-		SCARG(&cup, pid) = (pid_t)SCARG(uap, arg1);
-		SCARG(&cup, pgid) = (pid_t)SCARG(uap, arg2);
+		SCARG(&cup, pid) = (pid_t)(intptr_t)SCARG(uap, arg1);
+		SCARG(&cup, pgid) = (pid_t)(intptr_t)SCARG(uap, arg2);
 		return (sys_setpgid(l, &cup, retval));
 		break;
 	}
 
 	case IRIX_SGI_PATHCONF: /* Get file limits: pathconf(3) */
 		return irix_syssgi_pathconf((char *)SCARG(uap, arg1),
-		    (int)SCARG(uap, arg2), l, retval);
+		    (intptr_t)SCARG(uap, arg2), l, retval);
 		break;
 
 	case IRIX_SGI_RUSAGE: {	/* BSD getrusage(2) */
 		struct sys_getrusage_args cup;
 
-		SCARG(&cup, who) = (int)SCARG(uap, arg1);
+		SCARG(&cup, who) = (intptr_t)SCARG(uap, arg1);
 		SCARG(&cup, rusage) = (struct rusage *)SCARG(uap, arg2);
 		return sys_getrusage(l, &cup, retval);
 		break;
@@ -173,9 +177,9 @@
 		break;
 
 	case IRIX_SGI_MODULE_INFO: { /* <sys/systeminfo.h> get_module_info() */
-		int module_num = (int)SCARG(uap, arg1);
+		int module_num = (intptr_t)SCARG(uap, arg1);
 		struct irix_module_info_s *imip = SCARG(uap, arg2);
-		int mss = (int)SCARG(uap, arg3);
+		int mss = (intptr_t)SCARG(uap, arg3);
 		struct irix_module_info_s imi;
 		char *idx;
 
@@ -206,7 +210,7 @@
 		arg1 = SCARG(uap, arg1); /* PID of the process */
 		arg2 = SCARG(uap, arg2); /* Address of user buffer */
 		arg3 = SCARG(uap, arg3); /* Length of user buffer */
-		tp = pfind((pid_t)arg1);
+		tp = pfind((pid_t)(intptr_t)arg1);
 		if (tp == NULL || \
 		    tp->p_psstr == NULL || \
 		    tp->p_psstr->ps_argvstr == NULL || \
@@ -231,8 +235,8 @@
 		 arg1 = SCARG(uap, arg1); /* file descriptor  */
 		 arg2 = SCARG(uap, arg2); /* ptr to ELF program header array */
 		 arg3 = SCARG(uap, arg3); /* array's length */
-		return irix_syssgi_mapelf((int)arg1, (Elf_Phdr *)arg2,
-		    (int)arg3, l, retval);
+		return irix_syssgi_mapelf((intptr_t)arg1, (Elf_Phdr *)arg2,
+		    (intptr_t)arg3, l, retval);
 		break;
 
 	case IRIX_SGI_USE_FP_BCOPY:	/* bcopy and bzero can use FPU or not */
@@ -250,7 +254,7 @@
 
 	case IRIX_SGI_SYSCONF:		/* POSIX sysconf */
 		arg1 = SCARG(uap, arg1); /* system variable name */
-		return irix_syssgi_sysconf((int)arg1, l, retval);
+		return irix_syssgi_sysconf((intptr_t)arg1, l, retval);
 		break;
 
 	case IRIX_SGI_SATCTL:		/* control audit stream */

Index: src/sys/compat/irix/irix_types.h
diff -u src/sys/compat/irix/irix_types.h:1.18 src/sys/compat/irix/irix_types.h:1.18.18.1
--- src/sys/compat/irix/irix_types.h:1.18	Mon Apr 28 20:23:42 2008
+++ src/sys/compat/irix/irix_types.h	Thu Sep 10 01:52:34 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: irix_types.h,v 1.18 2008/04/28 20:23:42 martin Exp $ */
+/*	$NetBSD: irix_types.h,v 1.18.18.1 2009/09/10 01:52:34 matt Exp $ */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
 typedef __uint32_t irix_app32_ptr_t;
 typedef __uint64_t irix_k_sigset_t;
 
-#if 1 /* _MIPS_SZLONG == 32 */
+#if _MIPS_SZLONG == 32
 typedef unsigned long irix_mode_t;
 typedef unsigned long irix_dev_t;
 typedef long irix_uid_t;
@@ -65,17 +65,17 @@
 typedef unsigned long irix_nlink_t;
 typedef long irix_pid_t;
 typedef long irix_time_t;
-typedef unsigned int irix_size_t;
+typedef unsigned long irix_size_t;
 #endif
-#if 0 /* _MIPS_SZLONG == 64 */
+#if _MIPS_SZLONG == 64
 typedef __uint32_t irix_dev_t;
 typedef __uint32_t irix_mode_t;
 typedef __int32_t irix_uid_t;
 typedef __int32_t irix_gid_t;
 typedef __uint32_t irix_nlink_t;
 typedef __int32_t irix_pid_t;
-typedef int irix_time_t;
-typedef unsigned long irix_size_t;
+typedef __int32_t irix_time_t;
+typedef __uint32_t irix_size_t;
 #endif
 typedef __int32_t irix_blkcnt_t;
 typedef __uint64_t irix_ino64_t;
@@ -107,46 +107,46 @@
 #define IRIX__STAT64_VER 3
 struct irix_stat {
 	irix_dev_t	ist_dev;
-	long		ist_pad1[3];
+	__uint32_t	ist_pad1[3];
 	irix_ino_t	ist_ino;
 	irix_mode_t	ist_mode;
 	irix_nlink_t	ist_nlink;
 	irix_uid_t	ist_uid;
 	irix_gid_t	ist_gid;
 	irix_dev_t	ist_rdev;
-	long		ist_pad2[2];
+	__uint32_t	ist_pad2[2];
 	irix_off_t	ist_size;
-	long		ist_pad3;
+	__uint32_t	ist_pad3;
 	irix_timespec_t	ist_atim;
 	irix_timespec_t	ist_mtim;
 	irix_timespec_t	ist_ctim;
-	long		ist_blksize;
+	__int32_t	ist_blksize;
 	irix_blkcnt_t	ist_blocks;
 	char		ist_fstype[16];
-	long		ist_projid;
-	long		ist_pad4[7];
+	__int32_t	ist_projid;
+	__uint32_t	ist_pad4[7];
 };
 
 struct irix_stat64 {
 	irix_dev_t	ist_dev;
-	long		ist_pad1[3];
+	__uint32_t	ist_pad1[3];
 	irix_ino64_t	ist_ino;
 	irix_mode_t	ist_mode;
 	irix_nlink_t	ist_nlink;
 	irix_uid_t	ist_uid;
 	irix_gid_t	ist_gid;
 	irix_dev_t	ist_rdev;
-	long		ist_pad2[2];
+	__uint32_t	ist_pad2[2];
 	irix_off64_t	ist_size;
-	long		ist_pad3;
+	__uint32_t	ist_pad3;
 	irix_timespec_t	ist_atim;
 	irix_timespec_t	ist_mtim;
 	irix_timespec_t	ist_ctim;
-	long		ist_blksize;
+	__int32_t	ist_blksize;
 	irix_blkcnt64_t	ist_blocks;
 	char		ist_fstype[16];
-	long		ist_projid;
-	long		ist_pad4[7];
+	__int32_t	ist_projid;
+	__uint32_t	ist_pad4[7];
 };
 
 /* From IRIX's <sys/mount.h> */

Reply via email to