diff mbox

[19/27,AARCH64] Add typesizes.h for ILP32

Message ID 1466485631-3532-21-git-send-email-ynorov@caviumnetworks.com
State New
Headers show

Commit Message

Yury Norov June 21, 2016, 5:07 a.m. UTC
From: Andrew Pinski <apinski@cavium.com>

The generic typesizes does not work for ILP32 as the kernel long type
needs to be long long (quad).  time_t, off_t, clock_t, suseconds_t,
ino_t, rlim_t are 64bits.
FDSET bitmask is a 64bit type.

* sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h: New file.

Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
---
 sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h | 79 ++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/sysdep-vdso.h            |  4 +-
 2 files changed, 81 insertions(+), 2 deletions(-)
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h

Comments

Andreas Schwab June 21, 2016, 7:58 a.m. UTC | #1
Yury Norov <ynorov@caviumnetworks.com> writes:

> diff --git a/sysdeps/unix/sysv/linux/sysdep-vdso.h b/sysdeps/unix/sysv/linux/sysdep-vdso.h
> index e8c4a7b..351d6bb 100644
> --- a/sysdeps/unix/sysv/linux/sysdep-vdso.h
> +++ b/sysdeps/unix/sysv/linux/sysdep-vdso.h
> @@ -37,7 +37,7 @@
>      __label__ out;							      \
>      __label__ iserr;							      \
>      INTERNAL_SYSCALL_DECL (sc_err);					      \
> -    long int sc_ret;							      \
> +    __syscall_slong_t sc_ret;						      \
>  									      \
>      __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
>      PTR_DEMANGLE (vdsop);						      \
> @@ -64,7 +64,7 @@
>  #  define INTERNAL_VSYSCALL(name, err, nr, args...)			      \
>    ({									      \
>      __label__ out;							      \
> -    long v_ret;								      \
> +    __syscall_slong_t v_ret;						      \
>  									      \
>      __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
>      PTR_DEMANGLE (vdsop);						      \

That part should have no effect now that __SYSCALL_SLONG_TYPE remains to
be long.

Andreas.
Zhang Jian(Bamvor) June 21, 2016, 11:59 a.m. UTC | #2
Hi,

On 2016/6/21 15:58, Andreas Schwab wrote:
> Yury Norov <ynorov@caviumnetworks.com> writes:
>
>> diff --git a/sysdeps/unix/sysv/linux/sysdep-vdso.h b/sysdeps/unix/sysv/linux/sysdep-vdso.h
>> index e8c4a7b..351d6bb 100644
>> --- a/sysdeps/unix/sysv/linux/sysdep-vdso.h
>> +++ b/sysdeps/unix/sysv/linux/sysdep-vdso.h
>> @@ -37,7 +37,7 @@
>>       __label__ out;							      \
>>       __label__ iserr;							      \
>>       INTERNAL_SYSCALL_DECL (sc_err);					      \
>> -    long int sc_ret;							      \
>> +    __syscall_slong_t sc_ret;						      \
>>   									      \
>>       __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
>>       PTR_DEMANGLE (vdsop);						      \
>> @@ -64,7 +64,7 @@
>>   #  define INTERNAL_VSYSCALL(name, err, nr, args...)			      \
>>     ({									      \
>>       __label__ out;							      \
>> -    long v_ret;								      \
>> +    __syscall_slong_t v_ret;						      \
>>   									      \
>>       __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
>>       PTR_DEMANGLE (vdsop);						      \
>
> That part should have no effect now that __SYSCALL_SLONG_TYPE remains to
> be long.
Agree. According to the discussion in "[PATCH 11/27] [AARCH64] Syscalls for ILP32 are passed
always via 64bit values.". We should update this to long long too.

Regard

Bamvor
>
> Andreas.
>
Yury Norov June 23, 2016, 4:54 a.m. UTC | #3
On Tue, Jun 21, 2016 at 07:59:27PM +0800, Zhangjian (Bamvor) wrote:
> Hi,
> 
> On 2016/6/21 15:58, Andreas Schwab wrote:
> >Yury Norov <ynorov@caviumnetworks.com> writes:
> >
> >>diff --git a/sysdeps/unix/sysv/linux/sysdep-vdso.h b/sysdeps/unix/sysv/linux/sysdep-vdso.h
> >>index e8c4a7b..351d6bb 100644
> >>--- a/sysdeps/unix/sysv/linux/sysdep-vdso.h
> >>+++ b/sysdeps/unix/sysv/linux/sysdep-vdso.h
> >>@@ -37,7 +37,7 @@
> >>      __label__ out;							      \
> >>      __label__ iserr;							      \
> >>      INTERNAL_SYSCALL_DECL (sc_err);					      \
> >>-    long int sc_ret;							      \
> >>+    __syscall_slong_t sc_ret;						      \
> >>  									      \
> >>      __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
> >>      PTR_DEMANGLE (vdsop);						      \
> >>@@ -64,7 +64,7 @@
> >>  #  define INTERNAL_VSYSCALL(name, err, nr, args...)			      \
> >>    ({									      \
> >>      __label__ out;							      \
> >>-    long v_ret;								      \
> >>+    __syscall_slong_t v_ret;						      \
> >>  									      \
> >>      __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
> >>      PTR_DEMANGLE (vdsop);						      \
> >
> >That part should have no effect now that __SYSCALL_SLONG_TYPE remains to
> >be long.
> Agree. According to the discussion in "[PATCH 11/27] [AARCH64] Syscalls for ILP32 are passed
> always via 64bit values.". We should update this to long long too.
> 

I think comment to patch 11 is outdated. Andreas right, this chunk is
useless. I'll remove it in next submission.
diff mbox

Patch

diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h b/sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h
new file mode 100644
index 0000000..844da49
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/bits/typesizes.h
@@ -0,0 +1,79 @@ 
+/* bits/typesizes.h -- underlying types for *_t.  Linux/AARCh64 version.
+   Copyright (C) 2011-2015 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_TYPES_H
+# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef	_BITS_TYPESIZES_H
+#define	_BITS_TYPESIZES_H	1
+
+/* See <bits/types.h> for the meaning of these macros.  This file exists so
+   that <bits/types.h> need not vary across different GNU platforms.  */
+
+#define __DEV_T_TYPE		__UQUAD_TYPE
+#define __UID_T_TYPE		__U32_TYPE
+#define __GID_T_TYPE		__U32_TYPE
+#define __INO_T_TYPE		__ULONGWORD_TYPE
+#define __INO64_T_TYPE		__UQUAD_TYPE
+#define __MODE_T_TYPE		__U32_TYPE
+#define __NLINK_T_TYPE		__U32_TYPE
+#define __OFF_T_TYPE		__SQUAD_TYPE
+#define __OFF64_T_TYPE		__SQUAD_TYPE
+#define __PID_T_TYPE		__S32_TYPE
+#define __RLIM_T_TYPE		__ULONGWORD_TYPE
+#define __RLIM64_T_TYPE		__UQUAD_TYPE
+#define	__BLKCNT_T_TYPE		__SLONGWORD_TYPE
+#define	__BLKCNT64_T_TYPE	__SQUAD_TYPE
+#define	__FSBLKCNT_T_TYPE	__ULONGWORD_TYPE
+#define	__FSBLKCNT64_T_TYPE	__UQUAD_TYPE
+#define	__FSFILCNT_T_TYPE	__ULONGWORD_TYPE
+#define	__FSFILCNT64_T_TYPE	__UQUAD_TYPE
+#define	__FSWORD_T_TYPE		__SWORD_TYPE
+#define	__ID_T_TYPE		__U32_TYPE
+#define __CLOCK_T_TYPE		__SLONGWORD_TYPE
+#define __TIME_T_TYPE		__SLONGWORD_TYPE
+#define __USECONDS_T_TYPE	__U32_TYPE
+#define __SUSECONDS_T_TYPE	__SLONGWORD_TYPE
+#define __DADDR_T_TYPE		__S32_TYPE
+#define __KEY_T_TYPE		__S32_TYPE
+#define __CLOCKID_T_TYPE	__S32_TYPE
+#define __TIMER_T_TYPE		void *
+#define __BLKSIZE_T_TYPE	__S32_TYPE
+#define __FSID_T_TYPE		struct { int __val[2]; }
+/* ssize_t is always singed long in both ABIs. */
+#define __SSIZE_T_TYPE		__SLONGWORD_TYPE
+#define __SYSCALL_SLONG_TYPE	__SLONGWORD_TYPE
+#define __SYSCALL_ULONG_TYPE	__ULONGWORD_TYPE
+#define __CPU_MASK_TYPE         __ULONGWORD_TYPE
+
+#ifdef __LP64__
+/* Tell the libc code that off_t and off64_t are actually the same type
+   for all ABI purposes, even if possibly expressed as different base types
+   for C type-checking purposes.  */
+# define __OFF_T_MATCHES_OFF64_T	1
+
+/* Same for ino_t and ino64_t.  */
+# define __INO_T_MATCHES_INO64_T	1
+#endif
+
+/* Number of descriptors that can fit in an `fd_set'.  */
+#define	__FD_SETSIZE		1024
+
+
+#endif /* bits/typesizes.h */
diff --git a/sysdeps/unix/sysv/linux/sysdep-vdso.h b/sysdeps/unix/sysv/linux/sysdep-vdso.h
index e8c4a7b..351d6bb 100644
--- a/sysdeps/unix/sysv/linux/sysdep-vdso.h
+++ b/sysdeps/unix/sysv/linux/sysdep-vdso.h
@@ -37,7 +37,7 @@ 
     __label__ out;							      \
     __label__ iserr;							      \
     INTERNAL_SYSCALL_DECL (sc_err);					      \
-    long int sc_ret;							      \
+    __syscall_slong_t sc_ret;						      \
 									      \
     __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
     PTR_DEMANGLE (vdsop);						      \
@@ -64,7 +64,7 @@ 
 #  define INTERNAL_VSYSCALL(name, err, nr, args...)			      \
   ({									      \
     __label__ out;							      \
-    long v_ret;								      \
+    __syscall_slong_t v_ret;						      \
 									      \
     __typeof (__vdso_##name) vdsop = __vdso_##name;			      \
     PTR_DEMANGLE (vdsop);						      \