Re: [PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-23 Thread Joseph Myers
On Thu, 23 Jun 2016, Yury Norov wrote:

> So for now I think it's simpler to have this ABI in sysdeps, and be in

Of course it goes in sysdeps.  But not architecture-specific sysdeps.  
And "simpler" for initial implementation may not be simpler for future 
maintenance; when there are too many implementations of a function, they 
have a tendency to get out of sync, and to cause trouble for future global 
changes.  There are two plausible options that I see:

* sysdeps/unix/sysv/linux/, where 
 is an architecture-independent name for the 
relevant ABI feature.

* Have a macro __SOME_ABI_FEATURE in some sysdeps header, and then use 
conditionals on that macro in existing implementations in 
sysdeps/unix/sysv/linux/generic or sysdeps/unix/sysv/linux.

I think the second one is preferable.  If you prefer the first one, you 
should be able to justify it by giving some detailed examples of what the 
different implementations look like and why there is actually nothing 
useful in common between them that would allow shared implementations with 
conditional code.

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: [PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-23 Thread Joseph Myers
On Thu, 23 Jun 2016, Yury Norov wrote:

> So for now I think it's simpler to have this ABI in sysdeps, and be in

Of course it goes in sysdeps.  But not architecture-specific sysdeps.  
And "simpler" for initial implementation may not be simpler for future 
maintenance; when there are too many implementations of a function, they 
have a tendency to get out of sync, and to cause trouble for future global 
changes.  There are two plausible options that I see:

* sysdeps/unix/sysv/linux/, where 
 is an architecture-independent name for the 
relevant ABI feature.

* Have a macro __SOME_ABI_FEATURE in some sysdeps header, and then use 
conditionals on that macro in existing implementations in 
sysdeps/unix/sysv/linux/generic or sysdeps/unix/sysv/linux.

I think the second one is preferable.  If you prefer the first one, you 
should be able to justify it by giving some detailed examples of what the 
different implementations look like and why there is actually nothing 
useful in common between them that would allow shared implementations with 
conditional code.

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: [PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-22 Thread Yury Norov
On Tue, Jun 21, 2016 at 10:35:27AM +, Joseph Myers wrote:
> On Tue, 21 Jun 2016, Yury Norov wrote:
> 
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c
> 
> I don't like how you need so many ilp32 files.
> 
> Presumably this is a new convention to be followed for all future ilp32 
> ABIs on 64-bit architectures.  Meaning that you should have some sysdeps 
> macros to say whether this convention is in use and then make either the 
> sysdeps/unix/sysv/linux files, or the .../generic files, or a new 
> architecture-independent sysdeps directory, implement that convention.
> 
> Note also how Adhemerval recently unified pread / pwrite implementations.  
> Adding new files for those functions goes against that unification.
> 
> -- 
> Joseph S. Myers
> jos...@codesourcery.com

Hi Joseph,

There's RISC-V convention that implements very similar approach to
aarch64/ilp32.
https://github.com/manuelafm/riscv-gnu-toolchain/commits/master

But as I understand, there is much work there to be done before upstreaming.

So for now I think it's simpler to have this ABI in sysdeps, and be in
touch with RISC-V team to have aarch64/ilp32 compatible to RISC-V.
After RISC-V merge, we can switch aarch64/ilp32 to it and drop
unneeded sysdeps.

If you mean something different, could you explain it in details, or
suggest an action plan for such rework.

Yury.


Re: [PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-22 Thread Yury Norov
On Tue, Jun 21, 2016 at 10:35:27AM +, Joseph Myers wrote:
> On Tue, 21 Jun 2016, Yury Norov wrote:
> 
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c
> >  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c
> 
> I don't like how you need so many ilp32 files.
> 
> Presumably this is a new convention to be followed for all future ilp32 
> ABIs on 64-bit architectures.  Meaning that you should have some sysdeps 
> macros to say whether this convention is in use and then make either the 
> sysdeps/unix/sysv/linux files, or the .../generic files, or a new 
> architecture-independent sysdeps directory, implement that convention.
> 
> Note also how Adhemerval recently unified pread / pwrite implementations.  
> Adding new files for those functions goes against that unification.
> 
> -- 
> Joseph S. Myers
> jos...@codesourcery.com

Hi Joseph,

There's RISC-V convention that implements very similar approach to
aarch64/ilp32.
https://github.com/manuelafm/riscv-gnu-toolchain/commits/master

But as I understand, there is much work there to be done before upstreaming.

So for now I think it's simpler to have this ABI in sysdeps, and be in
touch with RISC-V team to have aarch64/ilp32 compatible to RISC-V.
After RISC-V merge, we can switch aarch64/ilp32 to it and drop
unneeded sysdeps.

If you mean something different, could you explain it in details, or
suggest an action plan for such rework.

Yury.


Re: [PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-21 Thread Joseph Myers
On Tue, 21 Jun 2016, Yury Norov wrote:

>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c

I don't like how you need so many ilp32 files.

Presumably this is a new convention to be followed for all future ilp32 
ABIs on 64-bit architectures.  Meaning that you should have some sysdeps 
macros to say whether this convention is in use and then make either the 
sysdeps/unix/sysv/linux files, or the .../generic files, or a new 
architecture-independent sysdeps directory, implement that convention.

Note also how Adhemerval recently unified pread / pwrite implementations.  
Adding new files for those functions goes against that unification.

-- 
Joseph S. Myers
jos...@codesourcery.com


Re: [PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-21 Thread Joseph Myers
On Tue, 21 Jun 2016, Yury Norov wrote:

>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c
>  create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c

I don't like how you need so many ilp32 files.

Presumably this is a new convention to be followed for all future ilp32 
ABIs on 64-bit architectures.  Meaning that you should have some sysdeps 
macros to say whether this convention is in use and then make either the 
sysdeps/unix/sysv/linux files, or the .../generic files, or a new 
architecture-independent sysdeps directory, implement that convention.

Note also how Adhemerval recently unified pread / pwrite implementations.  
Adding new files for those functions goes against that unification.

-- 
Joseph S. Myers
jos...@codesourcery.com


[PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-20 Thread Yury Norov
From: Yury Norov 

ILP32 has 64-bit off_t, to follow modern requirements.
But kernel clears top-halves of input registers. It means
we have to pass corresponding arguments in a pair, like
aarch32 does. In this patch all affected syscalls are redefined.
Most of them are taken from arm code.

Signed-off-by: Yury Norov 
---
 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c  | 31 +++
 .../unix/sysv/linux/aarch64/ilp32/fallocate64.c|  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c  |  1 +
 .../unix/sysv/linux/aarch64/ilp32/ftruncate64.c|  4 +++
 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c  | 36 ++
 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c   |  1 +
 .../unix/sysv/linux/aarch64/ilp32/posix_fadvise.c  |  1 +
 .../sysv/linux/aarch64/ilp32/posix_fadvise64.c |  2 ++
 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c  |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c|  5 +++
 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c   |  5 +++
 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c  |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c   |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c |  4 +++
 16 files changed, 96 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c

diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
new file mode 100644
index 000..4951d06
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2007-2016 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
+   .  */
+
+#include 
+#include 
+#include 
+
+
+/* Reserve storage for the data of the file associated with FD.  */
+int
+fallocate (int fd, int mode, __off_t offset, __off_t len)
+{
+  return SYSCALL_CANCEL (fallocate, fd, mode,
+__LONG_LONG_PAIR (offset >> 32, offset),
+__LONG_LONG_PAIR (len >> 32, len));
+}
+weak_alias (fallocate, fallocate64)
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
new file mode 100644
index 000..f27735a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
@@ -0,0 +1 @@
+/* See sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c */
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
new file mode 100644
index 000..fb5b598
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
@@ -0,0 +1 @@
+/* See sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncatei64.c */
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
new file mode 100644
index 000..bd0f5fe
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
@@ -0,0 +1,4 @@
+#include 
+
+weak_alias (__ftruncate64, __ftruncate)
+weak_alias (__ftruncate64, ftruncate)
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c 

[PATCH 21/27] [AARCH64] ILP32: introduce syscalls that pass off_t

2016-06-20 Thread Yury Norov
From: Yury Norov 

ILP32 has 64-bit off_t, to follow modern requirements.
But kernel clears top-halves of input registers. It means
we have to pass corresponding arguments in a pair, like
aarch32 does. In this patch all affected syscalls are redefined.
Most of them are taken from arm code.

Signed-off-by: Yury Norov 
---
 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c  | 31 +++
 .../unix/sysv/linux/aarch64/ilp32/fallocate64.c|  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c  |  1 +
 .../unix/sysv/linux/aarch64/ilp32/ftruncate64.c|  4 +++
 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c  | 36 ++
 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c   |  1 +
 .../unix/sysv/linux/aarch64/ilp32/posix_fadvise.c  |  1 +
 .../sysv/linux/aarch64/ilp32/posix_fadvise64.c |  2 ++
 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c  |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c|  5 +++
 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c   |  5 +++
 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c  |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c   |  1 +
 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c |  4 +++
 16 files changed, 96 insertions(+)
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c
 create mode 100644 sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c

diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
new file mode 100644
index 000..4951d06
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2007-2016 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
+   .  */
+
+#include 
+#include 
+#include 
+
+
+/* Reserve storage for the data of the file associated with FD.  */
+int
+fallocate (int fd, int mode, __off_t offset, __off_t len)
+{
+  return SYSCALL_CANCEL (fallocate, fd, mode,
+__LONG_LONG_PAIR (offset >> 32, offset),
+__LONG_LONG_PAIR (len >> 32, len));
+}
+weak_alias (fallocate, fallocate64)
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
new file mode 100644
index 000..f27735a
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate64.c
@@ -0,0 +1 @@
+/* See sysdeps/unix/sysv/linux/aarch64/ilp32/fallocate.c */
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
new file mode 100644
index 000..fb5b598
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate.c
@@ -0,0 +1 @@
+/* See sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncatei64.c */
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
new file mode 100644
index 000..bd0f5fe
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c
@@ -0,0 +1,4 @@
+#include 
+
+weak_alias (__ftruncate64, __ftruncate)
+weak_alias (__ftruncate64, ftruncate)
diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c 
b/sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c
new file mode 100644