public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv3 00/24] ILP32 support in ARM64
Date: Mon, 16 Feb 2015 15:40:54 +0100	[thread overview]
Message-ID: <2282163.7MvOQMXljz@wuerfel> (raw)
In-Reply-To: <20150213183706.GF23507@brightrain.aerifal.cx>

On Friday 13 February 2015 13:37:07 Rich Felker wrote:
> On Fri, Feb 13, 2015 at 05:33:46PM +0000, Catalin Marinas wrote:
> > > > > The data structure definition is a little bit fragile, as it depends on
> > > > > user space not using the __BIT_ENDIAN symbol in a conflicting way. So
> > > > > far we have managed to keep that outside of general purpose headers, but
> > > > > it should at least blow up in an obvious way if it does, rather than
> > > > > breaking silently.
> > > > > 
> > > > > I still think it's more practical to keep the zeroing in user space though.
> > > > > In that case, we keep defining __kernel_timespec64 with a 'typedef long
> > > > > long __kernel_snseconds_t', and it's up to the libc to either use
> > > > > __kernel_timespec64 as its timespec, or to define a C11-compliant
> > > > > timespec itself and zero out the bits before passing the data to the kernel.
> > > > 
> > > > The problem with doing this in user space is syscall(2). If we don't
> > > > allow it, then it's fine to do the padding in libc.
> > > 
> > > It's already the case that callers have to tiptoe around syscall(2)
> > > usage on a per-arch basis for silly things like the convention for
> > > passing 64-bit arguments on 32-bit archs, different arg orders to work
> > > around 64-bit alignment and issues with too many args, and various
> > > legacy issues.

Right. If one wants to use syscall(), they have to know exactly what the
kernel's calling conventions are, including knowing what the timespec
definition looks like, which could have a different size and padding
compared to the user space one.

> > I think there is another problem with sign-extending tv_nsec in libc.
> > The prototype for functions like clock_settime(2) take a const struct
> > timespec *. There isn't anything to prevent such structure being in a
> > read-only section, even though it is unlikely. So libc would have to
> > duplicate the structure rather than just sign-extending tv_nsec in
> > place.

Do we actually need sign-extend, or does zero-extend have the exact
same effect? For all I can tell, all invalid nanoseconds values
remain invalid, and the accepted values are unchanged regardless
of which type extension gets used.

> Yes, we already have to do this for x32 in musl. I'd rather not have
> to do the same for aarch64-ILP32.

This would of course be solved by using a 64-bit __kernel_snseconds_t
or snseconds_t, and I suspect other libc implementations would just do
that, when they are less strict about posix/c11 compliance compared
to musl.

If you don't mind the (slight) distraction, can you describe what your
plans are for handling 64-bit time_t on the existing 32-bit ABIs?
I'm involved in both the efforts to do that and the ilp32 code on
ARM, so it would be good for me to understand your plans for musl to
get the bigger picture. Specifically, which of these do you plan
to support (if you know already):

- using 64-bit time_t on future arm32/i386/... kernels
- using 64-bit time_t on existing arm32/i386/... kernels with native
  32-bit time_t
- using 32-bit time_t on future architectures that only support 64-bit
  time_t in the kernel
- running existing binaries with 32-bit time_t on a library with 64-bit
  time_t support, using symbol versioning
- compiling new code with 32-bit time_t against a library that supports
  both 32-bit and 64-bit time_t at runtime.
- building a libc for existing architectures but without support for
  running existing 32-bit time_t applications.

	Arnd

  reply	other threads:[~2015-02-16 14:40 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-03 21:18 [PATCHv3 00/24] ILP32 support in ARM64 Andrew Pinski
2014-09-03 21:18 ` [PATCH 01/24] ARM64: Force LP64 to compile the kernel Andrew Pinski
2014-09-03 21:18 ` [PATCH 02/24] ARM64: Rename COMPAT to AARCH32_EL0 in Kconfig Andrew Pinski
2014-09-03 21:18 ` [PATCH 03/24] ARM64: Change some CONFIG_COMPAT over to use CONFIG_AARCH32_EL0 instead Andrew Pinski
2014-09-03 21:18 ` [PATCH 04/24] ARM64:ILP32: Set kernel_long to long long so we can reuse most of the same syscalls as LP64 Andrew Pinski
2014-09-03 21:18 ` [PATCH 05/24] ARM64:UAPI: Set the correct __BITS_PER_LONG for ILP32 Andrew Pinski
2014-09-03 21:19 ` [PATCH 06/24] Allow for some signal structures to be the same between a 32bit ABI and the 64bit ABI Andrew Pinski
2014-09-03 21:19 ` [PATCH 07/24] ARM64:ILP32: Use the same size and layout of the signal structures for ILP32 as for LP64 Andrew Pinski
2014-09-18  3:41   ` zhangjian
2014-09-03 21:19 ` [PATCH 08/24] Allow a 32bit ABI to use the naming of the 64bit ABI syscalls to avoid confusion of not splitting the registers Andrew Pinski
2014-09-04 10:11   ` Arnd Bergmann
2014-10-01 12:42     ` Catalin Marinas
2014-10-01 14:00       ` Arnd Bergmann
2014-10-02 11:19         ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 09/24] ARM64:ILP32: Use the same syscall names as LP64 Andrew Pinski
2014-10-01 12:48   ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 10/24] ARM64: Introduce is_a32_task/is_a32_thread and TIF_AARCH32 and use them in the correct locations Andrew Pinski
2014-09-03 21:19 ` [PATCH 11/24] ARM64: Add is_ilp32_compat_task and is_ilp32_compat_thread Andrew Pinski
2014-09-03 21:19 ` [PATCH 12/24] ARM64:ILP32: COMPAT_USE_64BIT_TIME is true for ILP32 tasks Andrew Pinski
2014-09-03 21:19 ` [PATCH 13/24] ARM64:ILP32: Use the non compat HWCAP for ILP32 Andrew Pinski
2014-10-01 13:12   ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 14/24] ARM64:ILP32 use the standard start_thread for ILP32 so the processor state is not AARCH32 Andrew Pinski
2014-09-03 21:19 ` [PATCH 15/24] compat_binfmt_elf: coredump: Allow some core dump macros be overridden for compat Andrew Pinski
2014-09-03 21:19 ` [PATCH 16/24] ARM64:ILP32: Support core dump for ILP32 Andrew Pinski
2014-10-01 13:22   ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 17/24] ARM64: Add loading of ILP32 binaries Andrew Pinski
2014-09-03 21:19 ` [PATCH 18/24] ARM64: Add vdso for ILP32 and use it for the signal return Andrew Pinski
2014-09-10 14:31   ` Christopher Covington
2014-10-01 13:59   ` Catalin Marinas
2014-10-02 13:38   ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 19/24] ptrace: Allow compat to use the native siginfo Andrew Pinski
2014-10-02 14:13   ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 20/24] ARM64:ILP32: The native siginfo is used instead of the compat siginfo Andrew Pinski
2014-09-03 21:19 ` [PATCH 21/24] ARM64:ILP32: Use a seperate syscall table as a few syscalls need to be using the compat syscalls Andrew Pinski
2014-10-02 15:23   ` Catalin Marinas
2014-10-02 15:46   ` Catalin Marinas
2014-09-03 21:19 ` [PATCH 22/24] ARM64:ILP32: Fix signal return for ILP32 when the user modified the signal stack Andrew Pinski
2014-09-03 21:19 ` [PATCH 23/24] ARM64: Add ARM64_ILP32 to Kconfig Andrew Pinski
2014-09-03 21:19 ` [PATCH 24/24] Add documentation about ARM64 ILP32 ABI Andrew Pinski
2014-09-04 10:01   ` Arnd Bergmann
2014-10-02 15:52 ` [PATCHv3 00/24] ILP32 support in ARM64 Catalin Marinas
2015-02-10 18:13   ` Rich Felker
2015-02-11 17:39     ` Catalin Marinas
2015-02-11 19:05       ` [musl] " Szabolcs Nagy
2015-02-11 19:22         ` H.J. Lu
2015-02-11 19:50         ` arnd at arndb.de
2015-02-11 20:12           ` Rich Felker
     [not found]             ` <1383502854.512344.1423688575473.JavaMail.open-xchange@oxbaltgw09.schlund.de>
2015-02-11 21:09               ` arnd at arndb.de
2015-02-11 21:37               ` Rich Felker
2015-02-16 17:20                 ` Arnd Bergmann
2015-02-16 17:51                   ` Rich Felker
2015-02-16 19:38                     ` Arnd Bergmann
2015-02-12  8:12         ` Szabolcs Nagy
2015-02-12 17:07           ` Catalin Marinas
2015-02-11 19:21       ` Rich Felker
2015-02-12 18:17         ` Catalin Marinas
2015-02-12 18:59           ` arnd at arndb.de
2015-02-13 13:33             ` Catalin Marinas
2015-02-13 16:30               ` Rich Felker
2015-02-13 17:33                 ` Catalin Marinas
2015-02-13 18:37                   ` Rich Felker
2015-02-16 14:40                     ` Arnd Bergmann [this message]
2015-02-16 15:38                       ` Rich Felker
2015-02-16 16:54                         ` Arnd Bergmann
2015-02-11 18:33     ` H.J. Lu
2015-02-11 19:02       ` Rich Felker
2015-02-11 19:16         ` H.J. Lu
2015-02-11 19:25           ` Rich Felker
2015-02-11 19:34             ` H.J. Lu
2015-02-11 19:47               ` Rich Felker
2015-02-11 19:57                 ` H.J. Lu
2015-02-11 20:15                   ` Andy Lutomirski
2015-02-12 15:50                     ` Catalin Marinas
2015-02-12 16:13                       ` Rich Felker
2015-02-12 16:30                       ` H.J. Lu
2015-02-12 17:00                         ` Rich Felker
2015-02-11 21:41         ` Joseph Myers

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=2282163.7MvOQMXljz@wuerfel \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox