glibc/sysdeps/unix/sysv/linux
Adhemerval Zanella b3778c01b7 sparc: Move sigreturn stub to assembly
It seems that some gcc versions might generates a stack frame for the
sigreturn stub requires on sparc signal handling.  For instance:

  $ cat test.c
  #define _GNU_SOURCE
  #include <sys/syscall.h>

  __attribute__ ((__optimize__ ("-fno-stack-protector")))
  void
  __sigreturn_stub (void)
  {
    __asm__ ("mov %0, %%g1\n\t"
            "ta  0x10\n\t"
            : /* no outputs */
            : "i" (SYS_rt_sigreturn));
  }
  $ gcc -v
  [...]
  gcc version 9.2.1 20200224 (Debian 9.2.1-30)
  $ gcc -O2 -m64 test.c -S -o -
  [...]
    __sigreturn_stub:
          save    %sp, -176, %sp
  #APP
  ! 9 "t.c" 1
          mov 101, %g1
          ta  0x10

  ! 0 "" 2
  #NO_APP
          .size   __sigreturn_stub, .-__sigreturn_stub

As indicated by kernel developers [1], the sigreturn stub can not change
the register window or the stack pointer since the kernel has setup the
restore frame at a precise location relative to the stack pointer when
the stub is invoked.

I tried to play with some compiler flags and even with _Noreturn and
__builtin_unreachable after the asm does not help (and Sparc does not
support naked functions).

To avoid similar issues, as the stack-protector support also have
stumbled, this patch moves the implementation of the sigreturn stubs to
assembly.

Checked on sparcv9-linux-gnu and sparc64-linux-gnu with gcc 9.2.1
and gcc 7.5.0.

[1] https://lkml.org/lkml/2016/5/27/465

(cherry picked from commit b33e946fbb)
2020-03-24 08:48:45 -03:00
..
aarch64 nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
alpha alpha: force old OSF1 syscalls for getegid, geteuid and getppid [BZ #24986] 2019-09-14 20:08:02 +02:00
arm nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
bits Don't use a custom wrapper macro around __has_include (bug 25189). 2019-11-22 13:09:01 +01:00
csky nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
generic Break lines before not after operators, batch 4. 2019-03-07 20:20:25 +00:00
hppa hppa: Align __clone stack argument to 8 bytes (Bug 25066) 2020-02-05 22:13:40 +01:00
i386 nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
ia64 nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
include
m68k nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
microblaze microblaze: Avoid clobbering register parameters in syscall 2020-02-16 15:16:10 +01:00
mips mips: Fix argument passing for inlined syscalls on Linux [BZ #25523] 2020-02-16 11:44:25 +01:00
net
netash
netatalk
netax25
neteconet
netinet
netipx
netiucv
netpacket
netrom
netrose
nfs
nios2 nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
powerpc Restore r31 setting in powerpc32 swapcontext. 2019-07-30 14:05:11 +00:00
riscv riscv: Avoid clobbering register parameters in syscall 2020-02-16 15:16:50 +01:00
s390 login: Add nonstring attributes to struct utmp, struct utmpx [BZ #24899] 2020-01-17 13:56:00 +01:00
scsi
sh nptl: Add POSIX-proposed pthread_mutex_clocklock 2019-07-12 13:36:25 +00:00
sparc sparc: Move sigreturn stub to assembly 2020-03-24 08:48:45 -03:00
sys Linux: Deprecate <sys/sysctl.h> and sysctl 2019-06-12 14:32:08 +02:00
wordsize-64
x86 nptl: Rename lll_timedlock to lll_clocklock and add clockid parameter 2019-07-12 13:36:25 +00:00
x86_64 rtld: Check __libc_enable_secure before honoring LD_PREFER_MAP_32BIT_EXEC (CVE-2019-19126) [BZ #25204] 2019-11-22 13:09:23 +01:00
Implies
Makefile Add nocancel version of pread64() 2020-01-17 13:56:43 +01:00
Versions Add nocancel version of pread64() 2020-01-17 13:56:43 +01:00
_G_config.h
_exit.c
a.out.h
accept.c
accept4.c
access.c
adjtime.c
aio_misc.h
aio_sigqueue.c
alphasort64.c
arch-fork.h
bind.c
check_native.c
check_pf.c
clock.c
clock_getcpuclockid.c
clock_getres.c
clock_gettime.c
clock_nanosleep.c
clock_settime.c
close.c
close_nocancel.c
cmsg_nxthdr.c
configure
configure.ac
connect.c
copy_file_range.c io: Remove copy_file_range emulation [BZ #24744] 2019-06-28 09:39:21 +02:00
creat.c
creat64.c
createthread.c
default-sched.h
device-nrs.h
dl-brk.c
dl-execstack.c
dl-fxstatat64.c
dl-getcwd.c
dl-librecon.h
dl-openat64.c
dl-opendir.c
dl-origin.c
dl-osinfo.h
dl-sbrk.c
dl-sysdep.c
dl-sysdep.h
dl-vdso.c
dl-vdso.h dl-vdso: Add LINUX_4 HASH CODE to support nds32 vdso mechanism 2019-07-08 15:57:01 -03:00
dl-writev.h
epoll_pwait.c
epoll_wait.c
errqueue.h
eventfd_read.c
eventfd_write.c
exit-thread.h
faccessat.c
fallocate.c
fallocate64.c
fatal-prepare.h
fchmodat.c
fcntl.c
fcntl64.c
fcntl_nocancel.c
fd_to_filename.h
fdatasync.c
fexecve.c
filter-nr-syscalls.awk
fips-private.h
fpathconf.c
fstatfs64.c
fstatvfs.c
fstatvfs64.c
fsync.c
ftime.c
ftruncate.c
ftruncate64.c
futex-internal.h nptl: Remove futex_supports_exact_relative_timeouts 2019-07-12 13:36:25 +00:00
futimens.c
futimes.c
futimesat.c
fxstat.c
fxstat64.c
fxstatat.c
fxstatat64.c
gai_sigqueue.c
gen-syscall-h.awk
gentempfd.c
getclktck.c
getcpu.c
getcwd.c
getdents.c Linux: Add getdents64 system call 2019-06-07 09:27:01 +02:00
getdents64.c Linux: Adjust gedents64 buffer size to int range [BZ #24740] 2019-06-27 15:08:40 +02:00
getdirentries.c
getdirentries64.c
getdtsz.c
getentropy.c
gethostid.c
getipv4sourcefilter.c
getloadavg.c
getlogin.c
getlogin_r.c
getpagesize.c
getpeername.c
getpriority.c
getpt.c
getrandom.c
getrlimit.c
getrlimit64.c
getsockname.c
getsockopt.c
getsourcefilter.c
getsourcefilter.h
getsysstats.c
gettimeofday.c
glob-lstat-compat.c
glob.c
glob64-lstat-compat.c
glob64.c
globfree.c
globfree64.c
grantpt.c
if_index.c
ifaddrs.c
ifreq.c
internal-signals.h
internal_statvfs.c
internal_statvfs.h
internal_statvfs64.c
ipc_ops.h
ipc_priv.h sysvipc: Consolidate semtimedop s390 2019-05-20 12:25:31 -03:00
kernel-features.h io: Remove copy_file_range emulation [BZ #24744] 2019-06-28 09:39:21 +02:00
kernel-posix-cpu-timers.h
kernel-posix-timers.h
kernel_sigaction.h
kernel_stat.h
kernel_termios.h
ldd-rewrite.sed
lddlibc4.c
ldsodefs.h
libc_fatal.c
linux_fsinfo.h
listen.c
local-setxid.h
lowlevellock-futex.h nptl: Add clockid parameter to futex timed wait calls 2019-07-12 13:36:23 +00:00
lseek.c
lseek64.c
lutimes.c
lxstat.c
lxstat64.c
malloc-sysdep.h
mlock2.c
mmap.c
mmap64.c posix: Fix large mmap64 offset for mips64n32 (BZ#24699) 2019-07-10 16:52:50 -03:00
mmap_internal.h
mq_close.c
mq_getattr.c
mq_notify.c
mq_open.c
mq_receive.c
mq_send.c
mq_timedreceive.c
mq_timedsend.c
mq_unlink.c
msgctl.c sysvipc: Fix compat msgctl (BZ#24570) 2019-05-20 12:25:28 -03:00
msgget.c
msgrcv.c
msgsnd.c
msync.c
nanosleep.c
nanosleep_nocancel.c
netlink_assert_response.c
netlinkaccess.h
nice.c
not-cancel.h Add nocancel version of pread64() 2020-01-17 13:56:43 +01:00
not-errno.h
nscd_setup_thread.c
ntp_gettime.c
ntp_gettimex.c
olddirent.h
oldglob.c
open.c
open64.c
open64_nocancel.c
open_by_handle_at.c
open_nocancel.c
openat.c
openat64.c
openat64_nocancel.c
openat_nocancel.c
opensock.c
pathconf.c
pathconf.h
paths.h
pause.c
pause_nocancel.c
personality.c
pkey_get.c
pkey_mprotect.c
pkey_set.c
poll.c
posix_fadvise.c
posix_fadvise64.c
posix_fallocate.c
posix_fallocate64.c
posix_madvise.c
ppoll.c
pread.c
pread64.c
pread64_nocancel.c Add nocancel version of pread64() 2020-01-17 13:56:43 +01:00
preadv.c
preadv2.c
preadv64.c
preadv64v2.c
prlimit.c
prof-freq.c
profil.c
pselect.c
pt-raise.c
pthread-pids.h
pthread_getaffinity.c
pthread_getcpuclockid.c
pthread_getname.c
pthread_kill.c
pthread_setaffinity.c
pthread_setname.c
pthread_sigmask.c
pthread_sigqueue.c
ptrace.c
ptsname.c
pwrite.c
pwrite64.c
pwritev.c
pwritev2.c
pwritev64.c
pwritev64v2.c
raise.c
read.c
read_nocancel.c
readahead.c
readdir.c
readdir64.c
readdir64_r.c
readdir_r.c
readonly-area.c
readv.c
reboot.c
recv.c
recvfrom.c
recvmmsg.c
recvmsg.c
remove.c
rename.c
renameat.c
renameat2.c
sa_len.c
safe-fatal.h
scandir64.c
sched_getaffinity.c
sched_getcpu.c
sched_setaffinity.c
segfault.c
select.c
semctl.c
semget.c
semop.c
semtimedop.c sysvipc: Consolidate semtimedop s390 2019-05-20 12:25:31 -03:00
send.c
sendmmsg.c
sendmsg.c
sendto.c
setegid.c
seteuid.c
setgid.c
setgroups.c
sethostid.c
setipv4sourcefilter.c
setregid.c
setresgid.c
setresuid.c
setreuid.c
setrlimit.c
setrlimit64.c
setsockopt.c
setsourcefilter.c
setuid.c
shlib-versions
shm-directory.c
shmat.c
shmctl.c
shmdt.c
shmget.c
shutdown.c
sigaction.c
siglist.h
signal.c
signalfd.c
sigpending.c
sigprocmask.c
sigqueue.c
sigreturn.c
sigset-cvt-mask.h
sigsetops.h
sigstack.c
sigsuspend.c
sigtimedwait.c
sigwait.c
sigwaitinfo.c
single-thread.h Add single-thread.h header 2019-05-14 08:41:15 -03:00
sizes.h
socket.c
socketcall.h
socketpair.c
spawni.c
speed.c
splice.c
statfs64.c
statvfs.c
statvfs64.c
statx.c
statx_cp.c
statx_cp.h
sync_file_range.c
syscall-names.list Linux: Update syscall-names.list to Linux 5.2 2019-07-19 08:53:04 +02:00
syscalls.list Linux: Add the tgkill function 2019-05-14 22:55:51 +02:00
sysconf.c linux: Assume clock_getres CLOCK_{PROCESS,THREAD}_CPUTIME_ID 2019-03-22 16:52:29 -03:00
sysctl.c Linux: Deprecate <sys/sysctl.h> and sysctl 2019-06-12 14:32:08 +02:00
sysctl.mk
sysdep-cancel.h Add single-thread.h header 2019-05-14 08:41:15 -03:00
sysdep-vdso.h
sysdep.h
syslog.c
tcdrain.c
tcflow.c
tcflush.c
tcgetattr.c
tcgetpgrp.c
tcsendbrk.c
tcsetattr.c
tcsetpgrp.c
tee.c
termio.h
test-errno-linux.c misc/test-errno-linux: Handle EINVAL from quotactl 2019-12-05 17:30:13 +01:00
time.c
timer_create.c
timer_delete.c
timer_getoverr.c
timer_gettime.c
timer_routines.c
timer_settime.c
times.c
timespec_get.c
truncate.c
truncate64.c
tst-affinity-pid.c
tst-affinity-static.c
tst-affinity.c
tst-align-clone.c
tst-clone.c
tst-clone2.c
tst-clone3.c
tst-fallocate-common.c
tst-fallocate.c
tst-fallocate64.c
tst-fanotify.c
tst-getdents64.c Linux: Use mmap instead of malloc in dirent/tst-getdents64 2019-06-28 14:05:02 +02:00
tst-getpid1.c
tst-gettid-kill.c
tst-gettid.c
tst-memfd_create.c
tst-mlock2.c
tst-mman-consts.py
tst-ofdlocks-compat.c
tst-ofdlocks.c
tst-personality.c Break lines before not after operators, batch 4. 2019-03-07 20:20:25 +00:00
tst-pkey.c
tst-quota.c
tst-readdir64-compat.c
tst-rlimit-infinity.c
tst-setgetname.c
tst-signal-numbers.py
tst-skeleton-affinity.c
tst-skeleton-thread-affinity.c
tst-socket-consts.py Linux: Use in-tree copy of SO_ constants for !__USE_MISC [BZ #24532] 2019-07-24 10:59:34 +02:00
tst-sync_file_range.c
tst-syscall-list.sh
tst-sysconf-iov_max-uapi.c
tst-sysconf-iov_max.c
tst-tgkill.c Linux: Add the tgkill function 2019-05-14 22:55:51 +02:00
tst-thread-affinity-pthread.c
tst-thread-affinity-pthread2.c
tst-thread-affinity-sched.c
tst-ttyname.c Break lines before not after operators, batch 4. 2019-03-07 20:20:25 +00:00
ttyname.c
ttyname.h
ttyname_r.c
ualarm.c
umount.c
umount2.S
unlockpt.c
updwtmp.c
ustat.c
utimensat.c
utimes.c
utmp_file.c
versionsort64.c
vfork.c
vmsplice.c
wait.c
wait3.c
waitid.c
waitpid.c
waitpid_nocancel.c
write.c
write_nocancel.c
writev.c
xmknod.c
xmknodat.c
xstat.c
xstat64.c
xstatconv.c
xstatconv.h