Message ID | 1466485631-3532-23-git-send-email-ynorov@caviumnetworks.com |
---|---|
State | New |
Headers | show |
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.
On Tue, Jun 21, 2016 at 10:35:27AM +0000, 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 > joseph@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.
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/<some-descriptive-name>, where
<some-descriptive-name> 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.
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 0000000..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 + <http://www.gnu.org/licenses/>. */ + +#include <errno.h> +#include <fcntl.h> +#include <sysdep-cancel.h> + + +/* 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 0000000..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 0000000..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 0000000..bd0f5fe --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/ftruncate64.c @@ -0,0 +1,4 @@ +#include <sysdeps/unix/sysv/linux/arm/ftruncate64.c> + +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 index 0000000..b00ca27 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/llseek.c @@ -0,0 +1 @@ +#include <sysdeps/unix/sysv/linux/generic/wordsize-32/llseek.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c new file mode 100644 index 0000000..6e00863 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/lseek.c @@ -0,0 +1,36 @@ +/* Copyright (C) 2011-2016 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. + + 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/>. */ + +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> + +#include <sysdep.h> +#include <sys/syscall.h> + +off_t +__lseek (int fd, off_t offset, int whence) +{ + loff_t res; + int rc = INLINE_SYSCALL (_llseek, 5, fd, (off_t) (offset >> 32), + (off_t) offset, &res, whence); + return rc ?: res; +} +libc_hidden_def (__lseek) +weak_alias (__lseek, lseek) +strong_alias (__lseek, __libc_lseek) diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c new file mode 100644 index 0000000..813ab64 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/mmap.c @@ -0,0 +1 @@ +#include <sysdeps/unix/sysv/linux/arm/mmap.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c new file mode 100644 index 0000000..4430e6e --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise.c @@ -0,0 +1 @@ +#include <sysdeps/unix/sysv/linux/arm/posix_fadvise.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c new file mode 100644 index 0000000..596c6a1 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/posix_fadvise64.c @@ -0,0 +1,2 @@ +#define __NR_arm_fadvise64_64 __NR_fadvise64_64 +#include <sysdeps/unix/sysv/linux/arm/posix_fadvise64.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c new file mode 100644 index 0000000..96b7ccb --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/pread.c @@ -0,0 +1 @@ +/* See sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c new file mode 100644 index 0000000..7637028 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/pread64.c @@ -0,0 +1,5 @@ +#include <sysdeps/unix/sysv/linux/arm/pread64.c> + +strong_alias (__libc_pread64, __libc_pread) +strong_alias (__libc_pread64, __pread) +weak_alias (__libc_pread64, pread) diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c new file mode 100644 index 0000000..ddadc61 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite.c @@ -0,0 +1 @@ +/* See sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c new file mode 100644 index 0000000..2089a05 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/pwrite64.c @@ -0,0 +1,5 @@ +#include <sysdeps/unix/sysv/linux/arm/pwrite64.c> + +weak_alias (__libc_pwrite64, __libc_pwrite) +weak_alias (__libc_pwrite64, __pwrite) +weak_alias (__libc_pwrite64, pwrite) diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c new file mode 100644 index 0000000..80170c3 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/readahead.c @@ -0,0 +1 @@ +#include <sysdeps/unix/sysv/linux/arm/readahead.c> diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c new file mode 100644 index 0000000..23548a5 --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate.c @@ -0,0 +1 @@ +/* See sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c */ diff --git a/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c new file mode 100644 index 0000000..56cb37f --- /dev/null +++ b/sysdeps/unix/sysv/linux/aarch64/ilp32/truncate64.c @@ -0,0 +1,4 @@ +#include <sysdeps/unix/sysv/linux/arm/truncate64.c> + +weak_alias (truncate64, __truncate) +weak_alias (truncate64, truncate)