Subject: sysv ipc msg functions

From: Greg Weeks <[email-masked]>
Date: Tue, 19 Apr 2005 10:42:24 -0400

I needed this glibc patch to get the sysv ipc msgctl functions to work 
correctly. This looks a bit hackish to me, so I wanted to run it past 
everybody here before filing it with glibc.

Greg Weeks
--- glibc-2.3.3-200407050320/sysdeps/unix/sysv/linux/mips/bits/msq.h.orig	2005-04-19 09:04:15.000000000 -0400
+++ glibc-2.3.3-200407050320/sysdeps/unix/sysv/linux/mips/bits/msq.h	2005-04-19 09:22:21.000000000 -0400
@@ -38,9 +38,27 @@ typedef unsigned long int msglen_t;
 struct msqid_ds
 {
   struct ipc_perm msg_perm;	/* structure describing operation permission */
+#if __WORDSIZE == 32 && defined(__MIPSEB__)
+   unsigned long	__unused3;
+#endif
   __time_t msg_stime;		/* time of last msgsnd command */
+#if __WORDSIZE == 32 && defined(__MIPSEL__)
+   unsigned long	__unused3;
+#endif
+#if __WORDSIZE == 32 && defined(__MIPSEB__)
+  unsigned long	__unused4;
+#endif
   __time_t msg_rtime;		/* time of last msgrcv command */
+#if __WORDSIZE == 32 && defined(__MIPSEL__)
+  unsigned long	__unused4;
+#endif
+#if __WORDSIZE == 32 && defined(__MIPSEB__)
+  unsigned long	__unused5;
+#endif
   __time_t msg_ctime;		/* time of last change */
+#if __WORDSIZE == 32 && defined(__MIPSEL__)
+  unsigned long	__unused5;
+#endif
   unsigned long int __msg_cbytes; /* current number of bytes on queue */
   msgqnum_t msg_qnum;		/* number of messages currently on queue */
   msglen_t msg_qbytes;		/* max number of bytes allowed on queue */

---

From: [email-masked]
Date: Tue, 19 Apr 2005 09:51:48 -0500 (CDT)

[ Charset ISO-8859-1 unsupported, converting... ]
> everybody here before filing it with glibc.
Perhaps is ignorance on my part, but I thought the compiler would
handle the endianness with regards to the structure members. Did
you have problems with big and little endian such that you had to
do all of the ugly #ifdef'ing? 

-Steve

---

From: Greg Weeks <[email-masked]>
Date: Tue, 19 Apr 2005 10:54:49 -0400

>do all of the ugly #ifdef'ing? 
yes. Take a look at the kernel structure it is mapping to.

in
asm-mips/msgbuf.h

struct msqid64_ds

Greg Weeks

---

From: Daniel Jacobowitz <[email-masked]>
Date: Tue, 19 Apr 2005 11:05:49 -0400

> everybody here before filing it with glibc.

What's your configuration?  Big or little endian, userland ABI, kernel
ABI.  Glibc version.  Kernel version.  What specific things don't work. 
Not even enough information here to make a guess.

You're updating the userspace msqid_ds to match the kernel's
msqid64_ds.  They're not normally the same type.  Rather, see
<linux/msg.h> for the type o32 generally uses.

-- 
Daniel Jacobowitz
CodeSourcery, LLC

---

From: Thiemo Seufer <[email-masked]>
Date: Tue, 19 Apr 2005 16:35:43 +0200

> everybody here before filing it with glibc.

The Debian glibc has a similiar patch, see
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=200215&archive=yes
for a discussion.

Thiemo

---

From: Daniel Jacobowitz <[email-masked]>
Date: Tue, 19 Apr 2005 11:23:12 -0400

> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=200215&archive=yes

Last thing I see there was:

  Okay, I suggest you send this patch to Uli for libc and I'll prepare a
  patch for the kernel, will post here later.

Anything ever come of that?

-- 
Daniel Jacobowitz
CodeSourcery, LLC

---

From: Greg Weeks <[email-masked]>
Date: Tue, 19 Apr 2005 11:52:13 -0400

><linux/msg.h> for the type o32 generally uses.

glibc-2.3.3-200407050320
2.6.11.7 kernel but it's the issue is the same on the 2.6.12-rc from cvs.
The board is a malta 4kc in LE mode.
If you want to see a failure the LTP msgctl/msgsnd tests fail.

Greg Weeks