From: Arnd Bergmann <arnd@arndb.de>
To: linux-arm-kernel@lists.infradead.org
Cc: "Dr. Philipp Tomsich" <philipp.tomsich@theobroma-systems.com>,
Andreas Kraschitzer <andreas.kraschitzer@theobroma-systems.com>,
"Pinski, Andrew" <Andrew.Pinski@caviumnetworks.com>,
Catalin Marinas <catalin.marinas@arm.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Andrew Pinski <apinski@cavium.com>,
Kumar Sankaran <ksankaran@apm.com>,
Benedikt Huber <benedikt.huber@theobroma-systems.com>,
Christoph Muellner <christoph.muellner@theobroma-systems.com>
Subject: Re: [PATCH v4 00/24] ILP32 for ARM64
Date: Wed, 15 Apr 2015 14:25:52 +0200 [thread overview]
Message-ID: <2298575.yFbFBhqo4c@wuerfel> (raw)
In-Reply-To: <38FDDD2B-89C4-43C8-897D-A9DB6D023B7D@theobroma-systems.com>
On Tuesday 14 April 2015 16:54:22 Dr. Philipp Tomsich wrote:
> On 14 Apr 2015, at 16:07, Arnd Bergmann <arnd@arndb.de> wrote:
> >
> > I don't understand what you mean here, please elaborate. Why would an ABI that works
> > on aarch32 be wrong on aarch64-ilp32 user space when you are using the same header
> > files?
> AArch32 and AArch64/ILP32 are entirely different instruction set architectures. They have
> differently sized register files (AArch64 has about twice as many registers and each one is
> 64bits in size) and different register usage conventions.
>
> This affects other “implementation details” such as the ucontext, too.
> For the sake of simplicity, I’ll refer to it just as “register file” below.
>
> This means that we would end up with very distinct code paths for the “dependent” in tools
> (such as strace), if option (d) was used:
> LP64: AArch64 context + 64bit syscall interface
> ILP32: AArch64 context + 32bit syscall interface
> AArch32: AArch32 context + 32bit syscall interface
>
> If we could agree on option (b), things would be much simpler:
> LP64: AArch64 context + 64bit syscall interface
> ILP32: AArch64 context + 64bit syscall interface + ILP32 compat-syscalls
> AArch32: AArch32 context + 32bit syscall interface
>
> I.e. for all tools involved (whether it’s strace, gdb, etc.), LP64 and ILP32 can and should
> look very similar. After all, they differ in their sizeof(ptr_t) and sizeof(long), only.
> AArch32, on the other hand, is very dissimilar to AArch64… it’s a different architecture.
>
> But this is talking from a tools-perspective...
Ok, I see.
>From the kernel perspective, this is very different: The compat syscall
handling in the kernel is fixed to the aarch32 behavior, and in particular
ioctl (but also a few others) in the current patch set need to share that
syscall between both IPL32 implementations (you can't use the LP64 version).
This means any data structure that can get passed into ioctl needs to
share the exact same layout between all ILP32 ABIs, or it would be a bug
in the kernel until someone fixes the driver to handle all three data
structure formats.
I thought until today that this would be limited to ioctl arguments derived
from the __kernel_ulong_t derived types I mentioned (__kernel_size_t,
__kernel_time_t, __kernel_ptrdiff_t, __kernel_off_t, __kernel_clock_t,
__kernel_ino_t, ...), but the problem is actually bigger than that and also
concerns types that are different between the traditional arm32 types and
the widened asm-generic types (__kernel_uid_t, __kernel_gid_t, __kernel_mode_t,
__kernel_off_t, __kernel_ipc_pid_t).
If we use the generic definitions for all those types, we cannot use the
existing compat_sys_ioctl() system call. If we use the aarch32 definitions,
we also have to use the other compat_sys_* calls that aarch32 uses in place
of the native ones (though a lot of syscalls are not needed any more in
general).
Arnd
next prev parent reply other threads:[~2015-04-15 12:26 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-13 19:44 [PATCH v4 00/24] ILP32 for ARM64 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 01/24] arm64:ilp32: add documentation on the ILP32 ABI " Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 02/24] arm64: ensure the kernel is compiled for LP64 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 03/24] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 04/24] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 05/24] arm64:ilp32: expose 'kernel_long' as 'long long' for ILP32 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 06/24] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 07/24] arm64:ilp32: share signal structures between ILP32 and LP64 ABIs Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 08/24] arm64:ilp32: use 64bit syscall-names for ILP32 when passing 64bit registers Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 09/24] arm64:ilp32: use non-compat syscall names for ILP32 as for LP64 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 10/24] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 11/24] arm64:ilp32: add is_ilp32_compat_{task,thread} and TIF_32BIT_AARCH64 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 12/24] arm64:ilp32: COMPAT_USE_64BIT_TIME is true for ILP32 tasks Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 13/24] arm64:ilp32: share HWCAP between LP64 and ILP32 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 14/24] arm64:ilp32 use the native LP64 'start_thread' for ILP32 threads Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 15/24] arm64:ilp32: support core dump generation for ILP32 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 16/24] arm64: add support for starting ILP32 (ELFCLASS32) binaries Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 17/24] arm64:ilp32: add vdso-ilp32 and use for signal return Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 18/24] ptrace: Allow compat to use the native siginfo Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 19/24] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 20/24] arm64:ilp32: use compat-syscalls for msgsnd and msgrcv for ILP32 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 21/24] arm64:ilp32: use the native siginfo instead of the compat siginfo Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 22/24] arm64:ilp32: use compat for stack_t Philipp Tomsich
2015-05-05 0:03 ` Pinski, Andrew
2015-04-13 19:44 ` [PATCH v4 23/24] arm64:ilp32: change COMPAT_ELF_PLATFORM to report a a subplatform for ILP32 Philipp Tomsich
2015-04-13 19:44 ` [PATCH v4 24/24] arm64:ilp32: add ARM64_ILP32 to Kconfig Philipp Tomsich
2015-04-13 21:01 ` [PATCH v4 00/24] ILP32 for ARM64 Arnd Bergmann
2015-04-13 22:58 ` Dr. Philipp Tomsich
2015-04-14 9:40 ` Arnd Bergmann
[not found] ` <AC03A80E-49F8-4A08-9DDA-0B9F8B734F51@theobroma-systems.com>
2015-04-14 10:08 ` Arnd Bergmann
2015-04-14 10:45 ` Pinski, Andrew
2015-04-14 11:14 ` Arnd Bergmann
2015-04-14 11:50 ` Dr. Philipp Tomsich
2015-04-14 14:07 ` Arnd Bergmann
2015-04-14 15:00 ` Catalin Marinas
2015-04-14 22:28 ` Arnd Bergmann
2015-04-15 9:18 ` Dr. Philipp Tomsich
2015-04-15 10:01 ` Catalin Marinas
2015-04-15 15:15 ` Arnd Bergmann
2015-04-15 15:38 ` Catalin Marinas
2015-04-15 17:01 ` Dr. Philipp Tomsich
2015-04-15 17:22 ` Catalin Marinas
2015-04-15 22:25 ` Alexander Graf
2015-04-16 11:03 ` Catalin Marinas
2015-04-16 11:19 ` Dr. Philipp Tomsich
2015-04-16 11:33 ` Pinski, Andrew
2015-04-16 13:31 ` Catalin Marinas
2015-04-16 15:21 ` Arnd Bergmann
2015-04-17 9:01 ` Catalin Marinas
2015-04-17 13:17 ` Arnd Bergmann
2015-04-17 14:06 ` Alexander Graf
2015-04-17 14:46 ` Catalin Marinas
2015-04-17 15:15 ` Dr. Philipp Tomsich
2015-04-18 19:24 ` Arnd Bergmann
2015-05-04 10:29 ` Arnd Bergmann
2015-05-04 10:32 ` Dr. Philipp Tomsich
2015-05-04 14:43 ` Arnd Bergmann
2015-05-05 13:11 ` Arnd Bergmann
2015-04-17 15:49 ` Arnd Bergmann
2015-04-20 15:56 ` Catalin Marinas
2015-04-20 17:40 ` Arnd Bergmann
2015-04-20 14:37 ` Zhangjian (Bamvor)
2015-04-16 14:27 ` Catalin Marinas
[not found] ` <38FDDD2B-89C4-43C8-897D-A9DB6D023B7D@theobroma-systems.com>
2015-04-15 12:25 ` Arnd Bergmann [this message]
2015-04-14 11:51 ` Pinski, Andrew
2015-04-14 14:56 ` Catalin Marinas
2015-04-14 13:38 ` Catalin Marinas
2015-04-14 14:47 ` Catalin Marinas
2015-04-14 15:29 ` Dr. Philipp Tomsich
2015-04-14 16:55 ` Catalin Marinas
2015-04-15 10:31 ` Dr. Philipp Tomsich
2015-04-15 12:47 ` Arnd Bergmann
2015-04-15 12:42 ` Arnd Bergmann
2015-04-14 15:44 ` Arnd Bergmann
2015-04-15 11:22 ` Catalin Marinas
[not found] ` <721B7D5F-0A9A-45B7-8036-730ED54FB3AB@theobroma-systems.com>
2015-04-15 15:49 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2298575.yFbFBhqo4c@wuerfel \
--to=arnd@arndb.de \
--cc=Andrew.Pinski@caviumnetworks.com \
--cc=andreas.kraschitzer@theobroma-systems.com \
--cc=apinski@cavium.com \
--cc=benedikt.huber@theobroma-systems.com \
--cc=catalin.marinas@arm.com \
--cc=christoph.muellner@theobroma-systems.com \
--cc=ksankaran@apm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=philipp.tomsich@theobroma-systems.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).