[parisc-linux] [PATCH] fix up our compat semaphore operations

Grant Grundler grundler at parisc-linux.org
Sun Jan 21 00:46:48 MST 2007


On Fri, Jan 19, 2007 at 11:39:55AM -0600, James Bottomley wrote:
> The controversial change might be to move to the compat_sys calls for
> msgsnd and msgrcv ... it looks to me like the ABI in sys_parisc32.c
> might be different from the one in ipc/compat.c  can someone who has a
> copy of glibc check this?

linking ipc/compat.c requires we first add this bit to arch/parisc/Kconfig:

config SYSVIPC_COMPAT
        bool
        depends on COMPAT && SYSVIPC
        default y

so that ipc/compat.c gets built.
And then add a few missing compat_XXX structs to asm-parisc/compat.h:

compat_key_t		same for all arches (s32)

compat_ipc64_perm	asm-sparc64/compat.h version looks the best to me
			but it has the "ushort" pad fields before the
			field it's padding for.
			I also looked at x86_64, s390, powerpc.

compat_shmid64_ds	Ditto
compat_msqid64_ds	Ditto
compat_semid64_ds	Ditto

Until I can commit the appended diff myself:
Signed-off-by: Grant Grundler <grundler at parisc-linux.org>

thanks,
grant


diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
index e18eeec..fcc4c6f 100644
--- a/arch/parisc/Kconfig
+++ b/arch/parisc/Kconfig
@@ -242,6 +242,11 @@ config COMPAT
 	def_bool y
 	depends on 64BIT
 
+config SYSVIPC_COMPAT
+	bool
+	depends on COMPAT && SYSVIPC
+	default y
+
 config HPUX
 	bool "Support for HP-UX binaries"
 	depends on !64BIT
diff --git a/include/asm-parisc/compat.h b/include/asm-parisc/compat.h
index fe85790..4b41974 100644
--- a/include/asm-parisc/compat.h
+++ b/include/asm-parisc/compat.h
@@ -27,6 +27,8 @@ typedef u16	compat_nlink_t;
 typedef u16	compat_ipc_pid_t;
 typedef s32	compat_daddr_t;
 typedef u32	compat_caddr_t;
+typedef __kernel_fsid_t compat_fsid_t;
+typedef s32	compat_key_t;
 typedef s32	compat_timer_t;
 
 typedef s32	compat_int_t;
@@ -126,6 +128,68 @@ typedef u32		compat_sigset_word;
 #define COMPAT_OFF_T_MAX	0x7fffffff
 #define COMPAT_LOFF_T_MAX	0x7fffffffffffffffL
 
+
+/* cloned from include/asm-sparc64/compat.h */
+struct compat_ipc64_perm {
+	compat_key_t key;
+	__compat_uid32_t uid;
+	__compat_gid32_t gid;
+	__compat_uid32_t cuid;
+	__compat_gid32_t cgid;
+	unsigned short __pad1;
+	compat_mode_t mode;
+	unsigned short __pad2;
+	unsigned short seq;
+	compat_ulong_t unused1;
+	compat_ulong_t unused2;
+};
+
+struct compat_semid64_ds {
+	struct compat_ipc64_perm sem_perm;
+	unsigned int __unused1;
+	compat_time_t sem_otime;
+	unsigned int __unused2;
+	compat_time_t sem_ctime;
+	compat_ulong_t sem_nsems;
+	compat_ulong_t __unused3;
+	compat_ulong_t __unused4;
+};
+
+struct compat_msqid64_ds {
+	struct compat_ipc64_perm msg_perm;
+	unsigned int __unused1;
+	compat_time_t msg_stime;
+	unsigned int __unused2;
+	compat_time_t msg_rtime;
+	unsigned int __unused3;
+	compat_time_t msg_ctime;
+	compat_ulong_t msg_cbytes;
+	compat_ulong_t msg_qnum;
+	compat_ulong_t msg_qbytes;
+	compat_pid_t msg_lspid;
+	compat_pid_t msg_lrpid;
+	compat_ulong_t __unused4;
+	compat_ulong_t __unused5;
+};
+
+struct compat_shmid64_ds {
+	struct compat_ipc64_perm shm_perm;
+	unsigned int __unused1;
+	compat_time_t shm_atime;
+	unsigned int __unused2;
+	compat_time_t shm_dtime;
+	unsigned int __unused3;
+	compat_time_t shm_ctime;
+	unsigned int __unused4;
+	compat_size_t shm_segsz;
+	compat_pid_t shm_cpid;
+	compat_pid_t shm_lpid;
+	compat_ulong_t shm_nattch;
+	compat_ulong_t __unused5;
+	compat_ulong_t __unused6;
+};
+
+
 /*
  * A pointer passed in from user mode. This should not
  * be used for syscall parameters, just declare them



More information about the parisc-linux mailing list