Thread (58 messages) 58 messages, 12 authors, 2019-07-09

[PATCH v9 00/24] ILP32 for ARM64

From: arnd@arndb.de (Arnd Bergmann)
Date: 2018-10-14 19:53:42
Also in: linux-api, linux-arch, linux-doc, lkml

On Sat, Oct 13, 2018 at 4:07 AM Eugene Syromiatnikov [off-list ref] wrote:
On Wed, Oct 10, 2018 at 03:39:07PM +0100, Szabolcs Nagy wrote:
quoted
On 10/10/18 15:10, Eugene Syromiatnikov wrote:
quoted
 * 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.
but that's necessarily the case for all ilp32 abis:
the userspace syscall function receives 32bit
arguments so even if the kernel abi takes 64bit
args you cannot use that from c code. (the libc
does not even know which args should be sign or
zero extended.)
glibc's syscall() prototype has kernel_ulong_t as its arguments (more
specifically, to __syscall_ulong_t, which is 64-bit wide on x32; it
should also have kernel_long_t as its return type instead of long,
but that's another story), so it works perfectly fine in case of x32.
quoted
process_vm_readv/writev is limited by the ilp32
iovec struct, not by the syscall arguments.
Right, on x32/N32 this issue is worked around by the usage of the respective
x86_64/N64 call, and it looks like another thing that is impossible
with AArch64 ilp32.
quoted
ptrace is specified to take void* addr argument,
and void* is 32bit on all ilp32 targets.
so again on the c language level there is no
way around the 32bit limitation.
Which is an issue.
I have no idea why you think this is a problem specific to aarch64-ilp32:
If we want to be able to debug 64-bit tasks from a 32-bit task on any
architecture that has compat mode, we should solve it once and
extend the ptrace interface to allow it on *all* of them. We certainly
don't need /more/ special cases for the x32 hack, there should really
be fewer of them.

      Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help