This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: PATCH: Add __syscall_slong_t and __syscall_ulong_t
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Roland McGrath <roland at hack dot frob dot com>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Mon, 14 May 2012 21:22:32 -0700
- Subject: Re: PATCH: Add __syscall_slong_t and __syscall_ulong_t
- References: <20120412012017.GA27647@intel.com><20120514220816.DDDB42C08E@topped-with-meat.com>
On Mon, May 14, 2012 at 3:08 PM, Roland McGrath <roland@hack.frob.com> wrote:
> What exactly are these for, again?
> Are they used in public structure member types or something?
>
>
Since x32 uses the same system call number as x86-64 for
most of system calls and kernel expects "kernel long" is 64bit,
we should use long long instead of long on them for x32.
Here is an example.
--
H.J.
---
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/msq.h
b/sysdeps/unix/sysv/linux/x86_64/bits/msq.h
index 8389107..b375fd0 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/msq.h
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/msq.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 1995, 1996, 1997, 2000, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 2000, 2002, 2012
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,7 +21,6 @@
#endif
#include <bits/types.h>
-#include <bits/wordsize.h>
/* Define options for message queue functions. */
#define MSG_NOERROR 010000 /* no error if message is too big */
@@ -29,8 +29,8 @@
#endif
/* Types used in the structure definition. */
-typedef unsigned long int msgqnum_t;
-typedef unsigned long int msglen_t;
+typedef __syscall_ulong_t msgqnum_t;
+typedef __syscall_ulong_t msglen_t;
/* Structure of record for one message inside the kernel.
The type `struct msg' is opaque. */
@@ -38,24 +38,24 @@ struct msqid_ds
{
struct ipc_perm msg_perm; /* structure describing operation permission */
__time_t msg_stime; /* time of last msgsnd command */
-#if __WORDSIZE == 32
+#ifndef __x86_64__
unsigned long int __unused1;
#endif
__time_t msg_rtime; /* time of last msgrcv command */
-#if __WORDSIZE == 32
+#ifndef __x86_64__
unsigned long int __unused2;
#endif
__time_t msg_ctime; /* time of last change */
-#if __WORDSIZE == 32
+#ifndef __x86_64__
unsigned long int __unused3;
#endif
- unsigned long int __msg_cbytes; /* current number of bytes on queue */
+ __syscall_ulong_t __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 */
__pid_t msg_lspid; /* pid of last msgsnd() */
__pid_t msg_lrpid; /* pid of last msgrcv() */
- unsigned long int __unused4;
- unsigned long int __unused5;
+ __syscall_ulong_t __unused4;
+ __syscall_ulong_t __unused5;
};
#ifdef __USE_MISC