From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 12/20] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it
Date: Mon, 21 Dec 2015 23:13:33 +0100 [thread overview]
Message-ID: <201512212313.34114.arnd@arndb.de> (raw)
In-Reply-To: <4753CD2F-914D-44D5-BD18-8DF94068315D@theobroma-systems.com>
On Monday 21 December 2015, Dr. Philipp Tomsich wrote:
>
> > On 18 Dec 2015, at 13:47, Arnd Bergmann <arnd@arndb.de> wrote:
> >
> >> 3. Follow the PCS up to glibc but always pass syscall arguments in W
> >> registers, like AArch32 compat support (the least preferred option,
> >> the only advantage is a single wrapper for all syscalls but it would
> >> be doing unnecessary zeroing even for syscalls where it isn't needed)
> >
> > This would mean we cannot pass 64-bit arguments in registers, right?
>
> Note that there?s no 32bit registers (the ?w?-form always refers to the lower
> 32bits of a 64bit register, with implicit zero-extension)? and load/store
> instructions always use the full base-register (?x?-form) for address calculation.
> I.e. a load/store would inadvertently pickup ?random garbage? in the upper
> 32bits, if no explicit zero-extension is applied.
>
> In other words: all zero-extensions for 32bit arguments should be explicit
> on the kernel side.
I think that is what Catalin meant with the single wrapper in the description:
the kernel always zeroes out the upper 32 bits in the initial trap, and then
we only need to do sign-extensions for the few cases that need it, and pass 64-bit
arguments in two lower halves. In contrast, approach 1 adds a separate wrapper
for each syscall that takes care of both sign-extending where necessary and
zero-extending all othe 32-bit arguments but not the 64-bit arguments.
Arnd
WARNING: multiple messages have this Message-ID (diff)
From: Arnd Bergmann <arnd@arndb.de>
To: "Dr. Philipp Tomsich" <philipp.tomsich@theobroma-systems.com>
Cc: "Catalin Marinas" <catalin.marinas@arm.com>,
"Andrew Pinski" <pinskia@gmail.com>,
"Joseph S. Myers" <joseph@codesourcery.com>,
"Kapoor, Prasun" <Prasun.Kapoor@caviumnetworks.com>,
broonie@kernel.org, "Nathan Lynch" <Nathan_Lynch@mentor.com>,
LKML <linux-kernel@vger.kernel.org>,
"Alexander Graf" <agraf@suse.de>,
"Alexey Klimov" <klimov.linux@gmail.com>,
"Yury Norov" <ynorov@caviumnetworks.com>,
"Jan Dakinevich" <jan.dakinevich@gmail.com>,
"Andrew Pinski" <apinski@cavium.com>,
"David Daney" <ddaney.cavm@gmail.com>,
"Andreas Schwab" <schwab@suse.de>,
"Zhangjian (Bamvor)" <bamvor.zhangjian@huawei.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"Christoph Müllner" <christoph.muellner@theobroma-systems.com>,
"Marcus Shawcroft" <Marcus.Shawcroft@arm.com>
Subject: Re: [PATCH v6 12/20] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it
Date: Mon, 21 Dec 2015 23:13:33 +0100 [thread overview]
Message-ID: <201512212313.34114.arnd@arndb.de> (raw)
In-Reply-To: <4753CD2F-914D-44D5-BD18-8DF94068315D@theobroma-systems.com>
On Monday 21 December 2015, Dr. Philipp Tomsich wrote:
>
> > On 18 Dec 2015, at 13:47, Arnd Bergmann <arnd@arndb.de> wrote:
> >
> >> 3. Follow the PCS up to glibc but always pass syscall arguments in W
> >> registers, like AArch32 compat support (the least preferred option,
> >> the only advantage is a single wrapper for all syscalls but it would
> >> be doing unnecessary zeroing even for syscalls where it isn't needed)
> >
> > This would mean we cannot pass 64-bit arguments in registers, right?
>
> Note that there’s no 32bit registers (the ‘w’-form always refers to the lower
> 32bits of a 64bit register, with implicit zero-extension)… and load/store
> instructions always use the full base-register (‘x’-form) for address calculation.
> I.e. a load/store would inadvertently pickup “random garbage” in the upper
> 32bits, if no explicit zero-extension is applied.
>
> In other words: all zero-extensions for 32bit arguments should be explicit
> on the kernel side.
I think that is what Catalin meant with the single wrapper in the description:
the kernel always zeroes out the upper 32 bits in the initial trap, and then
we only need to do sign-extensions for the few cases that need it, and pass 64-bit
arguments in two lower halves. In contrast, approach 1 adds a separate wrapper
for each syscall that takes care of both sign-extending where necessary and
zero-extending all othe 32-bit arguments but not the 64-bit arguments.
Arnd
next prev parent reply other threads:[~2015-12-21 22:13 UTC|newest]
Thread overview: 156+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-15 21:42 [RFC3 PATCH v6 00/20] ILP32 for ARM64 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 01/20] arm64: ilp32: add documentation on the ILP32 ABI " Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 02/20] arm64: ensure the kernel is compiled for LP64 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 03/20] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-17 11:23 ` Catalin Marinas
2015-12-17 11:23 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 04/20] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-23 14:15 ` Yury Norov
2015-12-23 14:15 ` Yury Norov
2015-12-28 8:43 ` > diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile Bamvor Jian Zhang
2015-12-28 8:43 ` Bamvor Jian Zhang
2015-12-28 9:01 ` [PATCH v6 04/20] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Zhangjian (Bamvor)
2015-12-28 9:01 ` Zhangjian (Bamvor)
2015-12-29 12:27 ` Yury Norov
2015-12-29 12:27 ` Yury Norov
2015-12-29 14:59 ` [PATCH] arm64: compat: fix wrong dependency Bamvor Jian Zhang
2015-12-29 14:59 ` Bamvor Jian Zhang
2015-12-29 13:12 ` [PATCH v6 04/20] arm64: change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Yury Norov
2015-12-29 13:12 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 05/20] arm64:uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 06/20] thread: move thread bits accessors to separated file Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 07/20] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-17 11:38 ` Catalin Marinas
2015-12-17 11:38 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 08/20] arm64: ilp32: add is_ilp32_compat_{task, thread} and TIF_32BIT_AARCH64 Yury Norov
2015-12-15 21:42 ` [PATCH v6 08/20] arm64: ilp32: add is_ilp32_compat_{task,thread} " Yury Norov
2015-12-17 11:41 ` [PATCH v6 08/20] arm64: ilp32: add is_ilp32_compat_{task, thread} " Catalin Marinas
2015-12-17 11:41 ` Catalin Marinas
2015-12-18 14:11 ` Yury Norov
2015-12-18 14:11 ` Yury Norov
2015-12-18 14:44 ` Yury Norov
2015-12-18 14:44 ` Yury Norov
2015-12-21 17:42 ` Catalin Marinas
2015-12-21 17:42 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 09/20] arm64:ilp32: share HWCAP between LP64 and ILP32 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-16 15:54 ` Arnd Bergmann
2015-12-16 15:54 ` Arnd Bergmann
2015-12-16 16:58 ` Catalin Marinas
2015-12-16 16:58 ` Catalin Marinas
2015-12-16 17:19 ` Catalin Marinas
2015-12-16 17:19 ` Catalin Marinas
2015-12-16 19:17 ` Arnd Bergmann
2015-12-16 19:17 ` Arnd Bergmann
2015-12-17 10:54 ` Catalin Marinas
2015-12-17 10:54 ` Catalin Marinas
2015-12-17 13:56 ` Arnd Bergmann
2015-12-17 13:56 ` Arnd Bergmann
2015-12-15 21:42 ` [PATCH v6 10/20] arm64:ilp32 use the native LP64 'start_thread' for ILP32 threads Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-16 15:50 ` Arnd Bergmann
2015-12-16 15:50 ` Arnd Bergmann
2015-12-18 13:57 ` Yury Norov
2015-12-18 13:57 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 11/20] arm64:ilp32: support core dump generation for ILP32 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-17 14:05 ` Catalin Marinas
2015-12-17 14:05 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 12/20] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-16 16:07 ` Arnd Bergmann
2015-12-16 16:07 ` Arnd Bergmann
2015-12-17 18:27 ` Catalin Marinas
2015-12-17 18:27 ` Catalin Marinas
2015-12-17 20:10 ` Arnd Bergmann
2015-12-17 20:10 ` Arnd Bergmann
2015-12-17 20:14 ` Andrew Pinski
2015-12-17 20:14 ` Andrew Pinski
2015-12-17 20:50 ` Arnd Bergmann
2015-12-17 20:50 ` Arnd Bergmann
2016-01-05 15:26 ` Yury Norov
2016-01-05 15:26 ` Yury Norov
2016-01-05 21:12 ` Arnd Bergmann
2016-01-05 21:12 ` Arnd Bergmann
2016-01-06 17:10 ` Catalin Marinas
2016-01-06 17:10 ` Catalin Marinas
2016-01-07 14:13 ` Arnd Bergmann
2016-01-07 14:13 ` Arnd Bergmann
2016-01-07 15:42 ` Yury Norov
2016-01-07 15:42 ` Yury Norov
2016-01-07 17:23 ` Catalin Marinas
2016-01-07 17:23 ` Catalin Marinas
2015-12-18 11:42 ` Catalin Marinas
2015-12-18 11:42 ` Catalin Marinas
2015-12-18 12:47 ` Arnd Bergmann
2015-12-18 12:47 ` Arnd Bergmann
2015-12-21 18:31 ` Catalin Marinas
2015-12-21 18:31 ` Catalin Marinas
2015-12-21 22:19 ` Arnd Bergmann
2015-12-21 22:19 ` Arnd Bergmann
2015-12-21 18:39 ` Dr. Philipp Tomsich
2015-12-21 18:39 ` Dr. Philipp Tomsich
2015-12-21 22:13 ` Arnd Bergmann [this message]
2015-12-21 22:13 ` Arnd Bergmann
2015-12-21 22:31 ` Arnd Bergmann
2015-12-21 22:31 ` Arnd Bergmann
2015-12-23 18:31 ` Yury Norov
2015-12-23 18:31 ` Yury Norov
2015-12-23 21:48 ` Arnd Bergmann
2015-12-23 21:48 ` Arnd Bergmann
2015-12-15 21:42 ` [PATCH v6 13/20] arm64: ilp32: share aarch32 syscall wrappers to ilp32 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-17 14:38 ` Andreas Schwab
2015-12-17 14:38 ` Andreas Schwab
2015-12-18 13:49 ` Yury Norov
2015-12-18 13:49 ` Yury Norov
2015-12-22 12:25 ` Catalin Marinas
2015-12-22 12:25 ` Catalin Marinas
2015-12-22 21:44 ` Arnd Bergmann
2015-12-22 21:44 ` Arnd Bergmann
2015-12-23 13:37 ` Catalin Marinas
2015-12-23 13:37 ` Catalin Marinas
2015-12-23 20:41 ` Arnd Bergmann
2015-12-23 20:41 ` Arnd Bergmann
2015-12-30 17:29 ` Yury Norov
2015-12-30 17:29 ` Yury Norov
2015-12-30 22:36 ` Arnd Bergmann
2015-12-30 22:36 ` Arnd Bergmann
2015-12-23 4:21 ` Yury Norov
2015-12-23 4:21 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 14/20] arm64: signal: wrap struct ucontext, fp and lr with struct sigframe Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 15/20] arm64: signal: move ilp32 and lp64 common code to separated file Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-16 16:08 ` Arnd Bergmann
2015-12-16 16:08 ` Arnd Bergmann
2015-12-18 13:48 ` Yury Norov
2015-12-18 13:48 ` Yury Norov
2015-12-18 14:09 ` Arnd Bergmann
2015-12-18 14:09 ` Arnd Bergmann
2015-12-22 17:11 ` Catalin Marinas
2015-12-22 17:11 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 16/20] arm64: signal32: move ilp32 and aarch32 " Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-22 14:29 ` Catalin Marinas
2015-12-22 14:29 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 17/20] arm64: ilp32: introduce ilp32-specific handlers for sigframe Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-22 17:08 ` Catalin Marinas
2015-12-22 17:08 ` Catalin Marinas
2015-12-15 21:42 ` [PATCH v6 18/20] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 19/20] arm64:ilp32: change COMPAT_ELF_PLATFORM to report a a subplatform for ILP32 Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-15 21:42 ` [PATCH v6 20/20] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2015-12-15 21:42 ` Yury Norov
2015-12-16 16:24 ` [RFC3 PATCH v6 00/20] ILP32 for ARM64 Arnd Bergmann
2015-12-16 16:24 ` Arnd Bergmann
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=201512212313.34114.arnd@arndb.de \
--to=arnd@arndb.de \
--cc=linux-arm-kernel@lists.infradead.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.