linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: ynorov@caviumnetworks.com (Yury Norov)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v9 00/24] ILP32 for ARM64
Date: Sat, 13 Oct 2018 13:43:12 +0000	[thread overview]
Message-ID: <20181013134303.GA12721@yury-thinkpad> (raw)
In-Reply-To: <20181013093411.o3id6yzkspsxr5jt@mbp>

On Sat, Oct 13, 2018 at 10:34:11AM +0100, Catalin Marinas wrote:
> 
> Lines: 73
> 
> External Email
> 
> On Sat, Oct 13, 2018 at 04:14:16AM +0200, Eugene Syromiatnikov wrote:
> > On Wed, Oct 10, 2018 at 04:36:56PM +0100, Catalin Marinas wrote:
> > > On Wed, Oct 10, 2018 at 04:10:21PM +0200, Eugene Syromiatnikov wrote:
> > > > I have some questions regarding AArch64 ILP32 implementation for which I
> > > > failed to find an answer myself:
> > > >  * How ptrace() tracer is supposed to distinguish between ILP32 and LP64
> > > >    tracees? For MIPS N32 and x32 this is possible based on syscall
> > > >    number, but for AArch64 ILP32 I do not see such a sign. There's also
> > > >    ARM_ip is employed for signalling entering/exiting, I wonder whether
> > > >    it's possible to employ it also for signalling tracee's personality.
> > >
> > > With the current implementation, I don't think you can distinguish. From
> > > the kernel perspective, the register set is the same. What is the
> > > use-case for this?
> >
> > Err, a ptrace()-based tracer trying to trace a process, for example?
> 
> I first thought it wouldn't matter for ptrace-based tracers since the
> syscall numbers are (mostly) the same. But the arguments layout in
> register is indeed different, so I see your point now about having to
> distinguish.
> 
> > > We could add a new regset to expose the ILP32 state (NT_ARM_..., I can't
> > > think of a name now but probably not PER* as this implies PER_LINUX_...
> > > which is independent from TIF_32BIT_*).
> >
> > So that would require an additional ptrace() call on each syscall stop,
> > is that correct?
> 
> The ILP32 state does not change at run-time, so it could only do a
> ptrace() call once and save the information. No need to re-read it on
> each syscall stop.
> 
> We could set a high bit in the syscall number reported to the ptrace
> caller (though not changing the syscall ABI) but I haven't thought of
> other consequences. For example, can the ptrace caller change the
> syscall number?

I believe, /proc/PID/auxv is enough to distinguish between arm64, ilp32
and aarch32 ABis. If no, I think it's better to do it there.

I don't have ILP32 machine available at the moment, but I'll check it soon. 

> > > >  * What's the reasoning behind capping syscall arguments to 32 bit? x32
> > > >    and MIPS N32 do not have such a restriction (and do not need special
> > > >    wrappers for syscalls that pass 64-bit values as a result, except
> > > >    when they do,  as it is the case for preadv2 on x32); moreover, that
> > > >    would lead to insurmountable difficulties for AArch64 ILP32 tracers
> > > >    that try to trace LP64 tracees, as it would be impossible to pass
> > > >    64-bit addresses to process_vm_{read,write} or ptrace PEEK/POKE.
> > >
> > > We've attempted in earlier versions to allow a mix of 32 and 64-bit
> > > register values from ILP32 but it got pretty complicated. The entry code
> > > would need to know which registers need zeroing of the top 32-bit
> >
> > If kernel specifies 64-bit wide registers for syscalls, then it's the
> > caller's (libc's) responsibility to properly sign-extend arguments when
> > needed, and glibc, for example, already has proper type definitions that
> > aimed to handle this.
> 
> We tried, see my other reply.

A couple of links to recall the story:
https://www.spinics.net/lists/linux-s390/msg11593.html
http://linux-kernel.2935.n7.nabble.com/RFC6-PATCH-v6-00-21-ILP32-for-ARM64-td1345105.html

Cover-letter of the series has links to previous discussions.

I would also notice that even if we pass 64-bit parameters in a single
register, we cannot avoid using the compat layer. It looks more natural
not to split the 64-bit register, but from performance point of view
there is almost no difference, either we split registers or not (2.6%
for empty syscall, as I measured). And the cost of overcomplication was
considered too much. So we chose to stick to more standard compat layer
and gain in maintainability. 

Yury

  reply	other threads:[~2018-10-13 13:43 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-16  8:18 [PATCH v9 00/24] ILP32 for ARM64 Yury Norov
2018-05-16  8:18 ` [PATCH 01/24] arm64: signal: Make parse_user_sigframe() independent of rt_sigframe layout Yury Norov
2018-05-16  8:18 ` [PATCH 02/24] ptrace: Add compat PTRACE_{G,S}ETSIGMASK handlers Yury Norov
2018-05-16  8:18 ` [PATCH 03/24] compat ABI: use non-compat openat and open_by_handle_at variants Yury Norov
2018-05-16  8:18 ` [PATCH 04/24] 32-bit userspace ABI: introduce ARCH_32BIT_OFF_T config option Yury Norov
2018-06-08 17:32   ` Catalin Marinas
2018-06-08 22:33     ` Palmer Dabbelt
2018-06-09  7:43       ` Yury Norov
2018-06-09 21:13       ` Adam Borowski
2018-06-09  7:42     ` Yury Norov
2018-06-11  7:48       ` Arnd Bergmann
2018-06-11 11:27         ` Yury Norov
2018-06-25  6:19           ` Yury Norov
2018-08-02 18:30             ` Palmer Dabbelt
2018-05-16  8:18 ` [PATCH 06/24] thread: move thread bits accessors to separated file Yury Norov
2018-05-16  8:18 ` [PATCH 07/24] arm64: ilp32: add documentation on the ILP32 ABI for ARM64 Yury Norov
2018-05-23 14:06   ` Pavel Machek
2018-05-24 12:15     ` Yury Norov
2018-05-24 12:24       ` Dr. Philipp Tomsich
2018-05-16  8:18 ` [PATCH 08/24] arm64: rename COMPAT to AARCH32_EL0 in Kconfig Yury Norov
2018-05-16  8:18 ` [PATCH 09/24] arm64: rename functions that reference compat term Yury Norov
2018-05-16  8:18 ` [PATCH 10/24] arm64: uapi: set __BITS_PER_LONG correctly for ILP32 and LP64 Yury Norov
2018-05-16  8:18 ` [PATCH 11/24] arm64: introduce is_a32_task and is_a32_thread (for AArch32 compat) Yury Norov
2018-05-16  8:18 ` [PATCH 12/24] arm64: ilp32: add is_ilp32_compat_{task, thread} and TIF_32BIT_AARCH64 Yury Norov
2018-05-16  8:18 ` [PATCH 13/24] arm64: introduce binfmt_elf32.c Yury Norov
2018-05-16  8:18 ` [PATCH 14/24] arm64: change compat_elf_hwcap and compat_elf_hwcap2 prefix to a32 Yury Norov
2018-05-16  8:19 ` [PATCH 15/24] arm64: ilp32: introduce binfmt_ilp32.c Yury Norov
2018-05-16  8:19 ` [PATCH 16/24] arm64: ilp32: share aarch32 syscall handlers Yury Norov
2018-05-16  8:19 ` [PATCH 17/24] arm64: ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it Yury Norov
2018-05-16  8:19 ` [PATCH 18/24] arm64: signal: share lp64 signal structures and routines to ilp32 Yury Norov
2018-05-16  8:19 ` [PATCH 19/24] arm64: signal32: move ilp32 and aarch32 common code to separated file Yury Norov
2018-05-16  8:19 ` [PATCH 20/24] arm64: ilp32: introduce ilp32-specific sigframe and ucontext Yury Norov
2018-05-16  8:19 ` [PATCH 21/24] arm64: ptrace: handle ptrace_request differently for aarch32 and ilp32 Yury Norov
2018-05-16  8:19 ` [PATCH 22/24] arm64:ilp32: add vdso-ilp32 and use for signal return Yury Norov
2019-09-30  7:24   ` Andreas Schwab
2018-05-16  8:19 ` [PATCH 23/24] arm64:ilp32: add ARM64_ILP32 to Kconfig Yury Norov
2018-05-16  8:19 ` [PATCH 24/24] arm64: ilp32: Make the Kconfig option default y Yury Norov
2018-07-24 17:39 ` [PATCH v9 00/24] ILP32 for ARM64 Yury Norov
2018-07-25  9:48   ` Andreas Schwab
2018-10-10 14:10   ` Eugene Syromiatnikov
2018-10-10 14:18     ` Arnd Bergmann
2018-10-10 14:39     ` Szabolcs Nagy
2018-10-13  2:07       ` Eugene Syromiatnikov
2018-10-13  9:20         ` Catalin Marinas
2018-10-14 19:53         ` Arnd Bergmann
2018-10-10 15:36     ` Catalin Marinas
2018-10-13  2:14       ` Eugene Syromiatnikov
2018-10-13  9:34         ` Catalin Marinas
2018-10-13 13:43           ` Yury Norov [this message]
2018-10-13 16:54           ` Andy Lutomirski
2018-11-13 10:04   ` Andreas Schwab
2018-11-13 10:57     ` Yury Norov
2018-11-15  0:51       ` Catalin Marinas
2018-11-15  8:54         ` Andreas Schwab
2018-11-15 20:27           ` Yury Norov
2018-11-19  9:57             ` Andreas Schwab
2018-10-13 19:36 ` Andy Lutomirski
2018-10-14 19:49   ` Arnd Bergmann
2018-10-18 11:14     ` Catalin Marinas
2018-11-19 21:29 ` Yury Norov
2019-01-07 15:50 ` Yuri Norov
     [not found]   ` <DC9A951E-B638-4820-8499-02D5322E7DF7@amacapital.net>
2019-01-07 20:43     ` Yuri Norov
2019-01-08 21:18   ` [PATCH] arm64: introduce AUDIT_ARCH_AARCH64ILP32 for ilp32 Yuri Norov
2019-03-05 20:56 ` [PATCH v9 00/24] ILP32 for ARM64 Yury Norov
2019-05-08 22:59 ` Yury Norov
2019-05-08 23:10   ` Yury Norov
2019-05-13  8:48   ` Andreas Schwab
2019-05-13 20:16     ` [EXT] " Yuri Norov
     [not found]       ` <20190514104311.GA24708@rei>
2019-05-14 23:01         ` [LTP] " Yury Norov
2019-05-14 23:41         ` Yury Norov
2019-07-09 22:42 ` Yury Norov
  -- strict thread matches above, loose matches on Subject: below --
2018-05-15 19:11 Yury Norov
2018-05-15 19:40 ` Yury Norov

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=20181013134303.GA12721@yury-thinkpad \
    --to=ynorov@caviumnetworks.com \
    --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 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).