mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
ChangeLog.old
advisories
argp
assert
benchtests
bits
catgets
conform
csu
ctype
debug
dirent
dlfcn
elf
gmon
gnulib
hesiod
htl
hurd
iconv
iconvdata
include
inet
intl
io
libio
locale
localedata
login
mach
malloc
manual
math
mathvec
misc
nis
nptl
nptl_db
nscd
nss
po
posix
resolv
resource
rt
scripts
setjmp
signal
socket
soft-fp
stdio-common
stdlib
string
sunrpc
support
sysdeps
aarch64
alpha
arc
arm
csky
generic
gnu
hppa
htl
hurd
i386
ieee754
loongarch
m68k
mach
microblaze
mips
nptl
or1k
posix
powerpc
pthread
riscv
s390
sh
sparc
unix
alpha
arm
bsd
i386
inet
mips
powerpc
sh
sysv
linux
aarch64
alpha
arc
arm
bits
csky
hppa
i386
include
loongarch
m68k
microblaze
mips
net
netash
netatalk
netax25
neteconet
netinet
netipx
netiucv
netpacket
netrom
netrose
nfs
or1k
bits
sys
Implies
Makefile
Versions
arch-syscall.h
c++-types.data
clone.c
configure
configure.ac
getcontext-common.S
getcontext.S
ld.abilist
libBrokenLocale.abilist
libc.abilist
libc_malloc_debug.abilist
libm.abilist
libresolv.abilist
libthread_db.abilist
localplt.data
makecontext.c
mmap_internal.h
or1k_clone.S
prctl.c
setcontext-common.S
setcontext.S
shlib-versions
sigcontextinfo.h
swapcontext-common.S
swapcontext.S
syscall_cancel.S
sysdep.c
sysdep.h
ucontext_i.sym
powerpc
riscv
s390
scsi
sh
sparc
sys
wordsize-64
x86
x86_64
Implies
Makefile
Versions
_G_config.h
____longjmp_chk.c
_exit.c
a.out.h
accept.c
accept4.c
access.c
adjtime.c
adjtimex.c
aio_misc.h
aio_sigqueue.c
alphasort64.c
arch-fd_to_filename.h
arch-fork.h
bind.c
brk.c
brk_call.h
check_native.c
check_pf.c
chmod.c
chown.c
clock.c
clock_adjtime.c
clock_getcpuclockid.c
clock_getres.c
clock_gettime.c
clock_nanosleep.c
clock_settime.c
clone-internal.c
clone-pidfd-support.c
clone3.c
clone3.h
close.c
close_nocancel.c
closedir.c
closefrom_fallback.c
cmsg_nxthdr.c
cnd_timedwait.c
configure
configure.ac
connect.c
convert_scm_timestamps.c
copy_file_range.c
creat.c
creat64.c
default-sched.h
device-nrs.h
dirfd.c
dirstream.h
dl-affinity.h
dl-diagnostics-kernel.c
dl-early_allocate.c
dl-execstack.c
dl-execve.h
dl-extra_tls.h
dl-fxstatat64.c
dl-getcwd.c
dl-openat64.c
dl-opendir.c
dl-origin.c
dl-osinfo.h
dl-parse_auxv.h
dl-rseq-symbols.S
dl-sbrk.c
dl-sysdep.c
dl-sysdep.h
dl-vdso-setup.c
dl-vdso-setup.h
dl-vdso.h
dl-write.c
dl-writev.h
dup2.c
epoll_create.c
epoll_pwait.c
epoll_pwait2.c
epoll_wait.c
errlist-compat-data.h
errlist-compat.h
errqueue.h
eventfd_read.c
eventfd_write.c
execveat.c
faccessat.c
fallocate.c
fallocate64.c
fanotify_mark.c
fatal-prepare.h
fchmodat.c
fcntl.c
fcntl64.c
fcntl_nocancel.c
fdatasync.c
fdopendir.c
features-time64.h
fexecve.c
filter-nr-syscalls.awk
fixup-asm-unistd.h
fpathconf.c
fstat.c
fstat64.c
fstatat.c
fstatat64.c
fstatfs.c
fstatfs64.c
fstatvfs.c
fstatvfs64.c
fsync.c
ftime.c
ftruncate.c
ftruncate64.c
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
getdents64.c
getdirentries.c
getdirentries64.c
getdtsz.c
getentropy.c
gethostid.c
getipv4sourcefilter.c
getitimer.c
getloadavg.c
getlogin.c
getlogin_r.c
getpagesize.c
getpeername.c
getpriority.c
getpt.c
getrandom-internal.h
getrandom.c
getrlimit.c
getrlimit64.c
getrusage.c
getsockname.c
getsockopt.c
getsourcefilter.c
getsourcefilter.h
getsysstats.c
gettimeofday.c
glibcsyscalls.py
glob-lstat-compat.c
glob.c
glob64-lstat-compat.c
glob64-time64.c
glob64.c
globfree.c
globfree64-time64.c
globfree64.c
grantpt.c
if_index.c
ifaddrs.c
ifreq.c
inotify_init.c
internal-ioctl.h
internal-signals.h
internal-sigset.h
internal-stat.h
internal_statvfs.c
internal_statvfs.h
ioctl.c
ipc_ops.h
ipc_priv.h
kernel-features.h
kernel-posix-cpu-timers.h
kernel-posix-timers.h
kernel_sigaction.h
kernel_stat.h
kernel_termios.h
kstat_cp.h
lchown.c
ldsodefs.h
libc-vdso.h
libc_fatal.c
libc_sigaction.c
librt-compat.c
link.c
linux_fsinfo.h
listen.c
local-setxid.h
lseek.c
lseek64.c
lstat.c
lstat64.c
lutimes.c
lxstat.c
lxstat64.c
machine-sp.h
malloc-hugepages.c
malloc-sysdep.h
mkdir.c
mknodat.c
mlock2.c
mmap.c
mmap64.c
mmap_call.h
mmap_internal.h
mq_close.c
mq_getattr.c
mq_notify.c
mq_open.c
mq_receive.c
mq_send.c
mq_setattr.c
mq_timedreceive.c
mq_timedsend.c
mq_unlink.c
mremap-failure.h
mremap.c
msgctl.c
msgget.c
msgrcv.c
msgsnd.c
msync.c
mtx_timedlock.c
nanosleep.c
netlink_assert_response.c
netlinkaccess.h
not-cancel.h
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
opendir.c
pathconf.c
pathconf.h
paths.h
pause.c
personality.c
pidfd_getpid.c
pidfd_spawn.c
pidfd_spawnp.c
pipe.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
ppoll_chk.c
pread.c
pread64.c
pread64_nocancel.c
preadv.c
preadv2.c
preadv64.c
preadv64v2.c
prlimit.c
prlimit64.c
process_vm_readv.c
process_vm_writev.c
procutils.c
procutils.h
prof-freq.c
profil-counter.h
profil.c
pselect.c
pselect32.c
ptrace.c
ptsname.c
pwrite.c
pwrite64.c
pwritev.c
pwritev2.c
pwritev64.c
pwritev64v2.c
read.c
read_nocancel.c
readahead.c
readdir.c
readdir64.c
readdir64_r.c
readdir_r.c
readlink.c
readonly-area.c
readv.c
reboot.c
recv.c
recvfrom.c
recvmmsg.c
recvmsg.c
remove.c
rename.c
renameat.c
renameat2.c
rewinddir.c
rmdir.c
rseq-internal.h
sa_len.c
safe-fatal.h
scandir64.c
sched_getaffinity.c
sched_getattr.c
sched_getcpu.c
sched_rr_gi.c
sched_setaffinity.c
sched_setattr.c
seekdir.c
select.c
semctl.c
semget.c
semop.c
semtimedop.c
send.c
sendfile.c
sendfile64.c
sendmmsg.c
sendmsg.c
sendto.c
set-freeres-os.h
setegid.c
seteuid.c
setgid.c
setgroups.c
sethostid.c
setipv4sourcefilter.c
setitimer.c
setregid.c
setresgid.c
setresuid.c
setreuid.c
setrlimit.c
setrlimit64.c
setsockopt.c
setsourcefilter.c
settimeofday.c
settimezone.c
setuid.c
setvmaname.c
setvmaname.h
shlib-versions
shmat.c
shmctl.c
shmdt.c
shmget.c
shutdown.c
siglist-compat.h
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
sizes.h
socket-constants-time64.h
socket.c
socketcall.h
socketpair.c
spawn_int_def.h
spawnattr_getcgroup_np.c
spawnattr_setcgroup_np.c
spawni.c
speed.c
splice.c
startup.h
stat.c
stat64.c
stat_t64_cp.c
stat_t64_cp.h
statfs.c
statfs64.c
statvfs.c
statvfs64.c
statx.c
statx_cp.c
statx_cp.h
struct_kernel_msqid64_ds.h
struct_kernel_semid64_ds.h
struct_kernel_shmid64_ds.h
struct_stat_time64.h
symlink.c
sync_file_range.c
syscall-names.list
syscall.c
syscall_cancel.c
syscalls.list
sysconf-pthread_stack_min.h
sysconf-sigstksz.h
sysconf.c
sysctl.c
sysdep-cancel.h
sysdep-vdso.h
sysdep.h
tcdrain.c
tcflow.c
tcflush.c
tcgetattr.c
tcgetpgrp.c
tcsendbrk.c
tcsetattr.c
tcsetpgrp.c
tee.c
telldir.c
termio.h
test-errno-linux.c
thrd_priv.h
thrd_sleep.c
time-clockid.h
time.c
timer_create.c
timer_delete.c
timer_getoverr.c
timer_gettime.c
timer_routines.c
timer_settime.c
timer_t_was_int_compat.h
timerfd_gettime.c
timerfd_settime.c
times.c
timespec_get.c
timespec_getres.c
tls-internal.c
tls-internal.h
truncate.c
truncate64.c
tst-adjtimex-time64.c
tst-adjtimex.c
tst-affinity-pid.c
tst-affinity-static.c
tst-affinity.c
tst-align-clone-internal.c
tst-align-clone.c
tst-clock_adjtime-time64.c
tst-clock_adjtime.c
tst-clock_gettime-clobber.c
tst-clone.c
tst-clone2-internal.c
tst-clone2.c
tst-clone3-internal.c
tst-clone3.c
tst-epoll-ioctls.c
tst-epoll-time64.c
tst-epoll.c
tst-fallocate-common.c
tst-fallocate.c
tst-fallocate64.c
tst-fanotify.c
tst-fdopendir-o_path.c
tst-getauxval.c
tst-getcwd-smallbuff.c
tst-getdents64.c
tst-getpid1-internal.c
tst-getpid1.c
tst-gettid-kill.c
tst-gettid.c
tst-gettimeofday-clobber.c
tst-glibcsyscalls.py
tst-linux-mremap1.c
tst-memfd_create.c
tst-misalign-clone.c
tst-mlock2.c
tst-mman-consts.py
tst-mount-compile.py
tst-mount-consts.py
tst-mount.c
tst-nolink-libc.c
tst-ntp_adjtime-time64.c
tst-ntp_adjtime.c
tst-ntp_gettime-time64.c
tst-ntp_gettime.c
tst-ntp_gettimex-time64.c
tst-ntp_gettimex.c
tst-o_path-locks.c
tst-ofdlocks-compat.c
tst-ofdlocks.c
tst-personality.c
tst-pidfd-consts.py
tst-pidfd.c
tst-pidfd_getpid.c
tst-pkey.c
tst-posix_spawn-setsid-pidfd.c
tst-ppoll-time64.c
tst-ppoll.c
tst-prctl-time64.c
tst-prctl.c
tst-process_madvise.c
tst-process_mrelease.c
tst-quota.c
tst-readdir64-compat.c
tst-rlimit-infinity.c
tst-rseq-disable-static.c
tst-rseq-disable.c
tst-rseq-nptl-static.c
tst-rseq-nptl.c
tst-rseq-static.c
tst-rseq.c
tst-rseq.h
tst-sched-affinity-inheritance.c
tst-sched-consts.py
tst-sched_setattr.c
tst-scm_rights-time64.c
tst-scm_rights.c
tst-sem_getvalue-affinity.c
tst-sigcontext-get_pc.c
tst-signal-numbers.py
tst-sigtimedwait-time64.c
tst-sigtimedwait.c
tst-skeleton-affinity.c
tst-skeleton-thread-affinity.c
tst-socket-consts.py
tst-socket-timestamp-compat-time64.c
tst-socket-timestamp-compat.c
tst-socket-timestamp-time64.c
tst-socket-timestamp.c
tst-spawn-cgroup.c
tst-spawn-chdir-pidfd.c
tst-spawn-pidfd.c
tst-spawn-pidfd.h
tst-spawn2-pidfd.c
tst-spawn3-pidfd.c
tst-spawn4-pidfd.c
tst-spawn5-pidfd.c
tst-spawn6-pidfd.c
tst-spawn7-pidfd.c
tst-sync_file_range.c
tst-syscall-list.sh
tst-syscall-restart.c
tst-sysconf-iov_max-uapi.c
tst-sysconf-iov_max.c
tst-sysvmsg-linux.c
tst-sysvsem-linux.c
tst-sysvshm-linux.c
tst-tgkill.c
tst-time-clobber.c
tst-timerfd-time64.c
tst-timerfd.c
tst-ttyname-common.c
tst-ttyname-direct.c
tst-ttyname-namespace.c
ttyname.c
ttyname.h
ttyname_r.c
tv32-compat.h
ualarm.c
umount.c
umount2.c
unlink.c
unlockpt.c
update-syscall-lists.py
updwtmp.c
ustat.c
utime.c
utimensat.c
utimes.c
utmp_file.c
versionsort64.c
vfork.c
vmsplice.c
wait3.c
wait4.c
waitid.c
write.c
write_nocancel.c
writev.c
xmknod.c
xmknodat.c
xstat.c
xstat64.c
xstatconv.c
xstatconv.h
xstatover.h
xstatver.h
x86_64
Implies
Makefile
confstr.h
get_child_max.c
getlogin.c
getlogin_r.c
getpagesize.c
grantpt.c
ifreq.c
make-syscalls.sh
setxid.h
sockatmark.c
syscall-template.S
syscall.S
syscalls.list
sysdep.h
wordsize-32
wordsize-64
x86
x86_64
sysvipc
termios
time
timezone
wcsmbs
wctype
.b4-config
.clang-format
.gitattributes
.gitignore
CONTRIBUTED-BY
COPYING
COPYING.LIB
INSTALL
LICENSES
MAINTAINERS
Makeconfig
Makefile
Makefile.help
Makefile.in
Makerules
NEWS
README
Rules
SECURITY.md
SHARED-FILES
abi-tags
aclocal.m4
config.h.in
config.make.in
configure
configure.ac
extra-lib.mk
gen-locales.mk
libc-abis
libof-iterator.mk
o-iterator.mk
shlib-versions
test-skeleton.c
version.h
111 lines
3.4 KiB
C
111 lines
3.4 KiB
C
/* Create new context. OpenRISC version.
|
|
Copyright (C) 2022-2025 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; if not, see
|
|
<https://www.gnu.org/licenses/>. */
|
|
|
|
#include <shlib-compat.h>
|
|
#include <sysdep.h>
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <ucontext.h>
|
|
|
|
/* makecontext sets up a stack and the registers for the
|
|
user context. The stack looks like this:
|
|
|
|
+-----------------------+
|
|
| padding as required |
|
|
+-----------------------+
|
|
sp -> | parameters 7 to n |
|
|
+-----------------------+
|
|
|
|
The registers are set up like this:
|
|
r3-r8 : parameters 1 to 6
|
|
r14 : uc_link
|
|
r1 : stack pointer
|
|
r2 : frame pointer, set to NULL
|
|
*/
|
|
static void
|
|
do_makecontext (ucontext_t *ucp, void (*startcontext) (void),
|
|
void (*func) (void), int argc, va_list ap)
|
|
{
|
|
unsigned long int *sp;
|
|
int i;
|
|
|
|
sp = (unsigned long int *)
|
|
((uintptr_t) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size);
|
|
|
|
/* Allocate stack arguments. */
|
|
sp -= argc < 6 ? 0 : argc - 6;
|
|
|
|
/* Keep the stack aligned. */
|
|
sp = (unsigned long int *) (((uintptr_t) sp) & -4L);
|
|
|
|
/* Keep uc_link in r14. */
|
|
ucp->uc_mcontext.__gprs[14] = (uintptr_t) ucp->uc_link;
|
|
/* Return address points to function startcontext. */
|
|
ucp->uc_mcontext.__gprs[9] = (uintptr_t) startcontext;
|
|
/* Frame pointer is null. */
|
|
ucp->uc_mcontext.__gprs[2] = (uintptr_t) 0;
|
|
/* Restart in user-space starting at 'func'. */
|
|
ucp->uc_mcontext.__gprs[11] = (uintptr_t) func;
|
|
/* Set stack pointer. */
|
|
ucp->uc_mcontext.__gprs[1] = (uintptr_t) sp;
|
|
|
|
for (i = 0; i < argc; ++i)
|
|
if (i < 6)
|
|
ucp->uc_mcontext.__gprs[i + 3] = va_arg (ap, unsigned long int);
|
|
else
|
|
sp[i - 6] = va_arg (ap, unsigned long int);
|
|
}
|
|
|
|
void
|
|
__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
|
|
{
|
|
extern void __startcontext (void);
|
|
va_list ap;
|
|
|
|
va_start (ap, argc);
|
|
do_makecontext (ucp, &__startcontext, func, argc, ap);
|
|
va_end (ap);
|
|
}
|
|
|
|
versioned_symbol (libc, __makecontext, makecontext, GLIBC_2_40);
|
|
|
|
#if SHLIB_COMPAT (libc, GLIBC_2_35, GLIBC_2_40)
|
|
|
|
/* Define a compat version of makecontext for glibc's before the fpcsr
|
|
field was added to mcontext_t. The offset sigmask changed with this
|
|
introduction, the change was done because glibc's definition of
|
|
ucontext_t was initially defined incompatible with the Linux
|
|
definition of ucontext_t. We keep the compatability definition to
|
|
allow getcontext, setcontext and swapcontext to work in older
|
|
binaries. */
|
|
|
|
void
|
|
__makecontext_nofpcsr (ucontext_t *ucp, void (*func) (void), int argc, ...)
|
|
{
|
|
extern void __startcontext_nofpcsr (void);
|
|
va_list ap;
|
|
|
|
va_start (ap, argc);
|
|
do_makecontext (ucp, &__startcontext_nofpcsr, func, argc, ap);
|
|
va_end (ap);
|
|
}
|
|
|
|
compat_symbol (libc, __makecontext_nofpcsr, makecontext, GLIBC_2_35);
|
|
|
|
#endif
|