linux/arch/sh
Rich Felker bbe6c77857 sh: make sigcontext definition consistent across fpu/nofpu models
Up until now, the SH version of the sigcontext structure, and thus
mcontext_t/ucontext_t, varied depending on the cpu model the kernel
was built to run on. SH-4 (including SH-4A) and SH-2A used the form
with space for FPU registers, and everything else used a form that
omitted them.

From a userspace perspective, however, the structure layout must be
fixed for a given ABI. Traditionally glibc and uClibc used the form
with space for FPU registers only when __SH4__ (which implies FPU;
__SH4_NOFPU__ is the predefined macro for SH-4 but with no-FPU ABI)
was defined. As a result:

- SH-4 no-FPU programs never matched kernel sigcontext.

- SH-3 programs did not match kernel sigcontext if run on SH-4,
  despite an apparent intent that they be compatible.

- SH-2 and SH-2A programs (using uClibc) did not match kernel
  sigcontext if run on SH-2A.

The mismatch might seem inconsequential because it occurs at the end
of the sigcontext structure, but sigcontext is embedded as uc_mcontext
in ucontext_t, where it is followed by uc_sigmask, an important member
for signal handlers to have access to. In particular, access to
uc_sigmask is necessary for a correct implementation of thread
cancellation.

It would be possible to retain support for both sigcontext ABIs via a
personality mechanism, but since many configurations were already
broken and nobody noticed, and since there are very few if any users
of legacy no-FPU models anymore, I have opted to just remove the
variation and always include space for the FPU registers in
sigcontext. This was proposed and discussed on a thread "SH sigcontext
ABI is broken" cross-posted to linux-sh, libc-alpha, and musl libc
lists in June 2015, and no objections were raised.

Signed-off-by: Rich Felker <dalias@libc.org>
2016-07-31 03:33:32 +00:00
..
boards sh: add support for linking a builtin device tree blob in the kernel 2016-07-31 03:33:32 +00:00
boot sh: add support for linking a builtin device tree blob in the kernel 2016-07-31 03:33:32 +00:00
cchips genirq: Remove irq argument from irq flow handlers 2015-09-16 15:47:51 +02:00
configs arch/defconfig: remove CONFIG_RESOURCE_COUNTERS 2016-05-23 17:04:14 -07:00
drivers
include sh: make sigcontext definition consistent across fpu/nofpu models 2016-07-31 03:33:32 +00:00
kernel sh: add support for linking a builtin device tree blob in the kernel 2016-07-31 03:33:32 +00:00
lib sh: New gcc support 2016-03-17 19:45:44 +00:00
lib64
math-emu
mm mm: do not pass mm_struct into handle_mm_fault 2016-07-26 16:19:19 -07:00
oprofile
tools
Kconfig sh: add support for linking a builtin device tree blob in the kernel 2016-07-31 03:33:32 +00:00
Kconfig.cpu
Kconfig.debug
Makefile sh: add support for linking a builtin device tree blob in the kernel 2016-07-31 03:33:32 +00:00