7445 lines
253 KiB
Diff
7445 lines
253 KiB
Diff
From e69e2ce0e9ed2962c6e0fed8ed1d6d291d0a2b4f Mon Sep 17 00:00:00 2001
|
|
From: swcompiler <lc@wxiat.com>
|
|
Date: Fri, 29 Nov 2024 14:09:04 +0800
|
|
Subject: [PATCH 08/23] Sw64: Linux ABI
|
|
|
|
---
|
|
sysdeps/unix/sysv/linux/sw_64/a.out.h | 197 ++++
|
|
sysdeps/unix/sysv/linux/sw_64/adjtime.c | 22 +
|
|
sysdeps/unix/sysv/linux/sw_64/adjtimex.c | 22 +
|
|
sysdeps/unix/sysv/linux/sw_64/aio_cancel.c | 35 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/a.out.h | 9 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/dirent.h | 57 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/elfclass.h | 14 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/epoll.h | 27 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/errno.h | 53 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/eventfd.h | 32 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/fcntl.h | 87 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/inotify.h | 30 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/ioctls.h | 36 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/mman.h | 67 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/netdb.h | 33 +
|
|
.../sysv/linux/sw_64/bits/procfs-prregset.h | 26 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/procfs.h | 38 +
|
|
.../sysv/linux/sw_64/bits/pthread_stack_min.h | 20 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/resource.h | 223 +++++
|
|
.../unix/sysv/linux/sw_64/bits/sigaction.h | 82 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/signalfd.h | 30 +
|
|
.../unix/sysv/linux/sw_64/bits/signum-arch.h | 67 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/sigstack.h | 32 +
|
|
.../sysv/linux/sw_64/bits/socket-constants.h | 51 ++
|
|
.../unix/sysv/linux/sw_64/bits/socket_type.h | 56 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/statfs.h | 64 ++
|
|
.../unix/sysv/linux/sw_64/bits/struct_stat.h | 119 +++
|
|
.../unix/sysv/linux/sw_64/bits/termios-baud.h | 47 +
|
|
.../unix/sysv/linux/sw_64/bits/termios-c_cc.h | 41 +
|
|
.../sysv/linux/sw_64/bits/termios-c_cflag.h | 39 +
|
|
.../sysv/linux/sw_64/bits/termios-c_iflag.h | 39 +
|
|
.../sysv/linux/sw_64/bits/termios-c_lflag.h | 43 +
|
|
.../sysv/linux/sw_64/bits/termios-c_oflag.h | 67 ++
|
|
.../sysv/linux/sw_64/bits/termios-struct.h | 38 +
|
|
sysdeps/unix/sysv/linux/sw_64/bits/timerfd.h | 30 +
|
|
.../unix/sysv/linux/sw_64/bits/typesizes.h | 87 ++
|
|
sysdeps/unix/sysv/linux/sw_64/bits/wordsize.h | 19 +
|
|
sysdeps/unix/sysv/linux/sw_64/brk_call.h | 27 +
|
|
sysdeps/unix/sysv/linux/sw_64/dl-auxv.h | 40 +
|
|
sysdeps/unix/sysv/linux/sw_64/dl-support.c | 2 +
|
|
sysdeps/unix/sysv/linux/sw_64/dl-sysdep.c | 5 +
|
|
.../unix/sysv/linux/sw_64/errlist-compat.c | 43 +
|
|
sysdeps/unix/sysv/linux/sw_64/fraiseexcpt.S | 58 ++
|
|
sysdeps/unix/sysv/linux/sw_64/fstatfs.c | 29 +
|
|
sysdeps/unix/sysv/linux/sw_64/fxstat64.c | 45 +
|
|
sysdeps/unix/sysv/linux/sw_64/fxstatat64.c | 32 +
|
|
sysdeps/unix/sysv/linux/sw_64/getclktck.c | 2 +
|
|
sysdeps/unix/sysv/linux/sw_64/getcontext.S | 440 +++++++++
|
|
sysdeps/unix/sysv/linux/sw_64/getdents.c | 18 +
|
|
sysdeps/unix/sysv/linux/sw_64/getdents64.c | 10 +
|
|
sysdeps/unix/sysv/linux/sw_64/getegid.S | 26 +
|
|
sysdeps/unix/sysv/linux/sw_64/geteuid.S | 26 +
|
|
sysdeps/unix/sysv/linux/sw_64/gethostname.c | 45 +
|
|
sysdeps/unix/sysv/linux/sw_64/getppid.S | 26 +
|
|
sysdeps/unix/sysv/linux/sw_64/getrlimit64.c | 54 ++
|
|
sysdeps/unix/sysv/linux/sw_64/gettimeofday.c | 26 +
|
|
.../unix/sysv/linux/sw_64/glob-lstat-compat.c | 2 +
|
|
sysdeps/unix/sysv/linux/sw_64/globfree.c | 36 +
|
|
.../sysv/linux/sw_64/ieee_get_fp_control.S | 50 +
|
|
.../sysv/linux/sw_64/ieee_set_fp_control.S | 46 +
|
|
sysdeps/unix/sysv/linux/sw_64/ioperm.c | 853 ++++++++++++++++++
|
|
sysdeps/unix/sysv/linux/sw_64/ipc_priv.h | 21 +
|
|
.../unix/sysv/linux/sw_64/jmp_buf-macros.h | 6 +
|
|
.../unix/sysv/linux/sw_64/kernel-features.h | 53 ++
|
|
.../sysv/linux/sw_64/kernel_rt_sigframe.h | 25 +
|
|
.../unix/sysv/linux/sw_64/kernel_sigaction.h | 10 +
|
|
sysdeps/unix/sysv/linux/sw_64/kernel_stat.h | 91 ++
|
|
.../unix/sysv/linux/sw_64/kernel_sysinfo.h | 6 +
|
|
.../unix/sysv/linux/sw_64/kernel_termios.h | 43 +
|
|
sysdeps/unix/sysv/linux/sw_64/librt-compat.c | 24 +
|
|
sysdeps/unix/sysv/linux/sw_64/localplt.data | 33 +
|
|
sysdeps/unix/sysv/linux/sw_64/lxstat64.c | 46 +
|
|
sysdeps/unix/sysv/linux/sw_64/makecontext.S | 164 ++++
|
|
sysdeps/unix/sysv/linux/sw_64/nldbl-abi.h | 8 +
|
|
sysdeps/unix/sysv/linux/sw_64/oldglob.c | 96 ++
|
|
sysdeps/unix/sysv/linux/sw_64/osf_adjtime.c | 139 +++
|
|
sysdeps/unix/sysv/linux/sw_64/osf_getitimer.c | 42 +
|
|
sysdeps/unix/sysv/linux/sw_64/osf_getrusage.c | 39 +
|
|
.../unix/sysv/linux/sw_64/osf_gettimeofday.c | 47 +
|
|
sysdeps/unix/sysv/linux/sw_64/osf_setitimer.c | 51 ++
|
|
.../unix/sysv/linux/sw_64/osf_settimeofday.c | 48 +
|
|
sysdeps/unix/sysv/linux/sw_64/osf_utimes.c | 36 +
|
|
sysdeps/unix/sysv/linux/sw_64/osf_wait4.c | 40 +
|
|
sysdeps/unix/sysv/linux/sw_64/pipe.S | 1 +
|
|
sysdeps/unix/sysv/linux/sw_64/pointer_guard.h | 57 ++
|
|
sysdeps/unix/sysv/linux/sw_64/register-dump.h | 239 +++++
|
|
sysdeps/unix/sysv/linux/sw_64/rt_sigaction.S | 87 ++
|
|
sysdeps/unix/sysv/linux/sw_64/select.c | 52 ++
|
|
sysdeps/unix/sysv/linux/sw_64/setcontext.S | 34 +
|
|
sysdeps/unix/sysv/linux/sw_64/setfpucw.c | 56 ++
|
|
sysdeps/unix/sysv/linux/sw_64/setrlimit64.c | 52 ++
|
|
sysdeps/unix/sysv/linux/sw_64/settimeofday.c | 22 +
|
|
sysdeps/unix/sysv/linux/sw_64/shlib-versions | 20 +
|
|
.../unix/sysv/linux/sw_64/sigcontextinfo.h | 30 +
|
|
sysdeps/unix/sysv/linux/sw_64/sizes.h | 23 +
|
|
sysdeps/unix/sysv/linux/sw_64/statfs.c | 29 +
|
|
sysdeps/unix/sysv/linux/sw_64/sw_64/ptrace.h | 18 +
|
|
sysdeps/unix/sysv/linux/sw_64/sw_64/regdef.h | 44 +
|
|
sysdeps/unix/sysv/linux/sw_64/swapcontext.S | 50 +
|
|
sysdeps/unix/sysv/linux/sw_64/sys/acct.h | 62 ++
|
|
sysdeps/unix/sysv/linux/sw_64/sys/io.h | 90 ++
|
|
sysdeps/unix/sysv/linux/sw_64/sys/ucontext.h | 92 ++
|
|
sysdeps/unix/sysv/linux/sw_64/sys/user.h | 52 ++
|
|
sysdeps/unix/sysv/linux/sw_64/syscalls.list | 27 +
|
|
sysdeps/unix/sysv/linux/sw_64/sysconf.c | 126 +++
|
|
.../sysv/linux/sw_64/timer_t_was_int_compat.h | 19 +
|
|
.../sysv/linux/sw_64/ucontext-offsets.sym | 28 +
|
|
sysdeps/unix/sysv/linux/sw_64/wait4.c | 28 +
|
|
sysdeps/unix/sysv/linux/sw_64/wordexp.c | 1 +
|
|
sysdeps/unix/sysv/linux/sw_64/xstat64.c | 46 +
|
|
sysdeps/unix/sysv/linux/sw_64/xstatconv.c | 120 +++
|
|
sysdeps/unix/sysv/linux/sw_64/xstatconv.h | 22 +
|
|
sysdeps/unix/sysv/linux/sw_64/xstatver.h | 14 +
|
|
113 files changed, 6529 insertions(+)
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/a.out.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/adjtime.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/adjtimex.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/aio_cancel.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/a.out.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/dirent.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/elfclass.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/epoll.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/errno.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/eventfd.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/fcntl.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/inotify.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/ioctls.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/mman.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/netdb.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/procfs-prregset.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/procfs.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/pthread_stack_min.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/resource.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/sigaction.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/signalfd.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/signum-arch.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/sigstack.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/socket-constants.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/socket_type.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/statfs.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/struct_stat.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-baud.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cc.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cflag.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-c_iflag.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-c_lflag.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-c_oflag.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/termios-struct.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/timerfd.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/typesizes.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/bits/wordsize.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/brk_call.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/dl-auxv.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/dl-support.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/dl-sysdep.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/errlist-compat.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/fraiseexcpt.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/fstatfs.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/fxstat64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/fxstatat64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getclktck.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getcontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getdents.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getdents64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getegid.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/geteuid.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/gethostname.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getppid.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/getrlimit64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/gettimeofday.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/glob-lstat-compat.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/globfree.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/ieee_get_fp_control.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/ieee_set_fp_control.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/ioperm.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/ipc_priv.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/jmp_buf-macros.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/kernel-features.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/kernel_rt_sigframe.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/kernel_sigaction.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/kernel_stat.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/kernel_sysinfo.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/kernel_termios.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/librt-compat.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/localplt.data
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/lxstat64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/makecontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/nldbl-abi.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/oldglob.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_adjtime.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_getitimer.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_getrusage.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_gettimeofday.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_setitimer.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_settimeofday.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_utimes.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/osf_wait4.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/pipe.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/pointer_guard.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/register-dump.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/rt_sigaction.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/select.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/setcontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/setfpucw.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/setrlimit64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/settimeofday.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/shlib-versions
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sigcontextinfo.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sizes.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/statfs.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sw_64/ptrace.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sw_64/regdef.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/swapcontext.S
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sys/acct.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sys/io.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sys/ucontext.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sys/user.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/syscalls.list
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/sysconf.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/timer_t_was_int_compat.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/ucontext-offsets.sym
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/wait4.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/wordexp.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/xstat64.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/xstatconv.c
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/xstatconv.h
|
|
create mode 100644 sysdeps/unix/sysv/linux/sw_64/xstatver.h
|
|
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/a.out.h b/sysdeps/unix/sysv/linux/sw_64/a.out.h
|
|
new file mode 100644
|
|
index 00000000..2004d974
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/a.out.h
|
|
@@ -0,0 +1,197 @@
|
|
+#ifndef __A_OUT_GNU_H__
|
|
+#define __A_OUT_GNU_H__
|
|
+
|
|
+#include <bits/a.out.h>
|
|
+
|
|
+#define __GNU_EXEC_MACROS__
|
|
+
|
|
+/*
|
|
+ * OSF/1 ECOFF header structs. ECOFF files consist of:
|
|
+ * - a file header (struct filehdr),
|
|
+ * - an a.out header (struct aouthdr),
|
|
+ * - one or more section headers (struct scnhdr).
|
|
+ * The filhdr's "f_nscns" field contains the
|
|
+ * number of section headers.
|
|
+ */
|
|
+
|
|
+struct filehdr
|
|
+{
|
|
+ /* OSF/1 "file" header */
|
|
+ unsigned short f_magic, f_nscns;
|
|
+ unsigned int f_timdat;
|
|
+ unsigned long f_symptr;
|
|
+ unsigned int f_nsyms;
|
|
+ unsigned short f_opthdr, f_flags;
|
|
+};
|
|
+
|
|
+struct aouthdr
|
|
+{
|
|
+ unsigned long info; /* After that it looks quite normal.. */
|
|
+ unsigned long tsize;
|
|
+ unsigned long dsize;
|
|
+ unsigned long bsize;
|
|
+ unsigned long entry;
|
|
+ unsigned long
|
|
+ text_start; /* With a few additions that actually make sense. */
|
|
+ unsigned long data_start;
|
|
+ unsigned long bss_start;
|
|
+ unsigned int gprmask,
|
|
+ fprmask; /* Bitmask of general & floating point regs used in binary. */
|
|
+ unsigned long gpvalue;
|
|
+};
|
|
+
|
|
+struct scnhdr
|
|
+{
|
|
+ char s_name[8];
|
|
+ unsigned long s_paddr;
|
|
+ unsigned long s_vaddr;
|
|
+ unsigned long s_size;
|
|
+ unsigned long s_scnptr;
|
|
+ unsigned long s_relptr;
|
|
+ unsigned long s_lnnoptr;
|
|
+ unsigned short s_nreloc;
|
|
+ unsigned short s_nlnno;
|
|
+ unsigned int s_flags;
|
|
+};
|
|
+
|
|
+struct exec
|
|
+{
|
|
+ /* OSF/1 "file" header */
|
|
+ struct filehdr fh;
|
|
+ struct aouthdr ah;
|
|
+};
|
|
+
|
|
+#define a_info ah.info
|
|
+#define a_text ah.tsize
|
|
+#define a_data ah.dsize
|
|
+#define a_bss ah.bsize
|
|
+#define a_entry ah.entry
|
|
+#define a_textstart ah.text_start
|
|
+#define a_datastart ah.data_start
|
|
+#define a_bssstart ah.bss_start
|
|
+#define a_gprmask ah.gprmask
|
|
+#define a_fprmask ah.fprmask
|
|
+#define a_gpvalue ah.gpvalue
|
|
+
|
|
+#define AOUTHSZ sizeof (struct aouthdr)
|
|
+#define SCNHSZ sizeof (struct scnhdr)
|
|
+#define SCNROUND 16
|
|
+
|
|
+enum machine_type
|
|
+{
|
|
+ M_OLDSUN2 = 0,
|
|
+ M_68010 = 1,
|
|
+ M_68020 = 2,
|
|
+ M_SPARC = 3,
|
|
+ M_386 = 100,
|
|
+ M_MIPS1 = 151,
|
|
+ M_MIPS2 = 152
|
|
+};
|
|
+
|
|
+#define N_MAGIC(exec) ((exec).a_info & 0xffff)
|
|
+#define N_MACHTYPE(exec) ((enum machine_type) (((exec).a_info >> 16) & 0xff))
|
|
+#define N_FLAGS(exec) (((exec).a_info >> 24) & 0xff)
|
|
+#define N_SET_INFO(exec, magic, type, flags) \
|
|
+ ((exec).a_info = ((magic) &0xffff) | (((int) (type) &0xff) << 16) \
|
|
+ | (((flags) &0xff) << 24))
|
|
+#define N_SET_MAGIC(exec, magic) \
|
|
+ ((exec).a_info = ((exec).a_info & 0xffff0000) | ((magic) &0xffff))
|
|
+#define N_SET_MACHTYPE(exec, machtype) \
|
|
+ ((exec).a_info \
|
|
+ = ((exec).a_info & 0xff00ffff) | ((((int) (machtype)) & 0xff) << 16))
|
|
+#define N_SET_FLAGS(exec, flags) \
|
|
+ ((exec).a_info = ((exec).a_info & 0x00ffffff) | (((flags) &0xff) << 24))
|
|
+
|
|
+/* Code indicating object file or impure executable. */
|
|
+#define OMAGIC 0407
|
|
+/* Code indicating pure executable. */
|
|
+#define NMAGIC 0410
|
|
+/* Code indicating demand-paged executable. */
|
|
+#define ZMAGIC 0413
|
|
+/* This indicates a demand-paged executable with the header in the text.
|
|
+ The first page is unmapped to help trap NULL pointer references. */
|
|
+#define QMAGIC 0314
|
|
+/* Code indicating core file. */
|
|
+#define CMAGIC 0421
|
|
+
|
|
+#define N_TRSIZE(x) 0
|
|
+#define N_DRSIZE(x) 0
|
|
+#define N_SYMSIZE(x) 0
|
|
+#define N_BADMAG(x) \
|
|
+ (N_MAGIC (x) != OMAGIC && N_MAGIC (x) != NMAGIC && N_MAGIC (x) != ZMAGIC \
|
|
+ && N_MAGIC (x) != QMAGIC)
|
|
+#define _N_HDROFF(x) (1024 - sizeof (struct exec))
|
|
+#define N_TXTOFF(x) \
|
|
+ ((long) N_MAGIC (x) == ZMAGIC \
|
|
+ ? 0 \
|
|
+ : ((sizeof (struct exec) + (x).fh.f_nscns * SCNHSZ + SCNROUND - 1) \
|
|
+ & ~(SCNROUND - 1)))
|
|
+
|
|
+#define N_DATOFF(x) (N_TXTOFF (x) + (x).a_text)
|
|
+#define N_TRELOFF(x) (N_DATOFF (x) + (x).a_data)
|
|
+#define N_DRELOFF(x) (N_TRELOFF (x) + N_TRSIZE (x))
|
|
+#define N_SYMOFF(x) (N_DRELOFF (x) + N_DRSIZE (x))
|
|
+#define N_STROFF(x) (N_SYMOFF (x) + N_SYMSIZE (x))
|
|
+
|
|
+/* Address of text segment in memory after it is loaded. */
|
|
+#define N_TXTADDR(x) ((x).a_textstart)
|
|
+
|
|
+/* Address of data segment in memory after it is loaded. */
|
|
+#define SEGMENT_SIZE 1024
|
|
+
|
|
+#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1))
|
|
+#define _N_TXTENDADDR(x) (N_TXTADDR (x) + (x).a_text)
|
|
+
|
|
+#define N_DATADDR(x) ((x).a_datastart)
|
|
+#define N_BSSADDR(x) ((x).a_bssstart)
|
|
+
|
|
+#if !defined(N_NLIST_DECLARED)
|
|
+struct nlist
|
|
+{
|
|
+ union
|
|
+ {
|
|
+ char *n_name;
|
|
+ struct nlist *n_next;
|
|
+ long n_strx;
|
|
+ } n_un;
|
|
+ unsigned char n_type;
|
|
+ char n_other;
|
|
+ short n_desc;
|
|
+ unsigned long n_value;
|
|
+};
|
|
+#endif /* no N_NLIST_DECLARED. */
|
|
+
|
|
+#define N_UNDF 0
|
|
+#define N_ABS 2
|
|
+#define N_TEXT 4
|
|
+#define N_DATA 6
|
|
+#define N_BSS 8
|
|
+#define N_FN 15
|
|
+#define N_EXT 1
|
|
+#define N_TYPE 036
|
|
+#define N_STAB 0340
|
|
+#define N_INDR 0xa
|
|
+#define N_SETA 0x14 /* Absolute set element symbol. */
|
|
+#define N_SETT 0x16 /* Text set element symbol. */
|
|
+#define N_SETD 0x18 /* Data set element symbol. */
|
|
+#define N_SETB 0x1A /* Bss set element symbol. */
|
|
+#define N_SETV 0x1C /* Pointer to set vector in data area. */
|
|
+
|
|
+#if !defined(N_RELOCATION_INFO_DECLARED)
|
|
+/* This structure describes a single relocation to be performed.
|
|
+ The text-relocation section of the file is a vector of these structures,
|
|
+ all of which apply to the text section.
|
|
+ Likewise, the data-relocation section applies to the data section. */
|
|
+
|
|
+struct relocation_info
|
|
+{
|
|
+ int r_address;
|
|
+ unsigned int r_symbolnum : 24;
|
|
+ unsigned int r_pcrel : 1;
|
|
+ unsigned int r_length : 2;
|
|
+ unsigned int r_extern : 1;
|
|
+ unsigned int r_pad : 4;
|
|
+};
|
|
+#endif /* no N_RELOCATION_INFO_DECLARED. */
|
|
+
|
|
+#endif /* __A_OUT_GNU_H__ */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/adjtime.c b/sysdeps/unix/sysv/linux/sw_64/adjtime.c
|
|
new file mode 100644
|
|
index 00000000..6b64d1b9
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/adjtime.c
|
|
@@ -0,0 +1,22 @@
|
|
+/* adjtime -- Adjust the current time of day. Linux/Sw_64/tv64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+/* We can use the generic Linux implementation, but we have to override its
|
|
+ default symbol version. */
|
|
+#define VERSION_adjtime GLIBC_2.1
|
|
+#include <sysdeps/unix/sysv/linux/adjtime.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/adjtimex.c b/sysdeps/unix/sysv/linux/sw_64/adjtimex.c
|
|
new file mode 100644
|
|
index 00000000..2e3d8d49
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/adjtimex.c
|
|
@@ -0,0 +1,22 @@
|
|
+/* adjtimex -- Adjust the current time of day. Linux/Sw_64/tv64 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+/* We can use the generic Linux implementation, but we have to override its
|
|
+ default symbol version. */
|
|
+#define VERSION_adjtimex GLIBC_2.1
|
|
+#include <sysdeps/unix/sysv/linux/adjtimex.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/aio_cancel.c b/sysdeps/unix/sysv/linux/sw_64/aio_cancel.c
|
|
new file mode 100644
|
|
index 00000000..222126ea
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/aio_cancel.c
|
|
@@ -0,0 +1,35 @@
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#define aio_cancel64 XXX
|
|
+#include <aio.h>
|
|
+#undef aio_cancel64
|
|
+#include <errno.h>
|
|
+
|
|
+extern __typeof (aio_cancel) __new_aio_cancel;
|
|
+extern __typeof (aio_cancel) __old_aio_cancel;
|
|
+
|
|
+#define __aio_cancel __new_aio_cancel
|
|
+
|
|
+#include <rt/aio_cancel.c>
|
|
+
|
|
+#undef __aio_cancel
|
|
+versioned_symbol (libc, __new_aio_cancel, aio_cancel, GLIBC_2_34);
|
|
+versioned_symbol (libc, __new_aio_cancel, aio_cancel64, GLIBC_2_34);
|
|
+#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_3, GLIBC_2_34)
|
|
+compat_symbol (librt, __new_aio_cancel, aio_cancel, GLIBC_2_3);
|
|
+compat_symbol (librt, __new_aio_cancel, aio_cancel64, GLIBC_2_3);
|
|
+#endif
|
|
+
|
|
+#if OTHER_SHLIB_COMPAT (librt, GLIBC_2_1, GLIBC_2_3)
|
|
+
|
|
+# undef ECANCELED
|
|
+# define __aio_cancel __old_aio_cancel
|
|
+# define ECANCELED 125
|
|
+
|
|
+# include <rt/aio_cancel.c>
|
|
+
|
|
+# undef __aio_cancel
|
|
+compat_symbol (librt, __old_aio_cancel, aio_cancel, GLIBC_2_1);
|
|
+compat_symbol (librt, __old_aio_cancel, aio_cancel64, GLIBC_2_1);
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/a.out.h b/sysdeps/unix/sysv/linux/sw_64/bits/a.out.h
|
|
new file mode 100644
|
|
index 00000000..f15e82c9
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/a.out.h
|
|
@@ -0,0 +1,9 @@
|
|
+#ifndef __A_OUT_GNU_H__
|
|
+# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
|
+#endif
|
|
+#ifndef __A_OUT_GNU_H__
|
|
+# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
|
+#endif
|
|
+#ifndef __A_OUT_GNU_H__
|
|
+# error "Never use <bits/a.out.h> directly; include <a.out.h> instead."
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/dirent.h b/sysdeps/unix/sysv/linux/sw_64/bits/dirent.h
|
|
new file mode 100644
|
|
index 00000000..ca27db2f
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/dirent.h
|
|
@@ -0,0 +1,57 @@
|
|
+/* Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _BITS_DIRENT_H
|
|
+#define _BITS_DIRENT_H 1
|
|
+
|
|
+struct dirent
|
|
+{
|
|
+#if (defined __USE_FILE_OFFSET64 || defined __sw_64__)
|
|
+ __ino64_t d_ino;
|
|
+#else
|
|
+ __ino_t d_ino;
|
|
+ int __pad;
|
|
+#endif
|
|
+ __off_t d_off;
|
|
+ unsigned short int d_reclen;
|
|
+ unsigned char d_type;
|
|
+ char d_name[256]; /* We must not include limits.h! */
|
|
+};
|
|
+
|
|
+#ifdef __USE_LARGEFILE64
|
|
+/* Note dirent64 is the same as dirent. */
|
|
+struct dirent64
|
|
+{
|
|
+ __ino64_t d_ino;
|
|
+ __off64_t d_off;
|
|
+ unsigned short int d_reclen;
|
|
+ unsigned char d_type;
|
|
+ char d_name[256]; /* We must not include limits.h! */
|
|
+};
|
|
+#endif
|
|
+
|
|
+#define d_fileno d_ino /* Backwards compatibility. */
|
|
+
|
|
+#undef _DIRENT_HAVE_D_NAMLEN
|
|
+#define _DIRENT_HAVE_D_RECLEN
|
|
+#define _DIRENT_HAVE_D_OFF
|
|
+#define _DIRENT_HAVE_D_TYPE
|
|
+
|
|
+/* Inform libc code that these two types are effectively identical. */
|
|
+#define _DIRENT_MATCHES_DIRENT64 1
|
|
+
|
|
+#endif /* bits/dirent.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/elfclass.h b/sysdeps/unix/sysv/linux/sw_64/bits/elfclass.h
|
|
new file mode 100644
|
|
index 00000000..e74c5f72
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/elfclass.h
|
|
@@ -0,0 +1,14 @@
|
|
+/* This file specifies the native word size of the machine, which indicates
|
|
+ the ELF file class used for executables and shared objects on this
|
|
+ machine. */
|
|
+
|
|
+#ifndef _LINK_H
|
|
+# error "Never use <bits/elfclass.h> directly; include <link.h> instead."
|
|
+#endif
|
|
+
|
|
+#include <bits/wordsize.h>
|
|
+
|
|
+#define __ELF_NATIVE_CLASS __WORDSIZE
|
|
+
|
|
+/* Linux/Sw_64 is exceptional as it has .hash section with 64 bit entries. */
|
|
+typedef uint64_t Elf_Symndx;
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/epoll.h b/sysdeps/unix/sysv/linux/sw_64/bits/epoll.h
|
|
new file mode 100644
|
|
index 00000000..6c78bb04
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/epoll.h
|
|
@@ -0,0 +1,27 @@
|
|
+/* Copyright (C) 2002-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_EPOLL_H
|
|
+# error "Never use <bits/epoll.h> directly; include <sys/epoll.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags to be passed to epoll_create1. */
|
|
+enum
|
|
+{
|
|
+ EPOLL_CLOEXEC = 010000000
|
|
+#define EPOLL_CLOEXEC EPOLL_CLOEXEC
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/errno.h b/sysdeps/unix/sysv/linux/sw_64/bits/errno.h
|
|
new file mode 100644
|
|
index 00000000..9fdbfe53
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/errno.h
|
|
@@ -0,0 +1,53 @@
|
|
+/* Error constants. Linux/Sw_64 specific version.
|
|
+ Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _BITS_ERRNO_H
|
|
+#define _BITS_ERRNO_H 1
|
|
+
|
|
+#if !defined _ERRNO_H
|
|
+# error "Never include <bits/errno.h> directly; use <errno.h> instead."
|
|
+#endif
|
|
+
|
|
+#include <linux/errno.h>
|
|
+
|
|
+/* Older Linux headers do not define these constants. */
|
|
+#ifndef ENOTSUP
|
|
+# define ENOTSUP EOPNOTSUPP
|
|
+#endif
|
|
+
|
|
+#ifndef ECANCELED
|
|
+# define ECANCELED 131
|
|
+#endif
|
|
+
|
|
+#ifndef EOWNERDEAD
|
|
+# define EOWNERDEAD 136
|
|
+#endif
|
|
+
|
|
+#ifndef ENOTRECOVERABLE
|
|
+# define ENOTRECOVERABLE 137
|
|
+#endif
|
|
+
|
|
+#ifndef ERFKILL
|
|
+# define ERFKILL 138
|
|
+#endif
|
|
+
|
|
+#ifndef EHWPOISON
|
|
+# define EHWPOISON 139
|
|
+#endif
|
|
+
|
|
+#endif /* bits/errno.h. */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/eventfd.h b/sysdeps/unix/sysv/linux/sw_64/bits/eventfd.h
|
|
new file mode 100644
|
|
index 00000000..6ddae34b
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/eventfd.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* Copyright (C) 2007-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_EVENTFD_H
|
|
+# error \
|
|
+ "Never use <bits/eventfd.h> directly; include <sys/eventfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for eventfd. */
|
|
+enum
|
|
+{
|
|
+ EFD_SEMAPHORE = 000000001,
|
|
+#define EFD_SEMAPHORE EFD_SEMAPHORE
|
|
+ EFD_CLOEXEC = 010000000,
|
|
+#define EFD_CLOEXEC EFD_CLOEXEC
|
|
+ EFD_NONBLOCK = 000000004
|
|
+#define EFD_NONBLOCK EFD_NONBLOCK
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/fcntl.h b/sysdeps/unix/sysv/linux/sw_64/bits/fcntl.h
|
|
new file mode 100644
|
|
index 00000000..48ae4a7c
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/fcntl.h
|
|
@@ -0,0 +1,87 @@
|
|
+/* O_*, F_*, FD_* bit values for Linux.
|
|
+ Copyright (C) 1995-2023 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/>. */
|
|
+
|
|
+#ifndef _FCNTL_H
|
|
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
|
|
+#endif
|
|
+
|
|
+#define O_CREAT 01000 /* not fcntl */
|
|
+#define O_TRUNC 02000 /* not fcntl */
|
|
+#define O_EXCL 04000 /* not fcntl */
|
|
+#define O_NOCTTY 010000 /* not fcntl */
|
|
+
|
|
+#define O_NONBLOCK 00004
|
|
+#define O_APPEND 00010
|
|
+#define O_SYNC 020040000
|
|
+
|
|
+#define __O_DIRECTORY 0100000 /* Must be a directory. */
|
|
+#define __O_NOFOLLOW 0200000 /* Do not follow links. */
|
|
+#define __O_CLOEXEC 010000000 /* Set close_on_exec. */
|
|
+
|
|
+#define __O_DIRECT 02000000 /* Direct disk access. */
|
|
+#define __O_NOATIME 04000000 /* Do not set atime. */
|
|
+#define __O_PATH 040000000 /* Resolve pathname but do not open file. */
|
|
+#define __O_TMPFILE 0100100000 /* Atomically create nameless file. */
|
|
+
|
|
+/* Not necessary, files are always with 64bit off_t. */
|
|
+#define __O_LARGEFILE 0
|
|
+
|
|
+#define __O_DSYNC 040000 /* Synchronize data. */
|
|
+
|
|
+#define F_GETLK 7 /* Get record locking info. */
|
|
+#define F_SETLK 8 /* Set record locking info (non-blocking). */
|
|
+#define F_SETLKW 9 /* Set record locking info (blocking). */
|
|
+#define F_GETLK64 F_GETLK /* Get record locking info. */
|
|
+#define F_SETLK64 F_SETLK /* Set record locking info (non-blocking). */
|
|
+#define F_SETLKW64 F_SETLKW /* Set record locking info (blocking). */
|
|
+
|
|
+#define __F_SETOWN 5 /* Get owner of socket (receiver of SIGIO). */
|
|
+#define __F_GETOWN 6 /* Set owner of socket (receiver of SIGIO). */
|
|
+
|
|
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */
|
|
+#define F_RDLCK 1 /* Read lock. */
|
|
+#define F_WRLCK 2 /* Write lock. */
|
|
+#define F_UNLCK 8 /* Remove lock. */
|
|
+
|
|
+/* for old implementation of bsd flock () */
|
|
+#define F_EXLCK 16 /* or 3 */
|
|
+#define F_SHLCK 32 /* or 4 */
|
|
+
|
|
+/* We don't need to support __USE_FILE_OFFSET64. */
|
|
+struct flock
|
|
+{
|
|
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
|
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
|
+ __off_t l_start; /* Offset where the lock begins. */
|
|
+ __off_t l_len; /* Size of the locked area; zero means until EOF. */
|
|
+ __pid_t l_pid; /* Process holding the lock. */
|
|
+};
|
|
+
|
|
+#ifdef __USE_LARGEFILE64
|
|
+struct flock64
|
|
+{
|
|
+ short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */
|
|
+ short int l_whence; /* Where `l_start' is relative to (like `lseek'). */
|
|
+ __off64_t l_start; /* Offset where the lock begins. */
|
|
+ __off64_t l_len; /* Size of the locked area; zero means until EOF. */
|
|
+ __pid_t l_pid; /* Process holding the lock. */
|
|
+};
|
|
+#endif
|
|
+
|
|
+/* Include generic Linux declarations. */
|
|
+#include <bits/fcntl-linux.h>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/inotify.h b/sysdeps/unix/sysv/linux/sw_64/bits/inotify.h
|
|
new file mode 100644
|
|
index 00000000..9d9e2872
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/inotify.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* Copyright (C) 2005-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_INOTIFY_H
|
|
+# error \
|
|
+ "Never use <bits/inotify.h> directly; include <sys/inotify.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for the parameter of inotify_init1. */
|
|
+enum
|
|
+{
|
|
+ IN_CLOEXEC = 010000000,
|
|
+#define IN_CLOEXEC IN_CLOEXEC
|
|
+ IN_NONBLOCK = 000000004
|
|
+#define IN_NONBLOCK IN_NONBLOCK
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/ioctls.h b/sysdeps/unix/sysv/linux/sw_64/bits/ioctls.h
|
|
new file mode 100644
|
|
index 00000000..41c9e754
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/ioctls.h
|
|
@@ -0,0 +1,36 @@
|
|
+/* Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_IOCTL_H
|
|
+# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Use the definitions from the kernel header files. */
|
|
+#include <asm/ioctls.h>
|
|
+
|
|
+/* Oh well, this is necessary since the kernel data structure is
|
|
+ different from the user-level version. */
|
|
+#undef TCGETS
|
|
+#undef TCSETS
|
|
+#undef TCSETSW
|
|
+#undef TCSETSF
|
|
+#define TCGETS _IOR ('t', 19, char[44])
|
|
+#define TCSETS _IOW ('t', 20, char[44])
|
|
+#define TCSETSW _IOW ('t', 21, char[44])
|
|
+#define TCSETSF _IOW ('t', 22, char[44])
|
|
+
|
|
+#include <linux/sockios.h>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/mman.h b/sysdeps/unix/sysv/linux/sw_64/bits/mman.h
|
|
new file mode 100644
|
|
index 00000000..f8e9f148
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/mman.h
|
|
@@ -0,0 +1,67 @@
|
|
+/* Definitions for POSIX memory map interface. Linux/Sw_64 version.
|
|
+ Copyright (C) 1997-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_MMAN_H
|
|
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
|
|
+#endif
|
|
+
|
|
+/* The following definitions basically come from the kernel headers.
|
|
+ But the kernel header is not namespace clean. */
|
|
+
|
|
+#define __MAP_ANONYMOUS 0x10 /* Don't use a file. */
|
|
+
|
|
+/* These are Linux-specific. */
|
|
+#define MAP_GROWSDOWN 0x01000 /* Stack-like segment. */
|
|
+#define MAP_DENYWRITE 0x02000 /* ETXTBSY */
|
|
+#define MAP_EXECUTABLE 0x04000 /* Mark it as an executable. */
|
|
+#define MAP_LOCKED 0x08000 /* Lock the mapping. */
|
|
+#define MAP_NORESERVE 0x10000 /* Don't check for reservations. */
|
|
+#define MAP_POPULATE 0x20000 /* Populate (prefault) pagetables. */
|
|
+#define MAP_NONBLOCK 0x40000 /* Do not block on IO. */
|
|
+#define MAP_STACK 0x80000 /* Allocation is for a stack. */
|
|
+#define MAP_HUGETLB 0x100000 /* Create huge page mapping. */
|
|
+#define MAP_FIXED_NOREPLACE \
|
|
+ 0x200000 /* MAP_FIXED but do not unmap \
|
|
+ underlying mapping. */
|
|
+
|
|
+/* Flags for `mlockall'. */
|
|
+#define MCL_CURRENT 8192
|
|
+#define MCL_FUTURE 16384
|
|
+#define MCL_ONFAULT 32768
|
|
+
|
|
+#include <bits/mman-linux.h>
|
|
+
|
|
+/* Values that differ from standard <mman-linux.h>. For the most part newer
|
|
+ values are shared, but older values are skewed. */
|
|
+
|
|
+#undef MAP_FIXED
|
|
+#define MAP_FIXED 0x100
|
|
+
|
|
+#undef MS_SYNC
|
|
+#define MS_SYNC 2
|
|
+#undef MS_INVALIDATE
|
|
+#define MS_INVALIDATE 4
|
|
+
|
|
+#ifdef __USE_MISC
|
|
+# undef MADV_DONTNEED
|
|
+# define MADV_DONTNEED 6
|
|
+#endif
|
|
+#ifdef __USE_XOPEN2K
|
|
+# undef POSIX_MADV_DONTNEED
|
|
+# define POSIX_MADV_DONTNEED 6
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/netdb.h b/sysdeps/unix/sysv/linux/sw_64/bits/netdb.h
|
|
new file mode 100644
|
|
index 00000000..d97e16a4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/netdb.h
|
|
@@ -0,0 +1,33 @@
|
|
+/* Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _NETDB_H
|
|
+# error "Never include <bits/netdb.h> directly; use <netdb.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Description of data base entry for a single network. NOTE: here a
|
|
+ poor assumption is made. The network number is expected to fit
|
|
+ into an unsigned long int variable. */
|
|
+struct netent
|
|
+{
|
|
+ char *n_name; /* Official name of network. */
|
|
+ char **n_aliases; /* Alias list. */
|
|
+ int n_addrtype; /* Net address type. */
|
|
+ /* XXX We should probably use uint32_t for the field and ensure
|
|
+ compatibility by adding appropriate padding. */
|
|
+ uint32_t n_net; /* Network number. */
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/procfs-prregset.h b/sysdeps/unix/sysv/linux/sw_64/bits/procfs-prregset.h
|
|
new file mode 100644
|
|
index 00000000..9b00b279
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/procfs-prregset.h
|
|
@@ -0,0 +1,26 @@
|
|
+/* Types of prgregset_t and prfpregset_t. SW_64 version.
|
|
+ Copyright (C) 2018-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_PROCFS_H
|
|
+# error \
|
|
+ "Never include <bits/procfs-prregset.h> directly; use <sys/procfs.h> instead."
|
|
+#endif
|
|
+
|
|
+typedef gregset_t __prgregset_t;
|
|
+typedef fpregset_t __prfpregset_t;
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/procfs.h b/sysdeps/unix/sysv/linux/sw_64/bits/procfs.h
|
|
new file mode 100644
|
|
index 00000000..0b3453ae
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/procfs.h
|
|
@@ -0,0 +1,38 @@
|
|
+/* Types for registers for sys/procfs.h. SW_64 version.
|
|
+ Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_PROCFS_H
|
|
+# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
|
|
+#endif
|
|
+
|
|
+#include <signal.h>
|
|
+#include <sys/ucontext.h>
|
|
+
|
|
+/*
|
|
+ * The OSF/1 version of <sys/procfs.h> makes gregset_t 46 entries long.
|
|
+ * I have no idea why that is so. For now, we just leave it at 33
|
|
+ * (32 general regs + processor status word).
|
|
+ */
|
|
+#define ELF_NGREG 33
|
|
+#define ELF_NFPREG 32
|
|
+
|
|
+typedef unsigned long elf_greg_t;
|
|
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
|
+
|
|
+typedef double elf_fpreg_t;
|
|
+typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/pthread_stack_min.h b/sysdeps/unix/sysv/linux/sw_64/bits/pthread_stack_min.h
|
|
new file mode 100644
|
|
index 00000000..7e785f4a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/pthread_stack_min.h
|
|
@@ -0,0 +1,20 @@
|
|
+/* Definition of PTHREAD_STACK_MIN. Linux/SW_64 version.
|
|
+ Copyright (C) 2023 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 Library General Public License as
|
|
+ published by the Free Software Foundation; either version 2 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
|
|
+ Library General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU Library General Public
|
|
+ License along with the GNU C Library. If not, see
|
|
+ <https://www.gnu.org/licenses/>. */
|
|
+
|
|
+/* Minimum size for a thread. We are free to choose a reasonable value. */
|
|
+#define PTHREAD_STACK_MIN 24576
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/resource.h b/sysdeps/unix/sysv/linux/sw_64/bits/resource.h
|
|
new file mode 100644
|
|
index 00000000..9c4a2d56
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/resource.h
|
|
@@ -0,0 +1,223 @@
|
|
+/* Bit values & structures for resource limits. Sw_64/Linux version.
|
|
+ Copyright (C) 1994-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_RESOURCE_H
|
|
+# error \
|
|
+ "Never use <bits/resource.h> directly; include <sys/resource.h> instead."
|
|
+#endif
|
|
+
|
|
+#include <bits/types.h>
|
|
+
|
|
+/* Transmute defines to enumerations. The macro re-definitions are
|
|
+ necessary because some programs want to test for operating system
|
|
+ features with #ifdef RUSAGE_SELF. In ISO C the reflexive
|
|
+ definition is a no-op. */
|
|
+
|
|
+/* Kinds of resource limit. */
|
|
+enum __rlimit_resource
|
|
+{
|
|
+ /* Per-process CPU limit, in seconds. */
|
|
+ RLIMIT_CPU = 0,
|
|
+#define RLIMIT_CPU RLIMIT_CPU
|
|
+
|
|
+ /* Largest file that can be created, in bytes. */
|
|
+ RLIMIT_FSIZE = 1,
|
|
+#define RLIMIT_FSIZE RLIMIT_FSIZE
|
|
+
|
|
+ /* Maximum size of data segment, in bytes. */
|
|
+ RLIMIT_DATA = 2,
|
|
+#define RLIMIT_DATA RLIMIT_DATA
|
|
+
|
|
+ /* Maximum size of stack segment, in bytes. */
|
|
+ RLIMIT_STACK = 3,
|
|
+#define RLIMIT_STACK RLIMIT_STACK
|
|
+
|
|
+ /* Largest core file that can be created, in bytes. */
|
|
+ RLIMIT_CORE = 4,
|
|
+#define RLIMIT_CORE RLIMIT_CORE
|
|
+
|
|
+ /* Largest resident set size, in bytes.
|
|
+ This affects swapping; processes that are exceeding their
|
|
+ resident set size will be more likely to have physical memory
|
|
+ taken from them. */
|
|
+ __RLIMIT_RSS = 5,
|
|
+#define RLIMIT_RSS __RLIMIT_RSS
|
|
+
|
|
+ /* Number of open files. */
|
|
+ RLIMIT_NOFILE = 6,
|
|
+ __RLIMIT_OFILE = RLIMIT_NOFILE, /* BSD name for same. */
|
|
+#define RLIMIT_NOFILE RLIMIT_NOFILE
|
|
+#define RLIMIT_OFILE __RLIMIT_OFILE
|
|
+
|
|
+ /* Address space limit (?) */
|
|
+ RLIMIT_AS = 7,
|
|
+#define RLIMIT_AS RLIMIT_AS
|
|
+
|
|
+ /* Number of processes. */
|
|
+ __RLIMIT_NPROC = 8,
|
|
+#define RLIMIT_NPROC __RLIMIT_NPROC
|
|
+
|
|
+ /* Locked-in-memory address space. */
|
|
+ __RLIMIT_MEMLOCK = 9,
|
|
+#define RLIMIT_MEMLOCK __RLIMIT_MEMLOCK
|
|
+
|
|
+ /* Maximum number of file locks. */
|
|
+ __RLIMIT_LOCKS = 10,
|
|
+#define RLIMIT_LOCKS __RLIMIT_LOCKS
|
|
+
|
|
+ /* Maximum number of pending signals. */
|
|
+ __RLIMIT_SIGPENDING = 11,
|
|
+#define RLIMIT_SIGPENDING __RLIMIT_SIGPENDING
|
|
+
|
|
+ /* Maximum bytes in POSIX message queues. */
|
|
+ __RLIMIT_MSGQUEUE = 12,
|
|
+#define RLIMIT_MSGQUEUE __RLIMIT_MSGQUEUE
|
|
+
|
|
+ /* Maximum nice priority allowed to raise to.
|
|
+ Nice levels 19 .. -20 correspond to 0 .. 39
|
|
+ values of this resource limit. */
|
|
+ __RLIMIT_NICE = 13,
|
|
+#define RLIMIT_NICE __RLIMIT_NICE
|
|
+
|
|
+ /* Maximum realtime priority allowed for non-priviledged
|
|
+ processes. */
|
|
+ __RLIMIT_RTPRIO = 14,
|
|
+#define RLIMIT_RTPRIO __RLIMIT_RTPRIO
|
|
+
|
|
+ /* Maximum CPU time in microseconds that a process scheduled under a
|
|
+ real-time scheduling policy may consume without making a blocking system
|
|
+ call before being forcibly descheduled. */
|
|
+ __RLIMIT_RTTIME = 15,
|
|
+#define RLIMIT_RTTIME __RLIMIT_RTTIME
|
|
+
|
|
+ __RLIMIT_NLIMITS = 16,
|
|
+ __RLIM_NLIMITS = __RLIMIT_NLIMITS
|
|
+#define RLIMIT_NLIMITS __RLIMIT_NLIMITS
|
|
+#define RLIM_NLIMITS __RLIM_NLIMITS
|
|
+};
|
|
+
|
|
+/* Value to indicate that there is no limit. */
|
|
+#ifndef __USE_FILE_OFFSET64
|
|
+# define RLIM_INFINITY ((__rlim_t) -1)
|
|
+#else
|
|
+# define RLIM_INFINITY 0xffffffffffffffffuLL
|
|
+#endif
|
|
+
|
|
+#ifdef __USE_LARGEFILE64
|
|
+# define RLIM64_INFINITY 0xffffffffffffffffuLL
|
|
+#endif
|
|
+
|
|
+/* We can represent all limits. */
|
|
+#define RLIM_SAVED_MAX RLIM_INFINITY
|
|
+#define RLIM_SAVED_CUR RLIM_INFINITY
|
|
+
|
|
+/* Type for resource quantity measurement. */
|
|
+#ifndef __USE_FILE_OFFSET64
|
|
+typedef __rlim_t rlim_t;
|
|
+#else
|
|
+typedef __rlim64_t rlim_t;
|
|
+#endif
|
|
+#ifdef __USE_LARGEFILE64
|
|
+typedef __rlim64_t rlim64_t;
|
|
+#endif
|
|
+
|
|
+struct rlimit
|
|
+{
|
|
+ /* The current (soft) limit. */
|
|
+ rlim_t rlim_cur;
|
|
+ /* The hard limit. */
|
|
+ rlim_t rlim_max;
|
|
+};
|
|
+
|
|
+#ifdef __USE_LARGEFILE64
|
|
+struct rlimit64
|
|
+{
|
|
+ /* The current (soft) limit. */
|
|
+ rlim64_t rlim_cur;
|
|
+ /* The hard limit. */
|
|
+ rlim64_t rlim_max;
|
|
+};
|
|
+#endif
|
|
+
|
|
+/* Whose usage statistics do you want? */
|
|
+enum __rusage_who
|
|
+{
|
|
+ /* The calling process. */
|
|
+ RUSAGE_SELF = 0,
|
|
+#define RUSAGE_SELF RUSAGE_SELF
|
|
+
|
|
+ /* All of its terminated child processes. */
|
|
+ RUSAGE_CHILDREN = -1
|
|
+#define RUSAGE_CHILDREN RUSAGE_CHILDREN
|
|
+
|
|
+#ifdef __USE_GNU
|
|
+ ,
|
|
+ /* The calling thread. */
|
|
+ RUSAGE_THREAD = 1
|
|
+# define RUSAGE_THREAD RUSAGE_THREAD
|
|
+/* Name for the same functionality on Solaris. */
|
|
+# define RUSAGE_LWP RUSAGE_THREAD
|
|
+#endif
|
|
+};
|
|
+
|
|
+#include <bits/types/struct_timeval.h>
|
|
+#include <bits/types/struct_rusage.h>
|
|
+
|
|
+/* Priority limits. */
|
|
+#define PRIO_MIN -20 /* Minimum priority a process can have. */
|
|
+#define PRIO_MAX 20 /* Maximum priority a process can have. */
|
|
+
|
|
+/* The type of the WHICH argument to `getpriority' and `setpriority',
|
|
+ indicating what flavor of entity the WHO argument specifies. */
|
|
+enum __priority_which
|
|
+{
|
|
+ PRIO_PROCESS = 0, /* WHO is a process ID. */
|
|
+#define PRIO_PROCESS PRIO_PROCESS
|
|
+ PRIO_PGRP = 1, /* WHO is a process group ID. */
|
|
+#define PRIO_PGRP PRIO_PGRP
|
|
+ PRIO_USER = 2 /* WHO is a user ID. */
|
|
+#define PRIO_USER PRIO_USER
|
|
+};
|
|
+
|
|
+__BEGIN_DECLS
|
|
+
|
|
+#ifdef __USE_GNU
|
|
+/* Modify and return resource limits of a process atomically. */
|
|
+# ifndef __USE_FILE_OFFSET64
|
|
+extern int prlimit (__pid_t __pid, enum __rlimit_resource __resource,
|
|
+ const struct rlimit *__new_limit,
|
|
+ struct rlimit *__old_limit) __THROW;
|
|
+# else
|
|
+# ifdef __REDIRECT_NTH
|
|
+extern int __REDIRECT_NTH (prlimit,
|
|
+ (__pid_t __pid, enum __rlimit_resource __resource,
|
|
+ const struct rlimit *__new_limit,
|
|
+ struct rlimit *__old_limit),
|
|
+ prlimit64);
|
|
+# else
|
|
+# define prlimit prlimit64
|
|
+# endif
|
|
+# endif
|
|
+# ifdef __USE_LARGEFILE64
|
|
+extern int prlimit64 (__pid_t __pid, enum __rlimit_resource __resource,
|
|
+ const struct rlimit64 *__new_limit,
|
|
+ struct rlimit64 *__old_limit) __THROW;
|
|
+# endif
|
|
+#endif
|
|
+
|
|
+__END_DECLS
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/sigaction.h b/sysdeps/unix/sysv/linux/sw_64/bits/sigaction.h
|
|
new file mode 100644
|
|
index 00000000..906d94b7
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/sigaction.h
|
|
@@ -0,0 +1,82 @@
|
|
+/* The proper definitions for Linux/Sw_64 sigaction.
|
|
+ Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _BITS_SIGACTION_H
|
|
+#define _BITS_SIGACTION_H 1
|
|
+
|
|
+#ifndef _SIGNAL_H
|
|
+# error "Never include <bits/sigaction.h> directly; use <signal.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Structure describing the action to be taken when a signal arrives. */
|
|
+struct sigaction
|
|
+{
|
|
+ /* Signal handler. */
|
|
+#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
|
|
+ union
|
|
+ {
|
|
+ /* Used if SA_SIGINFO is not set. */
|
|
+ __sighandler_t sa_handler;
|
|
+ /* Used if SA_SIGINFO is set. */
|
|
+ void (*sa_sigaction) (int, siginfo_t *, void *);
|
|
+ } __sigaction_handler;
|
|
+# define sa_handler __sigaction_handler.sa_handler
|
|
+# define sa_sigaction __sigaction_handler.sa_sigaction
|
|
+#else
|
|
+ __sighandler_t sa_handler;
|
|
+#endif
|
|
+
|
|
+ /* Additional set of signals to be blocked. */
|
|
+ __sigset_t sa_mask;
|
|
+
|
|
+ /* Special flags. */
|
|
+ int sa_flags;
|
|
+};
|
|
+
|
|
+/* Bits in `sa_flags'. */
|
|
+#define SA_NOCLDSTOP 0x00000004 /* Don't send SIGCHLD when children stop. */
|
|
+#define SA_NOCLDWAIT 0x00000020 /* Don't create zombie on child death. */
|
|
+#define SA_SIGINFO \
|
|
+ 0x00000040 /* Invoke signal-catching function with \
|
|
+ three arguments instead of one. */
|
|
+#if defined __USE_XOPEN_EXTENDED || defined __USE_MISC
|
|
+# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. \
|
|
+ */
|
|
+#endif
|
|
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
|
|
+# define SA_RESTART 0x00000002 /* Restart syscall on signal return. */
|
|
+# define SA_NODEFER \
|
|
+ 0x00000008 /* Don't automatically block the signal \
|
|
+ when its handler is being executed. */
|
|
+# define SA_RESETHAND 0x00000010 /* Reset to SIG_DFL on entry to handler. */
|
|
+#endif
|
|
+#ifdef __USE_MISC
|
|
+# define SA_INTERRUPT 0x20000000 /* Historical no-op. */
|
|
+
|
|
+/* Some aliases for the SA_ constants. */
|
|
+# define SA_NOMASK SA_NODEFER
|
|
+# define SA_ONESHOT SA_RESETHAND
|
|
+# define SA_STACK SA_ONSTACK
|
|
+#endif
|
|
+
|
|
+/* Values for the HOW argument to `sigprocmask'. */
|
|
+#define SIG_BLOCK 1 /* Block signals. */
|
|
+#define SIG_UNBLOCK 2 /* Unblock signals. */
|
|
+#define SIG_SETMASK 3 /* Set the set of blocked signals. */
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/signalfd.h b/sysdeps/unix/sysv/linux/sw_64/bits/signalfd.h
|
|
new file mode 100644
|
|
index 00000000..9474ffe3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/signalfd.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* Copyright (C) 2007-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_SIGNALFD_H
|
|
+# error \
|
|
+ "Never use <bits/signalfd.h> directly; include <sys/signalfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Flags for signalfd. */
|
|
+enum
|
|
+{
|
|
+ SFD_CLOEXEC = 010000000,
|
|
+#define SFD_CLOEXEC SFD_CLOEXEC
|
|
+ SFD_NONBLOCK = 000000004
|
|
+#define SFD_NONBLOCK SFD_NONBLOCK
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/signum-arch.h b/sysdeps/unix/sysv/linux/sw_64/bits/signum-arch.h
|
|
new file mode 100644
|
|
index 00000000..e36c7e86
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/signum-arch.h
|
|
@@ -0,0 +1,67 @@
|
|
+/* Signal number definitions. Linux/Sw_64 version.
|
|
+ Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _BITS_SIGNUM_ARCH_H
|
|
+#define _BITS_SIGNUM_ARCH_H 1
|
|
+
|
|
+#ifndef _SIGNAL_H
|
|
+# error "Never include <bits/signum-arch.h> directly; use <signal.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Adjustments and additions to the signal number constants for
|
|
+ Linux/Sw_64. Signal values on this platform were chosen for OSF/1
|
|
+ binary compatibility, and are therefore almost identical to the
|
|
+ BSD-derived defaults. */
|
|
+
|
|
+#define SIGEMT 7 /* Emulator trap (4.2 BSD). */
|
|
+#define SIGINFO 29 /* Information request (BSD). */
|
|
+#define SIGPWR SIGINFO /* Power failure imminent (System V). */
|
|
+
|
|
+/* Historical signals specified by POSIX. */
|
|
+#define SIGBUS 10 /* Bus error. */
|
|
+#define SIGSYS 12 /* Bad system call. */
|
|
+
|
|
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
|
|
+#define SIGURG 16 /* Urgent data is available at a socket. */
|
|
+#define SIGSTOP 17 /* Stop, unblockable. */
|
|
+#define SIGTSTP 18 /* Keyboard stop. */
|
|
+#define SIGCONT 19 /* Continue. */
|
|
+#define SIGCHLD 20 /* Child terminated or stopped. */
|
|
+#define SIGTTIN 21 /* Background read from control terminal. */
|
|
+#define SIGTTOU 22 /* Background write to control terminal. */
|
|
+#define SIGPOLL 23 /* Pollable event occurred (System V). */
|
|
+#define SIGXCPU 24 /* CPU time limit exceeded. */
|
|
+#define SIGVTALRM 26 /* Virtual timer expired. */
|
|
+#define SIGPROF 27 /* Profiling timer expired. */
|
|
+#define SIGXFSZ 25 /* File size limit exceeded. */
|
|
+#define SIGUSR1 30 /* User-defined signal 1. */
|
|
+#define SIGUSR2 31 /* User-defined signal 2. */
|
|
+
|
|
+/* Nonstandard signals found in all modern POSIX systems
|
|
+ (including both BSD and Linux). */
|
|
+#define SIGWINCH 28
|
|
+
|
|
+/* Archaic names for compatibility. */
|
|
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
|
|
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
|
|
+#define SIGCLD SIGCHLD /* Old System V name */
|
|
+
|
|
+#define __SIGRTMIN 32
|
|
+#define __SIGRTMAX 64
|
|
+
|
|
+#endif /* <signal.h> included. */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/sigstack.h b/sysdeps/unix/sysv/linux/sw_64/bits/sigstack.h
|
|
new file mode 100644
|
|
index 00000000..7af301ff
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/sigstack.h
|
|
@@ -0,0 +1,32 @@
|
|
+/* sigstack, sigaltstack definitions.
|
|
+ Copyright (C) 1998-2023 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/>. */
|
|
+
|
|
+#ifndef _BITS_SIGSTACK_H
|
|
+#define _BITS_SIGSTACK_H 1
|
|
+
|
|
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
|
|
+# error "Never include this file directly. Use <signal.h> instead"
|
|
+#endif
|
|
+
|
|
+/* Minimum stack size for a signal handler. */
|
|
+#define MINSIGSTKSZ 4096
|
|
+
|
|
+/* System default stack size. */
|
|
+#define SIGSTKSZ 16384
|
|
+
|
|
+#endif /* bits/sigstack.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/socket-constants.h b/sysdeps/unix/sysv/linux/sw_64/bits/socket-constants.h
|
|
new file mode 100644
|
|
index 00000000..cb1b5bec
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/socket-constants.h
|
|
@@ -0,0 +1,51 @@
|
|
+/* Socket constants which vary among Linux architectures. Version for sw_64.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_SOCKET_H
|
|
+# error \
|
|
+ "Never include <bits/socket-constants.h> directly; use <sys/socket.h> instead."
|
|
+#endif
|
|
+
|
|
+#define SOL_SOCKET 65535
|
|
+#define SO_ACCEPTCONN 4116
|
|
+#define SO_BROADCAST 32
|
|
+#define SO_DONTROUTE 16
|
|
+#define SO_ERROR 4103
|
|
+#define SO_KEEPALIVE 8
|
|
+#define SO_LINGER 128
|
|
+#define SO_OOBINLINE 256
|
|
+#define SO_RCVBUF 4098
|
|
+#define SO_RCVLOWAT 4112
|
|
+#define SO_RCVTIMEO 4114
|
|
+#define SO_REUSEADDR 4
|
|
+#define SO_SNDBUF 4097
|
|
+#define SO_SNDLOWAT 4113
|
|
+#define SO_SNDTIMEO 4115
|
|
+#define SO_TYPE 4104
|
|
+
|
|
+#define SO_RCVTIMEO_OLD 4114
|
|
+#define SO_SNDTIMEO_OLD 4115
|
|
+#define SO_RCVTIMEO_NEW 66
|
|
+#define SO_SNDTIMEO_NEW 67
|
|
+
|
|
+#define SO_TIMESTAMP_OLD 29
|
|
+#define SO_TIMESTAMPNS_OLD 35
|
|
+#define SO_TIMESTAMPING_OLD 37
|
|
+#define SO_TIMESTAMP_NEW 63
|
|
+#define SO_TIMESTAMPNS_NEW 64
|
|
+#define SO_TIMESTAMPING_NEW 65
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/socket_type.h b/sysdeps/unix/sysv/linux/sw_64/bits/socket_type.h
|
|
new file mode 100644
|
|
index 00000000..64452402
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/socket_type.h
|
|
@@ -0,0 +1,56 @@
|
|
+/* Define enum __socket_type for Linux/Sw_64.
|
|
+ Copyright (C) 1991-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_SOCKET_H
|
|
+# error \
|
|
+ "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Types of sockets. */
|
|
+enum __socket_type
|
|
+{
|
|
+ SOCK_STREAM = 1, /* Sequenced, reliable, connection-based
|
|
+ byte streams. */
|
|
+#define SOCK_STREAM SOCK_STREAM
|
|
+ SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams
|
|
+ of fixed maximum length. */
|
|
+#define SOCK_DGRAM SOCK_DGRAM
|
|
+ SOCK_RAW = 3, /* Raw protocol interface. */
|
|
+#define SOCK_RAW SOCK_RAW
|
|
+ SOCK_RDM = 4, /* Reliably-delivered messages. */
|
|
+#define SOCK_RDM SOCK_RDM
|
|
+ SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based,
|
|
+ datagrams of fixed maximum length. */
|
|
+#define SOCK_SEQPACKET SOCK_SEQPACKET
|
|
+ SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */
|
|
+#define SOCK_DCCP SOCK_DCCP
|
|
+ SOCK_PACKET = 10, /* Linux specific way of getting packets
|
|
+ at the dev level. For writing rarp and
|
|
+ other similar things on the user level. */
|
|
+#define SOCK_PACKET SOCK_PACKET
|
|
+
|
|
+ /* Flags to be ORed into the type parameter of socket and socketpair and
|
|
+ used for the flags parameter of paccept. */
|
|
+
|
|
+ SOCK_CLOEXEC = 010000000, /* Atomically set close-on-exec flag for the
|
|
+ new descriptor(s). */
|
|
+#define SOCK_CLOEXEC SOCK_CLOEXEC
|
|
+ SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as
|
|
+ non-blocking. */
|
|
+#define SOCK_NONBLOCK SOCK_NONBLOCK
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/statfs.h b/sysdeps/unix/sysv/linux/sw_64/bits/statfs.h
|
|
new file mode 100644
|
|
index 00000000..72c3f457
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/statfs.h
|
|
@@ -0,0 +1,64 @@
|
|
+/* Copyright (C) 1997-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_STATFS_H
|
|
+# error "Never include <bits/statfs.h> directly; use <sys/statfs.h> instead."
|
|
+#endif
|
|
+
|
|
+#include <bits/types.h> /* for __fsid_t and __fsblkcnt_t. */
|
|
+
|
|
+#ifndef __statfs_word
|
|
+# define __statfs_word long
|
|
+#endif
|
|
+
|
|
+struct statfs
|
|
+{
|
|
+ __statfs_word f_type;
|
|
+ __statfs_word f_bsize;
|
|
+ __statfs_word f_blocks;
|
|
+ __statfs_word f_bfree;
|
|
+ __statfs_word f_bavail;
|
|
+ __statfs_word f_files;
|
|
+ __statfs_word f_ffree;
|
|
+ __fsid_t f_fsid;
|
|
+ __statfs_word f_namelen;
|
|
+ __statfs_word f_frsize;
|
|
+ __statfs_word f_flags;
|
|
+ __statfs_word f_spare[4];
|
|
+};
|
|
+
|
|
+#ifdef __USE_LARGEFILE64
|
|
+struct statfs64
|
|
+{
|
|
+ __statfs_word f_type;
|
|
+ __statfs_word f_bsize;
|
|
+ __fsblkcnt64_t f_blocks;
|
|
+ __fsblkcnt64_t f_bfree;
|
|
+ __fsblkcnt64_t f_bavail;
|
|
+ __fsfilcnt64_t f_files;
|
|
+ __fsfilcnt64_t f_ffree;
|
|
+ __fsid_t f_fsid;
|
|
+ __statfs_word f_namelen;
|
|
+ __statfs_word f_frsize;
|
|
+ __statfs_word f_flags;
|
|
+ __statfs_word f_spare[4];
|
|
+};
|
|
+#endif
|
|
+
|
|
+/* Tell code we have this member. */
|
|
+#define _STATFS_F_NAMELEN
|
|
+#define _STATFS_F_FRSIZE
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/struct_stat.h b/sysdeps/unix/sysv/linux/sw_64/bits/struct_stat.h
|
|
new file mode 100644
|
|
index 00000000..f5de6cb1
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/struct_stat.h
|
|
@@ -0,0 +1,119 @@
|
|
+/* Definition for struct stat.
|
|
+ Copyright (C) 2020-2023 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/>. */
|
|
+
|
|
+#if !defined _SYS_STAT_H && !defined _FCNTL_H
|
|
+# error \
|
|
+ "Never include <bits/struct_stat.h> directly; use <sys/stat.h> instead."
|
|
+#endif
|
|
+
|
|
+#ifndef _BITS_STRUCT_STAT_H
|
|
+# define _BITS_STRUCT_STAT_H 1
|
|
+
|
|
+struct stat
|
|
+{
|
|
+ __dev_t st_dev; /* Device. */
|
|
+# if (defined __USE_FILE_OFFSET64 || defined __sw_64__) /* mod */
|
|
+ __ino64_t st_ino; /* File serial number. */
|
|
+# else
|
|
+ __ino_t st_ino; /* File serial number. */
|
|
+ int __pad0; /* 64-bit st_ino. */
|
|
+# endif
|
|
+ __dev_t st_rdev; /* Device number, if device. */
|
|
+ __off_t st_size; /* Size of file, in bytes. */
|
|
+# ifdef __USE_FILE_OFFSET64
|
|
+ __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */
|
|
+# else
|
|
+ __blkcnt_t st_blocks; /* Nr. 512-byte blocks allocated. */
|
|
+ int __pad1; /* 64-bit st_blocks. */
|
|
+# endif
|
|
+ __mode_t st_mode; /* File mode. */
|
|
+ __uid_t st_uid; /* User ID of the file's owner. */
|
|
+ __gid_t st_gid; /* Group ID of the file's group. */
|
|
+ __blksize_t st_blksize; /* Optimal block size for I/O. */
|
|
+ __nlink_t st_nlink; /* Link count. */
|
|
+ int __pad2; /* Real padding. */
|
|
+# ifdef __USE_XOPEN2K8
|
|
+ /* Nanosecond resolution timestamps are stored in a format
|
|
+ equivalent to 'struct timespec'. This is the type used
|
|
+ whenever possible but the Unix namespace rules do not allow the
|
|
+ identifier 'timespec' to appear in the <sys/stat.h> header.
|
|
+ Therefore we have to handle the use of this header in strictly
|
|
+ standard-compliant sources special. */
|
|
+ struct timespec st_atim; /* Time of last access. */
|
|
+ struct timespec st_mtim; /* Time of last modification. */
|
|
+ struct timespec st_ctim; /* Time of last status change. */
|
|
+# define st_atime st_atim.tv_sec /* Backward compatibility. */
|
|
+# define st_mtime st_mtim.tv_sec
|
|
+# define st_ctime st_ctim.tv_sec
|
|
+# else
|
|
+ __time_t st_atime; /* Time of last access. */
|
|
+ unsigned long int st_atimensec; /* Nscecs of last access. */
|
|
+ __time_t st_mtime; /* Time of last modification. */
|
|
+ unsigned long int st_mtimensec; /* Nsecs of last modification. */
|
|
+ __time_t st_ctime; /* Time of last status change. */
|
|
+ unsigned long int st_ctimensec; /* Nsecs of last status change. */
|
|
+# endif
|
|
+ long __glibc_reserved[3];
|
|
+};
|
|
+
|
|
+# ifdef __USE_LARGEFILE64
|
|
+/* Note stat64 is the same shape as stat. */
|
|
+struct stat64
|
|
+{
|
|
+ __dev_t st_dev; /* Device. */
|
|
+ __ino64_t st_ino; /* File serial number. */
|
|
+ __dev_t st_rdev; /* Device number, if device. */
|
|
+ __off_t st_size; /* Size of file, in bytes. */
|
|
+ __blkcnt64_t st_blocks; /* Nr. 512-byte blocks allocated. */
|
|
+ __mode_t st_mode; /* File mode. */
|
|
+ __uid_t st_uid; /* User ID of the file's owner. */
|
|
+ __gid_t st_gid; /* Group ID of the file's group. */
|
|
+ __blksize_t st_blksize; /* Optimal block size for I/O. */
|
|
+ __nlink_t st_nlink; /* Link count. */
|
|
+ int __pad0; /* Real padding. */
|
|
+# ifdef __USE_XOPEN2K8
|
|
+ /* Nanosecond resolution timestamps are stored in a format
|
|
+ equivalent to 'struct timespec'. This is the type used
|
|
+ whenever possible but the Unix namespace rules do not allow the
|
|
+ identifier 'timespec' to appear in the <sys/stat.h> header.
|
|
+ Therefore we have to handle the use of this header in strictly
|
|
+ standard-compliant sources special. */
|
|
+ struct timespec st_atim; /* Time of last access. */
|
|
+ struct timespec st_mtim; /* Time of last modification. */
|
|
+ struct timespec st_ctim; /* Time of last status change. */
|
|
+# define st_atime st_atim.tv_sec /* Backward compatibility. */
|
|
+# define st_mtime st_mtim.tv_sec
|
|
+# define st_ctime st_ctim.tv_sec
|
|
+# else
|
|
+ __time_t st_atime; /* Time of last access. */
|
|
+ unsigned long int st_atimensec; /* Nscecs of last access. */
|
|
+ __time_t st_mtime; /* Time of last modification. */
|
|
+ unsigned long int st_mtimensec; /* Nsecs of last modification. */
|
|
+ __time_t st_ctime; /* Time of last status change. */
|
|
+ unsigned long int st_ctimensec; /* Nsecs of last status change. */
|
|
+# endif
|
|
+ long __glibc_reserved[3];
|
|
+};
|
|
+# endif
|
|
+
|
|
+/* Tell code we have these members. */
|
|
+# define _STATBUF_ST_BLKSIZE
|
|
+# define _STATBUF_ST_RDEV
|
|
+# define _STATBUF_ST_NSEC
|
|
+
|
|
+#endif /* _BITS_STRUCT_STAT_H */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-baud.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-baud.h
|
|
new file mode 100644
|
|
index 00000000..675ee821
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-baud.h
|
|
@@ -0,0 +1,47 @@
|
|
+/* termios baud rate selection definitions. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-baud.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+#ifdef __USE_MISC
|
|
+# define CBAUD 0000037
|
|
+# define CBAUDEX 0000000
|
|
+# define CMSPAR 010000000000 /* mark or space (stick) parity */
|
|
+# define CRTSCTS 020000000000 /* flow control */
|
|
+#endif
|
|
+
|
|
+#define B57600 00020
|
|
+#define B115200 00021
|
|
+#define B230400 00022
|
|
+#define B460800 00023
|
|
+#define B500000 00024
|
|
+#define B576000 00025
|
|
+#define B921600 00026
|
|
+#define B1000000 00027
|
|
+#define B1152000 00030
|
|
+#define B1500000 00031
|
|
+#define B2000000 00032
|
|
+#define B2500000 00033
|
|
+#define B3000000 00034
|
|
+#define B3500000 00035
|
|
+#define B4000000 00036
|
|
+
|
|
+#define __MAX_BAUD B4000000
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cc.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cc.h
|
|
new file mode 100644
|
|
index 00000000..19728cf3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cc.h
|
|
@@ -0,0 +1,41 @@
|
|
+/* termios c_cc symbolic constant definitions. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-c_cc.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+/* c_cc characters */
|
|
+#define VEOF 0
|
|
+#define VEOL 1
|
|
+#define VEOL2 2
|
|
+#define VERASE 3
|
|
+#define VWERASE 4
|
|
+#define VKILL 5
|
|
+#define VREPRINT 6
|
|
+#define VSWTC 7
|
|
+#define VINTR 8
|
|
+#define VQUIT 9
|
|
+#define VSUSP 10
|
|
+#define VSTART 12
|
|
+#define VSTOP 13
|
|
+#define VLNEXT 14
|
|
+#define VDISCARD 15
|
|
+#define VMIN 16
|
|
+#define VTIME 17
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cflag.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cflag.h
|
|
new file mode 100644
|
|
index 00000000..e852f6e2
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_cflag.h
|
|
@@ -0,0 +1,39 @@
|
|
+/* termios control mode definitions. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-c_cflag.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+#define CSIZE 00001400
|
|
+#define CS5 00000000
|
|
+#define CS6 00000400
|
|
+#define CS7 00001000
|
|
+#define CS8 00001400
|
|
+
|
|
+#define CSTOPB 00002000
|
|
+#define CREAD 00004000
|
|
+#define PARENB 00010000
|
|
+#define PARODD 00020000
|
|
+#define HUPCL 00040000
|
|
+
|
|
+#define CLOCAL 00100000
|
|
+#ifdef __USE_MISC
|
|
+# define ADDRB 04000000000
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_iflag.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_iflag.h
|
|
new file mode 100644
|
|
index 00000000..d85fd1e2
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_iflag.h
|
|
@@ -0,0 +1,39 @@
|
|
+/* termios input mode definitions. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-c_iflags.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+/* c_iflag bits */
|
|
+#define IGNBRK 0000001
|
|
+#define BRKINT 0000002
|
|
+#define IGNPAR 0000004
|
|
+#define PARMRK 0000010
|
|
+#define INPCK 0000020
|
|
+#define ISTRIP 0000040
|
|
+#define INLCR 0000100
|
|
+#define IGNCR 0000200
|
|
+#define ICRNL 0000400
|
|
+#define IXON 0001000
|
|
+#define IXOFF 0002000
|
|
+#define IXANY 0004000
|
|
+#define IUCLC 0010000
|
|
+#define IMAXBEL 0020000
|
|
+#define IUTF8 0040000
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_lflag.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_lflag.h
|
|
new file mode 100644
|
|
index 00000000..50de240a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_lflag.h
|
|
@@ -0,0 +1,43 @@
|
|
+/* termios local mode definitions. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-c_lflag.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+/* c_lflag bits */
|
|
+#define ISIG 0x00000080
|
|
+#define ICANON 0x00000100
|
|
+#if defined __USE_MISC || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
|
|
+# define XCASE 0x00004000
|
|
+#endif
|
|
+#define ECHO 0x00000008
|
|
+#define ECHOE 0x00000002
|
|
+#define ECHOK 0x00000004
|
|
+#define ECHONL 0x00000010
|
|
+#define NOFLSH 0x80000000
|
|
+#define TOSTOP 0x00400000
|
|
+#ifdef __USE_MISC
|
|
+# define ECHOCTL 0x00000040
|
|
+# define ECHOPRT 0x00000020
|
|
+# define ECHOKE 0x00000001
|
|
+# define FLUSHO 0x00800000
|
|
+# define PENDIN 0x20000000
|
|
+#endif
|
|
+#define IEXTEN 0x00000400
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_oflag.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_oflag.h
|
|
new file mode 100644
|
|
index 00000000..bd9eda92
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-c_oflag.h
|
|
@@ -0,0 +1,67 @@
|
|
+/* termios output mode definitions. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-c_oflag.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+/* c_oflag bits */
|
|
+#define OPOST 0000001
|
|
+#define ONLCR 0000002
|
|
+#define OLCUC 0000004
|
|
+
|
|
+#define OCRNL 0000010
|
|
+#define ONOCR 0000020
|
|
+#define ONLRET 0000040
|
|
+
|
|
+#define OFILL 00000100
|
|
+#define OFDEL 00000200
|
|
+#if defined __USE_MISC || defined __USE_XOPEN
|
|
+# define NLDLY 00001400
|
|
+# define NL0 00000000
|
|
+# define NL1 00000400
|
|
+# if defined __USE_MISC
|
|
+# define NL2 00001000
|
|
+# define NL3 00001400
|
|
+# endif
|
|
+# define TABDLY 00006000
|
|
+# define TAB0 00000000
|
|
+# define TAB1 00002000
|
|
+# define TAB2 00004000
|
|
+# define TAB3 00006000
|
|
+# define CRDLY 00030000
|
|
+# define CR0 00000000
|
|
+# define CR1 00010000
|
|
+# define CR2 00020000
|
|
+# define CR3 00030000
|
|
+# define FFDLY 00040000
|
|
+# define FF0 00000000
|
|
+# define FF1 00040000
|
|
+# define BSDLY 00100000
|
|
+# define BS0 00000000
|
|
+# define BS1 00100000
|
|
+#endif
|
|
+
|
|
+#define VTDLY 00200000
|
|
+#define VT0 00000000
|
|
+#define VT1 00200000
|
|
+
|
|
+#ifdef __USE_MISC
|
|
+# define XTABS TAB3
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/termios-struct.h b/sysdeps/unix/sysv/linux/sw_64/bits/termios-struct.h
|
|
new file mode 100644
|
|
index 00000000..0c5f0d4c
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/termios-struct.h
|
|
@@ -0,0 +1,38 @@
|
|
+/* struct termios definition. Linux/sw_64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+#ifndef _TERMIOS_H
|
|
+# error \
|
|
+ "Never include <bits/termios-struct.h> directly; use <termios.h> instead."
|
|
+#endif
|
|
+
|
|
+/* SW_64 has C_CC before C_LINE compare to Linux generic definition. */
|
|
+#define NCCS 32
|
|
+struct termios
|
|
+{
|
|
+ tcflag_t c_iflag; /* input mode flags */
|
|
+ tcflag_t c_oflag; /* output mode flags */
|
|
+ tcflag_t c_cflag; /* control mode flags */
|
|
+ tcflag_t c_lflag; /* local mode flags */
|
|
+ cc_t c_cc[NCCS]; /* control characters */
|
|
+ cc_t c_line; /* line discipline (== c_cc[33]) */
|
|
+ speed_t c_ispeed; /* input speed */
|
|
+ speed_t c_ospeed; /* output speed */
|
|
+#define _HAVE_STRUCT_TERMIOS_C_ISPEED 1
|
|
+#define _HAVE_STRUCT_TERMIOS_C_OSPEED 1
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/timerfd.h b/sysdeps/unix/sysv/linux/sw_64/bits/timerfd.h
|
|
new file mode 100644
|
|
index 00000000..a6f1465d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/timerfd.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* Copyright (C) 2008-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_TIMERFD_H
|
|
+# error \
|
|
+ "Never use <bits/timerfd.h> directly; include <sys/timerfd.h> instead."
|
|
+#endif
|
|
+
|
|
+/* Bits to be set in the FLAGS parameter of `timerfd_create'. */
|
|
+enum
|
|
+{
|
|
+ TFD_CLOEXEC = 010000000,
|
|
+#define TFD_CLOEXEC TFD_CLOEXEC
|
|
+ TFD_NONBLOCK = 000000004
|
|
+#define TFD_NONBLOCK TFD_NONBLOCK
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/typesizes.h b/sysdeps/unix/sysv/linux/sw_64/bits/typesizes.h
|
|
new file mode 100644
|
|
index 00000000..64eb96f3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/typesizes.h
|
|
@@ -0,0 +1,87 @@
|
|
+/* bits/typesizes.h -- underlying types for *_t. Linux/Sw_64 version.
|
|
+ Copyright (C) 2002-2023 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/>. */
|
|
+
|
|
+#ifndef _BITS_TYPES_H
|
|
+# error \
|
|
+ "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
|
|
+#endif
|
|
+
|
|
+#ifndef _BITS_TYPESIZES_H
|
|
+# define _BITS_TYPESIZES_H 1
|
|
+
|
|
+/* See <bits/types.h> for the meaning of these macros. This file exists so
|
|
+ that <bits/types.h> need not vary across different GNU platforms. */
|
|
+
|
|
+# define __DEV_T_TYPE __U64_TYPE
|
|
+# define __UID_T_TYPE __U32_TYPE
|
|
+# define __GID_T_TYPE __U32_TYPE
|
|
+# define __INO_T_TYPE __U64_TYPE
|
|
+# define __INO64_T_TYPE __U64_TYPE
|
|
+# define __MODE_T_TYPE __U32_TYPE
|
|
+# define __NLINK_T_TYPE __U32_TYPE
|
|
+# define __OFF_T_TYPE __SLONGWORD_TYPE
|
|
+# define __OFF64_T_TYPE __S64_TYPE
|
|
+# define __PID_T_TYPE __S32_TYPE
|
|
+# define __RLIM_T_TYPE __ULONGWORD_TYPE
|
|
+# define __RLIM64_T_TYPE __U64_TYPE
|
|
+# define __BLKCNT_T_TYPE __U32_TYPE
|
|
+# define __BLKCNT64_T_TYPE __U64_TYPE
|
|
+# define __FSBLKCNT_T_TYPE __S32_TYPE
|
|
+# define __FSBLKCNT64_T_TYPE __S64_TYPE
|
|
+# define __FSFILCNT_T_TYPE __U32_TYPE
|
|
+# define __FSFILCNT64_T_TYPE __U64_TYPE
|
|
+# define __ID_T_TYPE __U32_TYPE
|
|
+# define __CLOCK_T_TYPE __SLONGWORD_TYPE
|
|
+# define __TIME_T_TYPE __SLONGWORD_TYPE
|
|
+# define __USECONDS_T_TYPE __U32_TYPE
|
|
+# define __SUSECONDS_T_TYPE __S64_TYPE
|
|
+# define __SUSECONDS64_T_TYPE __S64_TYPE
|
|
+# define __DADDR_T_TYPE __S32_TYPE
|
|
+# define __KEY_T_TYPE __S32_TYPE
|
|
+# define __CLOCKID_T_TYPE __S32_TYPE
|
|
+# define __TIMER_T_TYPE void *
|
|
+# define __BLKSIZE_T_TYPE __U32_TYPE
|
|
+# define __FSID_T_TYPE \
|
|
+ struct \
|
|
+ { \
|
|
+ int __val[2]; \
|
|
+ }
|
|
+# define __SSIZE_T_TYPE __SWORD_TYPE
|
|
+# define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
|
|
+# define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
|
|
+# define __CPU_MASK_TYPE __ULONGWORD_TYPE
|
|
+# define __FSWORD_T_TYPE __S32_TYPE
|
|
+
|
|
+/* Tell the libc code that off_t and off64_t are actually the same type
|
|
+ for all ABI purposes, even if possibly expressed as different base types
|
|
+ for C type-checking purposes. */
|
|
+# define __OFF_T_MATCHES_OFF64_T 1
|
|
+
|
|
+/* And for __rlim_t and __rlim64_t. */
|
|
+# define __RLIM_T_MATCHES_RLIM64_T 1
|
|
+
|
|
+/* Not for fsblkcnt_t, fsblkcnt64_t, fsfilcnt_t and fsfilcnt64_t. */
|
|
+# define __STATFS_MATCHES_STATFS64 0
|
|
+
|
|
+/* And for getitimer, setitimer and rusage */
|
|
+# define __KERNEL_OLD_TIMEVAL_MATCHES_TIMEVAL64 1
|
|
+
|
|
+/* Number of descriptors that can fit in an `fd_set'. */
|
|
+# define __FD_SETSIZE 1024
|
|
+
|
|
+#endif /* bits/typesizes.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/bits/wordsize.h b/sysdeps/unix/sysv/linux/sw_64/bits/wordsize.h
|
|
new file mode 100644
|
|
index 00000000..36e67434
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/bits/wordsize.h
|
|
@@ -0,0 +1,19 @@
|
|
+/* Copyright (C) 1999-2023 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/>. */
|
|
+
|
|
+#define __WORDSIZE 64
|
|
+#define __WORDSIZE_TIME64_COMPAT32 0
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/brk_call.h b/sysdeps/unix/sysv/linux/sw_64/brk_call.h
|
|
new file mode 100644
|
|
index 00000000..67419149
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/brk_call.h
|
|
@@ -0,0 +1,27 @@
|
|
+/* Invoke the brk system call. Sw_64 version.
|
|
+ Copyright (C) 2023 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/>. */
|
|
+
|
|
+static inline void *
|
|
+__brk_call (void *addr)
|
|
+{
|
|
+ unsigned long int result = INTERNAL_SYSCALL_CALL (brk, addr);
|
|
+ if (result == -ENOMEM)
|
|
+ /* Mimic the default error reporting behavior. */
|
|
+ result = INTERNAL_SYSCALL_CALL (brk, 0);
|
|
+ return (void *) result;
|
|
+}
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/dl-auxv.h b/sysdeps/unix/sysv/linux/sw_64/dl-auxv.h
|
|
new file mode 100644
|
|
index 00000000..5f1d7b71
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/dl-auxv.h
|
|
@@ -0,0 +1,40 @@
|
|
+/* Auxiliary vector processing for Linux/Sw_64.
|
|
+ Copyright (C) 2007-2023 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/>. */
|
|
+
|
|
+/* Scan the Aux Vector for the cache shape entries. */
|
|
+
|
|
+extern long __libc_sw_64_cache_shape[4];
|
|
+#define DL_PLATFORM_AUXV \
|
|
+ __libc_sw_64_cache_shape[0] = auxv_values[AT_L1I_CACHESHAPE]; \
|
|
+ __libc_sw_64_cache_shape[1] = auxv_values[AT_L1D_CACHESHAPE]; \
|
|
+ __libc_sw_64_cache_shape[2] = auxv_values[AT_L2_CACHESHAPE]; \
|
|
+ __libc_sw_64_cache_shape[3] = auxv_values[AT_L3_CACHESHAPE];
|
|
+/*#define DL_PLATFORM_AUXV \
|
|
+ case AT_L1I_CACHESHAPE: \
|
|
+ __libc_sw_64_cache_shape[0] = av->a_un.a_val; \
|
|
+ break; \
|
|
+ case AT_L1D_CACHESHAPE: \
|
|
+ __libc_sw_64_cache_shape[1] = av->a_un.a_val; \
|
|
+ break; \
|
|
+ case AT_L2_CACHESHAPE: \
|
|
+ __libc_sw_64_cache_shape[2] = av->a_un.a_val; \
|
|
+ break; \
|
|
+ case AT_L3_CACHESHAPE: \
|
|
+ __libc_sw_64_cache_shape[3] = av->a_un.a_val; \
|
|
+ break;
|
|
+*/
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/dl-support.c b/sysdeps/unix/sysv/linux/sw_64/dl-support.c
|
|
new file mode 100644
|
|
index 00000000..29021767
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/dl-support.c
|
|
@@ -0,0 +1,2 @@
|
|
+#include "dl-auxv.h"
|
|
+#include <elf/dl-support.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/dl-sysdep.c b/sysdeps/unix/sysv/linux/sw_64/dl-sysdep.c
|
|
new file mode 100644
|
|
index 00000000..be352fd9
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/dl-sysdep.c
|
|
@@ -0,0 +1,5 @@
|
|
+#include "dl-auxv.h"
|
|
+
|
|
+long __libc_sw_64_cache_shape[4] = { -2, -2, -2, -2 };
|
|
+
|
|
+#include <sysdeps/unix/sysv/linux/dl-sysdep.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/errlist-compat.c b/sysdeps/unix/sysv/linux/sw_64/errlist-compat.c
|
|
new file mode 100644
|
|
index 00000000..284ce7c5
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/errlist-compat.c
|
|
@@ -0,0 +1,43 @@
|
|
+/* Linux sys_errlist compat symbol definitions. Sw_64 version.
|
|
+ Copyright (C) 2020-2023 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 <errlist-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+DEFINE_COMPAT_ERRLIST (131, GLIBC_2_0)
|
|
+#endif
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3)
|
|
+DEFINE_COMPAT_ERRLIST (131, GLIBC_2_1)
|
|
+#endif
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_4)
|
|
+DEFINE_COMPAT_ERRLIST (132, GLIBC_2_3)
|
|
+#endif
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_4, GLIBC_2_12)
|
|
+DEFINE_COMPAT_ERRLIST (138, GLIBC_2_4)
|
|
+#endif
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_12, GLIBC_2_16)
|
|
+DEFINE_COMPAT_ERRLIST (139, GLIBC_2_12)
|
|
+#endif
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_16, GLIBC_2_32)
|
|
+DEFINE_COMPAT_ERRLIST (140, GLIBC_2_16)
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/fraiseexcpt.S b/sysdeps/unix/sysv/linux/sw_64/fraiseexcpt.S
|
|
new file mode 100644
|
|
index 00000000..c3c8b710
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/fraiseexcpt.S
|
|
@@ -0,0 +1,58 @@
|
|
+/* Copyright (C) 2004-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include "kernel_sysinfo.h"
|
|
+
|
|
+
|
|
+ .text
|
|
+
|
|
+ENTRY(__feraiseexcept)
|
|
+ cfi_startproc
|
|
+ PSEUDO_PROLOGUE
|
|
+
|
|
+ ldi sp, -16(sp)
|
|
+ cfi_adjust_cfa_offset (16)
|
|
+
|
|
+ ldi v0, __NR_setsysinfo
|
|
+ stl a0, 0(sp)
|
|
+ mov sp, a1
|
|
+ ldi a0, SSI_IEEE_RAISE_EXCEPTION
|
|
+ sys_call HMC_callsys
|
|
+
|
|
+ ldi sp, 16(sp)
|
|
+ cfi_adjust_cfa_offset (-16)
|
|
+
|
|
+ /* Here in libm we can't use SYSCALL_ERROR_LABEL. Nor is it clear
|
|
+ that we'd want to set errno anyway. All we're required to do is
|
|
+ return non-zero on error. Which is exactly A3. */
|
|
+ mov a3, v0
|
|
+ ret
|
|
+
|
|
+END(__feraiseexcept)
|
|
+ cfi_endproc
|
|
+
|
|
+#if IS_IN (libm)
|
|
+# include <shlib-compat.h>
|
|
+# if SHLIB_COMPAT (libm, GLIBC_2_1, GLIBC_2_2)
|
|
+strong_alias (__feraiseexcept, __old_feraiseexcept)
|
|
+compat_symbol (libm, __old_feraiseexcept, feraiseexcept, GLIBC_2_1);
|
|
+# endif
|
|
+libm_hidden_def (__feraiseexcept)
|
|
+libm_hidden_ver (__feraiseexcept, feraiseexcept)
|
|
+versioned_symbol (libm, __feraiseexcept, feraiseexcept, GLIBC_2_2);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/fstatfs.c b/sysdeps/unix/sysv/linux/sw_64/fstatfs.c
|
|
new file mode 100644
|
|
index 00000000..bb184148
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/fstatfs.c
|
|
@@ -0,0 +1,29 @@
|
|
+/* Get filesystem statistics. Linux/sw_64.
|
|
+ Copyright (C) 2011-2023 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 <sys/statfs.h>
|
|
+#include <kernel_stat.h>
|
|
+#include <sysdep.h>
|
|
+
|
|
+/* Return information about the filesystem on which FD resides. */
|
|
+int
|
|
+__fstatfs (int fd, struct statfs *buf)
|
|
+{
|
|
+ return INLINE_SYSCALL_CALL (fstatfs, fd, buf);
|
|
+}
|
|
+libc_hidden_def (__fstatfs) weak_alias (__fstatfs, fstatfs)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/fxstat64.c b/sysdeps/unix/sysv/linux/sw_64/fxstat64.c
|
|
new file mode 100644
|
|
index 00000000..df56314b
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/fxstat64.c
|
|
@@ -0,0 +1,45 @@
|
|
+/* fxstat64 using old-style Unix stat system call.
|
|
+ Copyright (C) 2004-2023 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/>. */
|
|
+
|
|
+#define __fxstat __redirect___fxstat64
|
|
+#include <sys/stat.h>
|
|
+#undef __fxstat
|
|
+#include <kernel_stat.h>
|
|
+#include <sysdep.h>
|
|
+#include <xstatconv.h>
|
|
+
|
|
+/* Get information about the file NAME in BUF. */
|
|
+int
|
|
+__fxstat64 (int vers, int fd, struct stat64 *buf)
|
|
+{
|
|
+ switch (vers)
|
|
+ {
|
|
+ case _STAT_VER_KERNEL64:
|
|
+ return INLINE_SYSCALL_CALL (fstat64, fd, buf);
|
|
+
|
|
+ default:
|
|
+ {
|
|
+ struct kernel_stat kbuf;
|
|
+ int r = INTERNAL_SYSCALL_CALL (fstat, fd, &kbuf);
|
|
+ if (r == 0)
|
|
+ return __xstat_conv (vers, &kbuf, buf);
|
|
+ return INLINE_SYSCALL_ERROR_RETURN_VALUE (-r);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+strong_alias (__fxstat64, __fxstat);
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/fxstatat64.c b/sysdeps/unix/sysv/linux/sw_64/fxstatat64.c
|
|
new file mode 100644
|
|
index 00000000..a274b0db
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/fxstatat64.c
|
|
@@ -0,0 +1,32 @@
|
|
+/* fxstat using old-style Unix stat system call.
|
|
+ Copyright (C) 2004-2023 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/>. */
|
|
+
|
|
+#define __fxstatat __redirect___fxstatat64
|
|
+#include <sys/stat.h>
|
|
+#undef __fxstatat
|
|
+#include <kernel_stat.h>
|
|
+#include <sysdep.h>
|
|
+#include <xstatconv.h>
|
|
+
|
|
+/* Get information about the file NAME in BUF. */
|
|
+int
|
|
+__fxstatat64 (int vers, int fd, const char *file, struct stat64 *st, int flag)
|
|
+{
|
|
+ return INLINE_SYSCALL_CALL (fstatat64, fd, file, st, flag);
|
|
+}
|
|
+strong_alias (__fxstatat64, __fxstatat);
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getclktck.c b/sysdeps/unix/sysv/linux/sw_64/getclktck.c
|
|
new file mode 100644
|
|
index 00000000..111fad85
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getclktck.c
|
|
@@ -0,0 +1,2 @@
|
|
+#define SYSTEM_CLK_TCK 1024
|
|
+#include <sysdeps/unix/sysv/linux/getclktck.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getcontext.S b/sysdeps/unix/sysv/linux/sw_64/getcontext.S
|
|
new file mode 100644
|
|
index 00000000..f1cc76f2
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getcontext.S
|
|
@@ -0,0 +1,440 @@
|
|
+/* Save current context.
|
|
+ Copyright (C) 2004-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <ucontext-offsets.h>
|
|
+
|
|
+/* ??? Should be a better place for this that's asm friendly. */
|
|
+#define SIG_BLOCK 1
|
|
+
|
|
+
|
|
+ENTRY (__getcontext)
|
|
+#ifdef PROF
|
|
+ ldgp gp, 0(pv)
|
|
+ .set noat
|
|
+ ldi AT, _mcount
|
|
+ call AT, (AT), _mcount
|
|
+ .set at
|
|
+ .prologue 1
|
|
+#else
|
|
+ .prologue 0
|
|
+#endif
|
|
+
|
|
+ bsr $0, __getcontext_x
|
|
+ mov $31, $0
|
|
+ ret
|
|
+
|
|
+END(__getcontext)
|
|
+weak_alias (__getcontext, getcontext)
|
|
+
|
|
+
|
|
+/* An internal routine used by getcontext and setcontext.
|
|
+ The incomming return address register is $0. */
|
|
+
|
|
+ .align 4
|
|
+ .globl __getcontext_x
|
|
+ .hidden __getcontext_x
|
|
+ .usepv __getcontext_x, no
|
|
+
|
|
+ cfi_startproc
|
|
+ cfi_return_column (64)
|
|
+__getcontext_x:
|
|
+ cfi_register (64, 0)
|
|
+
|
|
+ .set noat
|
|
+
|
|
+ /* Return value of getcontext. $0 is the only register
|
|
+ whose value is not preserved. */
|
|
+ stl $31, UC_SIGCTX+SC_REGS($16)
|
|
+
|
|
+ /* Store all registers into the context. */
|
|
+ stl $1, UC_SIGCTX+SC_REGS+1*8($16)
|
|
+ stl $2, UC_SIGCTX+SC_REGS+2*8($16)
|
|
+ stl $3, UC_SIGCTX+SC_REGS+3*8($16)
|
|
+ stl $4, UC_SIGCTX+SC_REGS+4*8($16)
|
|
+ stl $5, UC_SIGCTX+SC_REGS+5*8($16)
|
|
+ stl $6, UC_SIGCTX+SC_REGS+6*8($16)
|
|
+ stl $7, UC_SIGCTX+SC_REGS+7*8($16)
|
|
+ stl $8, UC_SIGCTX+SC_REGS+8*8($16)
|
|
+ stl $9, UC_SIGCTX+SC_REGS+9*8($16)
|
|
+ stl $10, UC_SIGCTX+SC_REGS+10*8($16)
|
|
+ stl $11, UC_SIGCTX+SC_REGS+11*8($16)
|
|
+ stl $12, UC_SIGCTX+SC_REGS+12*8($16)
|
|
+ stl $13, UC_SIGCTX+SC_REGS+13*8($16)
|
|
+ stl $14, UC_SIGCTX+SC_REGS+14*8($16)
|
|
+ stl $15, UC_SIGCTX+SC_REGS+15*8($16)
|
|
+ stl $16, UC_SIGCTX+SC_REGS+16*8($16)
|
|
+ stl $17, UC_SIGCTX+SC_REGS+17*8($16)
|
|
+ stl $18, UC_SIGCTX+SC_REGS+18*8($16)
|
|
+ stl $19, UC_SIGCTX+SC_REGS+19*8($16)
|
|
+ stl $20, UC_SIGCTX+SC_REGS+20*8($16)
|
|
+ stl $21, UC_SIGCTX+SC_REGS+21*8($16)
|
|
+ stl $22, UC_SIGCTX+SC_REGS+22*8($16)
|
|
+ stl $23, UC_SIGCTX+SC_REGS+23*8($16)
|
|
+ stl $24, UC_SIGCTX+SC_REGS+24*8($16)
|
|
+ stl $25, UC_SIGCTX+SC_REGS+25*8($16)
|
|
+ stl $26, UC_SIGCTX+SC_REGS+26*8($16)
|
|
+ stl $27, UC_SIGCTX+SC_REGS+27*8($16)
|
|
+ stl $28, UC_SIGCTX+SC_REGS+28*8($16)
|
|
+ stl $29, UC_SIGCTX+SC_REGS+29*8($16)
|
|
+ stl $30, UC_SIGCTX+SC_REGS+30*8($16)
|
|
+ stl $31, UC_SIGCTX+SC_REGS+31*8($16)
|
|
+#ifndef SW_64
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+1*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+2*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+3*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+4*8($16)
|
|
+
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+5*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+6*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+7*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+8*8($16)
|
|
+
|
|
+ fstd $f2, UC_SIGCTX+SC_FPREGS+9*8($16)
|
|
+ srlow $f2, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+10*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+11*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+12*8($16)
|
|
+
|
|
+ fstd $f3, UC_SIGCTX+SC_FPREGS+13*8($16)
|
|
+ srlow $f3, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+14*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+15*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+16*8($16)
|
|
+
|
|
+ fstd $f4, UC_SIGCTX+SC_FPREGS+17*8($16)
|
|
+ srlow $f4, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+18*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+19*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+20*8($16)
|
|
+
|
|
+ fstd $f5, UC_SIGCTX+SC_FPREGS+21*8($16)
|
|
+ srlow $f5, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+22*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+23*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+24*8($16)
|
|
+
|
|
+ fstd $f6, UC_SIGCTX+SC_FPREGS+25*8($16)
|
|
+ srlow $f6, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+26*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+27*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+28*8($16)
|
|
+
|
|
+ fstd $f7, UC_SIGCTX+SC_FPREGS+29*8($16)
|
|
+ srlow $f7, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+30*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+31*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+32*8($16)
|
|
+
|
|
+ fstd $f8, UC_SIGCTX+SC_FPREGS+33*8($16)
|
|
+ srlow $f8, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+34*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+35*8($16)
|
|
+ srlow $f0, 0x40, $f0
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+36*8($16)
|
|
+
|
|
+ fstd $f9, UC_SIGCTX+SC_FPREGS+37*8($16)
|
|
+ srlow $f9, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+38*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+39*8($16)
|
|
+ srlow $f1, 0x40, $f1
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+40*8($16)
|
|
+
|
|
+ fstd $f10, UC_SIGCTX+SC_FPREGS+41*8($16)
|
|
+ srlow $f10, 0x40, $f10
|
|
+ fstd $f10, UC_SIGCTX+SC_FPREGS+42*8($16)
|
|
+ srlow $f10, 0x40, $f10
|
|
+ fstd $f10, UC_SIGCTX+SC_FPREGS+43*8($16)
|
|
+ srlow $f10, 0x40, $f10
|
|
+ fstd $f10, UC_SIGCTX+SC_FPREGS+44*8($16)
|
|
+
|
|
+ fstd $f11, UC_SIGCTX+SC_FPREGS+45*8($16)
|
|
+ srlow $f11, 0x40, $f11
|
|
+ fstd $f11, UC_SIGCTX+SC_FPREGS+46*8($16)
|
|
+ srlow $f11, 0x40, $f11
|
|
+ fstd $f11, UC_SIGCTX+SC_FPREGS+47*8($16)
|
|
+ srlow $f11, 0x40, $f11
|
|
+ fstd $f11, UC_SIGCTX+SC_FPREGS+48*8($16)
|
|
+
|
|
+ fstd $f12, UC_SIGCTX+SC_FPREGS+49*8($16)
|
|
+ srlow $f12, 0x40, $f12
|
|
+ fstd $f12, UC_SIGCTX+SC_FPREGS+50*8($16)
|
|
+ srlow $f12, 0x40, $f12
|
|
+ fstd $f12, UC_SIGCTX+SC_FPREGS+51*8($16)
|
|
+ srlow $f12, 0x40, $f12
|
|
+ fstd $f12, UC_SIGCTX+SC_FPREGS+52*8($16)
|
|
+
|
|
+ fstd $f13, UC_SIGCTX+SC_FPREGS+53*8($16)
|
|
+ srlow $f13, 0x40, $f13
|
|
+ fstd $f13, UC_SIGCTX+SC_FPREGS+54*8($16)
|
|
+ srlow $f13, 0x40, $f13
|
|
+ fstd $f13, UC_SIGCTX+SC_FPREGS+55*8($16)
|
|
+ srlow $f13, 0x40, $f13
|
|
+ fstd $f13, UC_SIGCTX+SC_FPREGS+56*8($16)
|
|
+
|
|
+ fstd $f14, UC_SIGCTX+SC_FPREGS+57*8($16)
|
|
+ srlow $f14, 0x40, $f14
|
|
+ fstd $f14, UC_SIGCTX+SC_FPREGS+58*8($16)
|
|
+ srlow $f14, 0x40, $f14
|
|
+ fstd $f14, UC_SIGCTX+SC_FPREGS+59*8($16)
|
|
+ srlow $f14, 0x40, $f14
|
|
+ fstd $f14, UC_SIGCTX+SC_FPREGS+60*8($16)
|
|
+
|
|
+ fstd $f15, UC_SIGCTX+SC_FPREGS+61*8($16)
|
|
+ srlow $f15, 0x40, $f15
|
|
+ fstd $f15, UC_SIGCTX+SC_FPREGS+62*8($16)
|
|
+ srlow $f15, 0x40, $f15
|
|
+ fstd $f15, UC_SIGCTX+SC_FPREGS+63*8($16)
|
|
+ srlow $f15, 0x40, $f15
|
|
+ fstd $f15, UC_SIGCTX+SC_FPREGS+64*8($16)
|
|
+
|
|
+ fstd $f16, UC_SIGCTX+SC_FPREGS+65*8($16)
|
|
+ srlow $f16, 0x40, $f16
|
|
+ fstd $f16, UC_SIGCTX+SC_FPREGS+66*8($16)
|
|
+ srlow $f16, 0x40, $f16
|
|
+ fstd $f16, UC_SIGCTX+SC_FPREGS+67*8($16)
|
|
+ srlow $f16, 0x40, $f16
|
|
+ fstd $f16, UC_SIGCTX+SC_FPREGS+68*8($16)
|
|
+
|
|
+ fstd $f17, UC_SIGCTX+SC_FPREGS+69*8($16)
|
|
+ srlow $f17, 0x40, $f17
|
|
+ fstd $f17, UC_SIGCTX+SC_FPREGS+70*8($16)
|
|
+ srlow $f17, 0x40, $f17
|
|
+ fstd $f17, UC_SIGCTX+SC_FPREGS+71*8($16)
|
|
+ srlow $f17, 0x40, $f17
|
|
+ fstd $f17, UC_SIGCTX+SC_FPREGS+72*8($16)
|
|
+
|
|
+ fstd $f18, UC_SIGCTX+SC_FPREGS+73*8($16)
|
|
+ srlow $f18, 0x40, $f18
|
|
+ fstd $f18, UC_SIGCTX+SC_FPREGS+74*8($16)
|
|
+ srlow $f18, 0x40, $f18
|
|
+ fstd $f18, UC_SIGCTX+SC_FPREGS+75*8($16)
|
|
+ srlow $f18, 0x40, $f18
|
|
+ fstd $f18, UC_SIGCTX+SC_FPREGS+76*8($16)
|
|
+
|
|
+ fstd $f19, UC_SIGCTX+SC_FPREGS+77*8($16)
|
|
+ srlow $f19, 0x40, $f19
|
|
+ fstd $f19, UC_SIGCTX+SC_FPREGS+78*8($16)
|
|
+ srlow $f19, 0x40, $f19
|
|
+ fstd $f19, UC_SIGCTX+SC_FPREGS+79*8($16)
|
|
+ srlow $f19, 0x40, $f19
|
|
+ fstd $f19, UC_SIGCTX+SC_FPREGS+80*8($16)
|
|
+
|
|
+ fstd $f20, UC_SIGCTX+SC_FPREGS+81*8($16)
|
|
+ srlow $f20, 0x40, $f20
|
|
+ fstd $f20, UC_SIGCTX+SC_FPREGS+82*8($16)
|
|
+ srlow $f20, 0x40, $f20
|
|
+ fstd $f20, UC_SIGCTX+SC_FPREGS+83*8($16)
|
|
+ srlow $f20, 0x40, $f20
|
|
+ fstd $f20, UC_SIGCTX+SC_FPREGS+84*8($16)
|
|
+
|
|
+ fstd $f21, UC_SIGCTX+SC_FPREGS+85*8($16)
|
|
+ srlow $f21, 0x40, $f21
|
|
+ fstd $f21, UC_SIGCTX+SC_FPREGS+86*8($16)
|
|
+ srlow $f21, 0x40, $f21
|
|
+ fstd $f21, UC_SIGCTX+SC_FPREGS+87*8($16)
|
|
+ srlow $f21, 0x40, $f21
|
|
+ fstd $f21, UC_SIGCTX+SC_FPREGS+88*8($16)
|
|
+
|
|
+ fstd $f22, UC_SIGCTX+SC_FPREGS+89*8($16)
|
|
+ srlow $f22, 0x40, $f22
|
|
+ fstd $f22, UC_SIGCTX+SC_FPREGS+90*8($16)
|
|
+ srlow $f22, 0x40, $f22
|
|
+ fstd $f22, UC_SIGCTX+SC_FPREGS+91*8($16)
|
|
+ srlow $f22, 0x40, $f22
|
|
+ fstd $f22, UC_SIGCTX+SC_FPREGS+92*8($16)
|
|
+
|
|
+ fstd $f23, UC_SIGCTX+SC_FPREGS+93*8($16)
|
|
+ srlow $f23, 0x40, $f23
|
|
+ fstd $f23, UC_SIGCTX+SC_FPREGS+94*8($16)
|
|
+ srlow $f23, 0x40, $f23
|
|
+ fstd $f23, UC_SIGCTX+SC_FPREGS+95*8($16)
|
|
+ srlow $f23, 0x40, $f23
|
|
+ fstd $f23, UC_SIGCTX+SC_FPREGS+96*8($16)
|
|
+
|
|
+ fstd $f24, UC_SIGCTX+SC_FPREGS+97*8($16)
|
|
+ srlow $f24, 0x40, $f24
|
|
+ fstd $f24, UC_SIGCTX+SC_FPREGS+98*8($16)
|
|
+ srlow $f24, 0x40, $f24
|
|
+ fstd $f24, UC_SIGCTX+SC_FPREGS+99*8($16)
|
|
+ srlow $f24, 0x40, $f24
|
|
+ fstd $f24, UC_SIGCTX+SC_FPREGS+100*8($16)
|
|
+
|
|
+ fstd $f25, UC_SIGCTX+SC_FPREGS+101*8($16)
|
|
+ srlow $f25, 0x40, $f25
|
|
+ fstd $f25, UC_SIGCTX+SC_FPREGS+102*8($16)
|
|
+ srlow $f25, 0x40, $f25
|
|
+ fstd $f25, UC_SIGCTX+SC_FPREGS+103*8($16)
|
|
+ srlow $f25, 0x40, $f25
|
|
+ fstd $f25, UC_SIGCTX+SC_FPREGS+104*8($16)
|
|
+
|
|
+ fstd $f26, UC_SIGCTX+SC_FPREGS+105*8($16)
|
|
+ srlow $f26, 0x40, $f26
|
|
+ fstd $f26, UC_SIGCTX+SC_FPREGS+106*8($16)
|
|
+ srlow $f26, 0x40, $f26
|
|
+ fstd $f26, UC_SIGCTX+SC_FPREGS+107*8($16)
|
|
+ srlow $f26, 0x40, $f26
|
|
+ fstd $f26, UC_SIGCTX+SC_FPREGS+108*8($16)
|
|
+
|
|
+ fstd $f27, UC_SIGCTX+SC_FPREGS+109*8($16)
|
|
+ srlow $f27, 0x40, $f27
|
|
+ fstd $f27, UC_SIGCTX+SC_FPREGS+110*8($16)
|
|
+ srlow $f27, 0x40, $f27
|
|
+ fstd $f27, UC_SIGCTX+SC_FPREGS+111*8($16)
|
|
+ srlow $f27, 0x40, $f27
|
|
+ fstd $f27, UC_SIGCTX+SC_FPREGS+112*8($16)
|
|
+
|
|
+ fstd $f28, UC_SIGCTX+SC_FPREGS+113*8($16)
|
|
+ srlow $f28, 0x40, $f28
|
|
+ fstd $f28, UC_SIGCTX+SC_FPREGS+114*8($16)
|
|
+ srlow $f28, 0x40, $f28
|
|
+ fstd $f28, UC_SIGCTX+SC_FPREGS+115*8($16)
|
|
+ srlow $f28, 0x40, $f28
|
|
+ fstd $f28, UC_SIGCTX+SC_FPREGS+116*8($16)
|
|
+
|
|
+ fstd $f29, UC_SIGCTX+SC_FPREGS+117*8($16)
|
|
+ srlow $f29, 0x40, $f29
|
|
+ fstd $f29, UC_SIGCTX+SC_FPREGS+118*8($16)
|
|
+ srlow $f29, 0x40, $f29
|
|
+ fstd $f29, UC_SIGCTX+SC_FPREGS+119*8($16)
|
|
+ srlow $f29, 0x40, $f29
|
|
+ fstd $f29, UC_SIGCTX+SC_FPREGS+120*8($16)
|
|
+
|
|
+ fstd $f30, UC_SIGCTX+SC_FPREGS+121*8($16)
|
|
+ srlow $f30, 0x40, $f30
|
|
+ fstd $f30, UC_SIGCTX+SC_FPREGS+122*8($16)
|
|
+ srlow $f30, 0x40, $f30
|
|
+ fstd $f30, UC_SIGCTX+SC_FPREGS+123*8($16)
|
|
+ srlow $f30, 0x40, $f30
|
|
+ fstd $f30, UC_SIGCTX+SC_FPREGS+124*8($16)
|
|
+#else
|
|
+ fstd $f0, UC_SIGCTX+SC_FPREGS+0*8($16)
|
|
+ fstd $f1, UC_SIGCTX+SC_FPREGS+1*8($16)
|
|
+ fstd $f2, UC_SIGCTX+SC_FPREGS+2*8($16)
|
|
+ fstd $f3, UC_SIGCTX+SC_FPREGS+3*8($16)
|
|
+ fstd $f4, UC_SIGCTX+SC_FPREGS+4*8($16)
|
|
+ fstd $f5, UC_SIGCTX+SC_FPREGS+5*8($16)
|
|
+ fstd $f6, UC_SIGCTX+SC_FPREGS+6*8($16)
|
|
+ fstd $f7, UC_SIGCTX+SC_FPREGS+7*8($16)
|
|
+ fstd $f8, UC_SIGCTX+SC_FPREGS+8*8($16)
|
|
+ fstd $f9, UC_SIGCTX+SC_FPREGS+9*8($16)
|
|
+ fstd $f10, UC_SIGCTX+SC_FPREGS+10*8($16)
|
|
+ fstd $f11, UC_SIGCTX+SC_FPREGS+11*8($16)
|
|
+ fstd $f12, UC_SIGCTX+SC_FPREGS+12*8($16)
|
|
+ fstd $f13, UC_SIGCTX+SC_FPREGS+13*8($16)
|
|
+ fstd $f14, UC_SIGCTX+SC_FPREGS+14*8($16)
|
|
+ fstd $f15, UC_SIGCTX+SC_FPREGS+15*8($16)
|
|
+ fstd $f16, UC_SIGCTX+SC_FPREGS+16*8($16)
|
|
+ fstd $f17, UC_SIGCTX+SC_FPREGS+17*8($16)
|
|
+ fstd $f18, UC_SIGCTX+SC_FPREGS+18*8($16)
|
|
+ fstd $f19, UC_SIGCTX+SC_FPREGS+19*8($16)
|
|
+ fstd $f20, UC_SIGCTX+SC_FPREGS+20*8($16)
|
|
+ fstd $f21, UC_SIGCTX+SC_FPREGS+21*8($16)
|
|
+ fstd $f22, UC_SIGCTX+SC_FPREGS+22*8($16)
|
|
+ fstd $f23, UC_SIGCTX+SC_FPREGS+23*8($16)
|
|
+ fstd $f24, UC_SIGCTX+SC_FPREGS+24*8($16)
|
|
+ fstd $f25, UC_SIGCTX+SC_FPREGS+25*8($16)
|
|
+ fstd $f26, UC_SIGCTX+SC_FPREGS+26*8($16)
|
|
+ fstd $f27, UC_SIGCTX+SC_FPREGS+27*8($16)
|
|
+ fstd $f28, UC_SIGCTX+SC_FPREGS+28*8($16)
|
|
+ fstd $f29, UC_SIGCTX+SC_FPREGS+29*8($16)
|
|
+ fstd $f30, UC_SIGCTX+SC_FPREGS+30*8($16)
|
|
+ fstd $f31, UC_SIGCTX+SC_FPREGS+31*8($16)
|
|
+#endif
|
|
+ rfpcr $f0
|
|
+ ldi $1, 8
|
|
+ fstd $f0, UC_SIGCTX+SC_FPCR($16)
|
|
+
|
|
+ /* The return address of getcontext is the restart pc. */
|
|
+ stl $26, UC_SIGCTX+SC_PC($16)
|
|
+
|
|
+ /* Userlevel always has a processor status word of 8. */
|
|
+ stl $1, UC_SIGCTX+SC_PS($16)
|
|
+
|
|
+ /* Save registers around the syscall. We preserve $17
|
|
+ for the benefit of swapcontext. */
|
|
+ subl $30, 4*8, $30
|
|
+ cfi_adjust_cfa_offset (4*8)
|
|
+ stl $0, 0($30)
|
|
+ cfi_rel_offset (64, 0)
|
|
+ stl $16, 8($30)
|
|
+ stl $17, 16($30)
|
|
+
|
|
+ /* Save the current signal mask. Whee, there are three
|
|
+ copies of this in the sw_64 ucontext_t. */
|
|
+/* osf_sigprocmask change to rt_sigprocmask */
|
|
+/* rt_sigprocmask (SIG_BLOCK, NULL, &ucp->uc_sigmask, _NSIG8) */
|
|
+ ldi $19, _NSIG8
|
|
+ ldi $18, UC_SIGMASK($16)
|
|
+ ldi $17, 0
|
|
+ ldi $16, SIG_BLOCK
|
|
+
|
|
+ ldi $0, __NR_rt_sigprocmask
|
|
+ sys_call 0x83
|
|
+
|
|
+ ldl $16, 8($30)
|
|
+ ldl $17, 16($30)
|
|
+
|
|
+ stl $18, UC_OSF_SIGMASK($16)
|
|
+ stl $18, UC_SIGCTX+SC_MASK($16)
|
|
+
|
|
+ stl $31, UC_SIGMASK + 1*8($16)
|
|
+ stl $31, UC_SIGMASK + 2*8($16)
|
|
+ stl $31, UC_SIGMASK + 3*8($16)
|
|
+ stl $31, UC_SIGMASK + 4*8($16)
|
|
+ stl $31, UC_SIGMASK + 5*8($16)
|
|
+ stl $31, UC_SIGMASK + 6*8($16)
|
|
+ stl $31, UC_SIGMASK + 7*8($16)
|
|
+ stl $31, UC_SIGMASK + 8*8($16)
|
|
+ stl $31, UC_SIGMASK + 9*8($16)
|
|
+ stl $31, UC_SIGMASK +10*8($16)
|
|
+ stl $31, UC_SIGMASK +11*8($16)
|
|
+ stl $31, UC_SIGMASK +12*8($16)
|
|
+ stl $31, UC_SIGMASK +13*8($16)
|
|
+ stl $31, UC_SIGMASK +14*8($16)
|
|
+ stl $31, UC_SIGMASK +15*8($16)
|
|
+
|
|
+ ldl $0, 0($30)
|
|
+ addl $30, 4*8, $30
|
|
+ cfi_register (64, 0)
|
|
+ cfi_adjust_cfa_offset (-4*8)
|
|
+ ret $31, ($0), 1
|
|
+
|
|
+ cfi_endproc
|
|
+ .size __getcontext_x, .-__getcontext_x
|
|
+ .type __getcontext_x, @function
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getdents.c b/sysdeps/unix/sysv/linux/sw_64/getdents.c
|
|
new file mode 100644
|
|
index 00000000..16ca198a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getdents.c
|
|
@@ -0,0 +1,18 @@
|
|
+/* Although Sw_64 defines _DIRENT_MATCHES_DIRENT64, 'struct dirent' and
|
|
+ 'struct dirent64' have slight different internal layout with d_ino
|
|
+ being a __ino_t on non-LFS version with an extra __pad field which should
|
|
+ be zeroed. */
|
|
+
|
|
+#include <dirent.h>
|
|
+#undef _DIRENT_MATCHES_DIRENT64
|
|
+#define _DIRENT_MATCHES_DIRENT64 0
|
|
+#ifdef SW_64
|
|
+# define DIRENT_SET_DP_INO(dp, value) \
|
|
+ do \
|
|
+ { \
|
|
+ (dp)->d_ino = (value); \
|
|
+ (dp)->__pad = 0; \
|
|
+ } \
|
|
+ while (0)
|
|
+#endif
|
|
+#include <sysdeps/unix/sysv/linux/getdents.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getdents64.c b/sysdeps/unix/sysv/linux/sw_64/getdents64.c
|
|
new file mode 100644
|
|
index 00000000..f24cc638
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getdents64.c
|
|
@@ -0,0 +1,10 @@
|
|
+/* Although Sw_64 defines _DIRENT_MATCHES_DIRENT64, 'struct dirent' and
|
|
+ 'struct dirent64' have slight different internal layout with d_ino
|
|
+ being a __ino_t on non-LFS version with an extra __pad field which should
|
|
+ be zeroed. */
|
|
+
|
|
+#include <dirent.h>
|
|
+/* It suppresses the __getdents64 to __getdents alias. */
|
|
+#undef _DIRENT_MATCHES_DIRENT64
|
|
+#define _DIRENT_MATCHES_DIRENT64 0
|
|
+#include <sysdeps/unix/sysv/linux/getdents64.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getegid.S b/sysdeps/unix/sysv/linux/sw_64/getegid.S
|
|
new file mode 100644
|
|
index 00000000..fe5bd51a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getegid.S
|
|
@@ -0,0 +1,26 @@
|
|
+/* Copyright (C) 1991-2023 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 <sysdep.h>
|
|
+
|
|
+
|
|
+PSEUDO (__getegid, getxgid, 0)
|
|
+ MOVE (r1, r0)
|
|
+ ret
|
|
+PSEUDO_END (__getegid)
|
|
+
|
|
+weak_alias (__getegid, getegid)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/geteuid.S b/sysdeps/unix/sysv/linux/sw_64/geteuid.S
|
|
new file mode 100644
|
|
index 00000000..fb8fd714
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/geteuid.S
|
|
@@ -0,0 +1,26 @@
|
|
+/* Copyright (C) 1991-2023 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 <sysdep.h>
|
|
+
|
|
+
|
|
+PSEUDO (__geteuid, getxuid, 0)
|
|
+ MOVE (r1, r0)
|
|
+ ret
|
|
+PSEUDO_END (__geteuid)
|
|
+
|
|
+weak_alias (__geteuid, geteuid)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/gethostname.c b/sysdeps/unix/sysv/linux/sw_64/gethostname.c
|
|
new file mode 100644
|
|
index 00000000..aeb3a957
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/gethostname.c
|
|
@@ -0,0 +1,45 @@
|
|
+/* Copyright (C) 2001-2023 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001
|
|
+
|
|
+ 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 <errno.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/syscall.h>
|
|
+
|
|
+int
|
|
+__gethostname (char *name, size_t len)
|
|
+{
|
|
+ int result;
|
|
+
|
|
+ result = INLINE_SYSCALL (gethostname, 2, name, len);
|
|
+
|
|
+ if (result == 0
|
|
+ /* See whether the string is terminated. If not we will return
|
|
+ an error. */
|
|
+ && memchr (name, '\0', len) == NULL)
|
|
+ {
|
|
+ __set_errno (EOVERFLOW);
|
|
+ result = -1;
|
|
+ }
|
|
+
|
|
+ return result;
|
|
+}
|
|
+
|
|
+weak_alias (__gethostname, gethostname)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getppid.S b/sysdeps/unix/sysv/linux/sw_64/getppid.S
|
|
new file mode 100644
|
|
index 00000000..2107686d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getppid.S
|
|
@@ -0,0 +1,26 @@
|
|
+/* Copyright (C) 1991-2023 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 <sysdep.h>
|
|
+
|
|
+
|
|
+PSEUDO (__getppid, getxpid, 0)
|
|
+ MOVE (r1, r0)
|
|
+ ret
|
|
+PSEUDO_END (__getppid)
|
|
+
|
|
+weak_alias (__getppid, getppid)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/getrlimit64.c b/sysdeps/unix/sysv/linux/sw_64/getrlimit64.c
|
|
new file mode 100644
|
|
index 00000000..7d455c74
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/getrlimit64.c
|
|
@@ -0,0 +1,54 @@
|
|
+/* Copyright (C) 2018-2023 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/>. */
|
|
+
|
|
+#define USE_VERSIONED_RLIMIT
|
|
+#include <sysdeps/unix/sysv/linux/getrlimit64.c>
|
|
+versioned_symbol (libc, __getrlimit, getrlimit, GLIBC_2_27);
|
|
+versioned_symbol (libc, __getrlimit64, getrlimit64, GLIBC_2_27);
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_27)
|
|
+/* RLIM64_INFINITY was supposed to be a glibc convention rather than
|
|
+ anything seen by the kernel, but it ended being passed to the kernel
|
|
+ through the prlimit64 syscall. Given that a lot of binaries with
|
|
+ the wrong constant value are in the wild, provide a wrapper function
|
|
+ fixing the value after the syscall. */
|
|
+# define OLD_RLIM64_INFINITY 0x7fffffffffffffffULL
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__old_getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
|
|
+{
|
|
+ struct rlimit64 krlimits;
|
|
+
|
|
+ if (__getrlimit64 (resource, &krlimits) < 0)
|
|
+ return -1;
|
|
+
|
|
+ if (krlimits.rlim_cur == RLIM64_INFINITY)
|
|
+ rlimits->rlim_cur = OLD_RLIM64_INFINITY;
|
|
+ else
|
|
+ rlimits->rlim_cur = krlimits.rlim_cur;
|
|
+ if (krlimits.rlim_max == RLIM64_INFINITY)
|
|
+ rlimits->rlim_max = OLD_RLIM64_INFINITY;
|
|
+ else
|
|
+ rlimits->rlim_max = krlimits.rlim_max;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+strong_alias (__old_getrlimit64, __old_getrlimit)
|
|
+ compat_symbol (libc, __old_getrlimit, getrlimit, GLIBC_2_0);
|
|
+compat_symbol (libc, __old_getrlimit64, getrlimit64, GLIBC_2_1);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/gettimeofday.c b/sysdeps/unix/sysv/linux/sw_64/gettimeofday.c
|
|
new file mode 100644
|
|
index 00000000..d6fcc00a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/gettimeofday.c
|
|
@@ -0,0 +1,26 @@
|
|
+/* gettimeofday -- Get the current time of day. Linux/Sw_64/tv64 version.
|
|
+ Copyright (C) 2019-2023 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/>. */
|
|
+
|
|
+/* We can use the generic implementation, but we have to override its
|
|
+ default symbol version. */
|
|
+#define SET_VERSION
|
|
+#include <time/gettimeofday.c>
|
|
+
|
|
+weak_alias (___gettimeofday, __wgettimeofday);
|
|
+default_symbol_version (___gettimeofday, __gettimeofday, GLIBC_2.1);
|
|
+default_symbol_version (__wgettimeofday, gettimeofday, GLIBC_2.1);
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/glob-lstat-compat.c b/sysdeps/unix/sysv/linux/sw_64/glob-lstat-compat.c
|
|
new file mode 100644
|
|
index 00000000..a76471d4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/glob-lstat-compat.c
|
|
@@ -0,0 +1,2 @@
|
|
+#define GLOB_LSTAT_VERSION GLIBC_2_1
|
|
+#include <sysdeps/unix/sysv/linux/glob-lstat-compat.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/globfree.c b/sysdeps/unix/sysv/linux/sw_64/globfree.c
|
|
new file mode 100644
|
|
index 00000000..2a82330d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/globfree.c
|
|
@@ -0,0 +1,36 @@
|
|
+/* Compat globfree. Linux/sw_64 version.
|
|
+ Copyright (C) 2017-2023 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/>. */
|
|
+
|
|
+#define globfree64 __no_globfree64_decl
|
|
+#include <sys/types.h>
|
|
+#include <glob.h>
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#define globfree(pglob) __new_globfree (pglob)
|
|
+
|
|
+extern void __new_globfree (glob_t *__pglob);
|
|
+
|
|
+#include <posix/globfree.c>
|
|
+
|
|
+#undef globfree64
|
|
+
|
|
+versioned_symbol (libc, __new_globfree, globfree, GLIBC_2_1);
|
|
+libc_hidden_ver (__new_globfree, globfree)
|
|
+
|
|
+ weak_alias (__new_globfree, globfree64)
|
|
+libc_hidden_ver (__new_globfree, globfree64)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/sw_64/ieee_get_fp_control.S
|
|
new file mode 100644
|
|
index 00000000..e493f55a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/ieee_get_fp_control.S
|
|
@@ -0,0 +1,50 @@
|
|
+/* Copyright (C) 1993-2023 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David Mosberger <davidm@azstarnet.com>, 1995.
|
|
+
|
|
+ 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include "kernel_sysinfo.h"
|
|
+
|
|
+
|
|
+ .text
|
|
+
|
|
+ENTRY(__ieee_get_fp_control)
|
|
+ cfi_startproc
|
|
+ PSEUDO_PROLOGUE
|
|
+
|
|
+ ldi sp, -16(sp)
|
|
+ cfi_adjust_cfa_offset (16)
|
|
+
|
|
+ mov sp, a1
|
|
+ ldi a0, GSI_IEEE_FP_CONTROL
|
|
+ ldi v0, __NR_getsysinfo
|
|
+ sys_call HMC_callsys
|
|
+
|
|
+ ldl t0, 0(sp)
|
|
+ ldi sp, 16(sp)
|
|
+ cfi_adjust_cfa_offset (-16)
|
|
+
|
|
+ bne a3, SYSCALL_ERROR_LABEL
|
|
+
|
|
+ mov t0, v0
|
|
+ ret
|
|
+
|
|
+PSEUDO_END(__ieee_get_fp_control)
|
|
+ cfi_endproc
|
|
+
|
|
+libc_hidden_def (__ieee_get_fp_control)
|
|
+weak_alias (__ieee_get_fp_control, ieee_get_fp_control)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/sw_64/ieee_set_fp_control.S
|
|
new file mode 100644
|
|
index 00000000..ef91e43d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/ieee_set_fp_control.S
|
|
@@ -0,0 +1,46 @@
|
|
+/* Copyright (C) 1993-2023 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David Mosberger <davidm@azstarnet.com>, 1995.
|
|
+
|
|
+ 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include "kernel_sysinfo.h"
|
|
+
|
|
+
|
|
+ENTRY(__ieee_set_fp_control)
|
|
+ cfi_startproc
|
|
+ PSEUDO_PROLOGUE
|
|
+
|
|
+ ldi sp, -16(sp)
|
|
+ cfi_adjust_cfa_offset (16)
|
|
+
|
|
+ ldi v0, __NR_setsysinfo
|
|
+ stl a0, 0(sp)
|
|
+ mov sp, a1
|
|
+ ldi a0, SSI_IEEE_FP_CONTROL
|
|
+ sys_call HMC_callsys
|
|
+
|
|
+ ldi sp, 16(sp)
|
|
+ cfi_adjust_cfa_offset (-16)
|
|
+
|
|
+ bne a3, SYSCALL_ERROR_LABEL
|
|
+ ret
|
|
+
|
|
+PSEUDO_END(__ieee_set_fp_control)
|
|
+ cfi_endproc
|
|
+
|
|
+libc_hidden_def(__ieee_set_fp_control)
|
|
+weak_alias (__ieee_set_fp_control, ieee_set_fp_control)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/ioperm.c b/sysdeps/unix/sysv/linux/sw_64/ioperm.c
|
|
new file mode 100644
|
|
index 00000000..7168aee7
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/ioperm.c
|
|
@@ -0,0 +1,853 @@
|
|
+/* Copyright (C) 1992-2023 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by David Mosberger.
|
|
+
|
|
+ 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/>. */
|
|
+
|
|
+/* I/O access is restricted to ISA port space (ports 0..65535).
|
|
+ Modern devices hopefully are sane enough not to put any performance
|
|
+ critical registers in i/o space.
|
|
+
|
|
+ On the first call to ioperm, the entire (E)ISA port space is mapped
|
|
+ into the virtual address space at address io.base. mprotect calls
|
|
+ are then used to enable/disable access to ports. Per page, there
|
|
+ are PAGE_SIZE>>IO_SHIFT I/O ports (e.g., 256 ports on a Low Cost Sw_64
|
|
+ based system using 8KB pages).
|
|
+
|
|
+ Keep in mind that this code should be able to run in a 32bit address
|
|
+ space. It is therefore unreasonable to expect mmap'ing the entire
|
|
+ sparse address space would work (e.g., the Low Cost Sw_64 chip has an
|
|
+ I/O address space that's 512MB large!). */
|
|
+
|
|
+/* Make sure the ldbu/stb asms below are not expaneded to macros. */
|
|
+#ifndef __sw_64_bwx__
|
|
+asm(".arch sw6f");
|
|
+#endif
|
|
+
|
|
+#include <errno.h>
|
|
+#include <fcntl.h>
|
|
+#include <stdio.h>
|
|
+#include <ctype.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+#include <sys/types.h>
|
|
+#include <sys/mman.h>
|
|
+#include <sys/io.h>
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <sys/syscall.h>
|
|
+
|
|
+#define PATH_SW_64_SYSTYPE "/etc/sw_64_systype"
|
|
+#define PATH_CPUINFO "/proc/cpuinfo"
|
|
+
|
|
+#define MAX_PORT 0x10000
|
|
+#define vip volatile int *
|
|
+#define vuip volatile unsigned int *
|
|
+#define vusp volatile unsigned short *
|
|
+#define vucp volatile unsigned char *
|
|
+
|
|
+#define JENSEN_IO_BASE (0x300000000UL)
|
|
+#define JENSEN_SPARSE_MEM (0x200000000UL)
|
|
+
|
|
+/* With respect to the I/O architecture, APECS and LCA are identical,
|
|
+ so the following defines apply to LCA as well. */
|
|
+#define APECS_IO_BASE (0x1c0000000UL)
|
|
+#define APECS_SPARSE_MEM (0x200000000UL)
|
|
+#define APECS_DENSE_MEM (0x300000000UL)
|
|
+
|
|
+/* The same holds for CIA and PYXIS, except for PYXIS we prefer BWX. */
|
|
+#define CIA_IO_BASE (0x8580000000UL)
|
|
+#define CIA_SPARSE_MEM (0x8000000000UL)
|
|
+#define CIA_DENSE_MEM (0x8600000000UL)
|
|
+
|
|
+#define PYXIS_IO_BASE (0x8900000000UL)
|
|
+#define PYXIS_DENSE_MEM (0x8800000000UL)
|
|
+
|
|
+#define T2_IO_BASE (0x3a0000000UL)
|
|
+#define T2_SPARSE_MEM (0x200000000UL)
|
|
+#define T2_DENSE_MEM (0x3c0000000UL)
|
|
+
|
|
+#define GAMMA_IO_BASE (0x83a0000000UL)
|
|
+#define GAMMA_SPARSE_MEM (0x8200000000UL)
|
|
+#define GAMMA_DENSE_MEM (0x83c0000000UL)
|
|
+
|
|
+/* NOTE: these are hardwired to PCI bus 0 addresses!!! */
|
|
+#define MCPCIA_IO_BASE (0xf980000000UL)
|
|
+#define MCPCIA_SPARSE_MEM (0xf800000000UL)
|
|
+#define MCPCIA_DENSE_MEM (0xf900000000UL)
|
|
+
|
|
+/* Tsunami and Irongate use the same offsets, at least for hose 0. */
|
|
+#define TSUNAMI_IO_BASE (0x801fc000000UL)
|
|
+#define TSUNAMI_DENSE_MEM (0x80000000000UL)
|
|
+
|
|
+/* Polaris has SPARSE space, but we prefer to use only DENSE
|
|
+ because of some idiosyncracies in actually using SPARSE. */
|
|
+#define POLARIS_IO_BASE (0xf9fc000000UL)
|
|
+#define POLARIS_DENSE_MEM (0xf900000000UL)
|
|
+
|
|
+typedef enum
|
|
+{
|
|
+ IOSYS_UNKNOWN,
|
|
+ IOSYS_JENSEN,
|
|
+ IOSYS_APECS,
|
|
+ IOSYS_CIA,
|
|
+ IOSYS_PYXIS,
|
|
+ IOSYS_T2,
|
|
+ IOSYS_TSUNAMI,
|
|
+ IOSYS_MCPCIA,
|
|
+ IOSYS_GAMMA,
|
|
+ IOSYS_POLARIS,
|
|
+ IOSYS_CPUDEP,
|
|
+ IOSYS_PCIDEP
|
|
+} iosys_t;
|
|
+
|
|
+typedef enum
|
|
+{
|
|
+ IOSWIZZLE_JENSEN,
|
|
+ IOSWIZZLE_SPARSE,
|
|
+ IOSWIZZLE_DENSE
|
|
+} ioswizzle_t;
|
|
+
|
|
+static struct io_system
|
|
+{
|
|
+ unsigned long int bus_memory_base;
|
|
+ unsigned long int sparse_bus_mem_base;
|
|
+ unsigned long int bus_io_base;
|
|
+} io_system[] = {
|
|
+ /* NOTE! must match iosys_t enumeration */
|
|
+ /* UNKNOWN */ { 0, 0, 0 },
|
|
+ /* JENSEN */ { 0, JENSEN_SPARSE_MEM, JENSEN_IO_BASE },
|
|
+ /* APECS */ { APECS_DENSE_MEM, APECS_SPARSE_MEM, APECS_IO_BASE },
|
|
+ /* CIA */ { CIA_DENSE_MEM, CIA_SPARSE_MEM, CIA_IO_BASE },
|
|
+ /* PYXIS */ { PYXIS_DENSE_MEM, 0, PYXIS_IO_BASE },
|
|
+ /* T2 */ { T2_DENSE_MEM, T2_SPARSE_MEM, T2_IO_BASE },
|
|
+ /* TSUNAMI */ { TSUNAMI_DENSE_MEM, 0, TSUNAMI_IO_BASE },
|
|
+ /* MCPCIA */ { MCPCIA_DENSE_MEM, MCPCIA_SPARSE_MEM, MCPCIA_IO_BASE },
|
|
+ /* GAMMA */ { GAMMA_DENSE_MEM, GAMMA_SPARSE_MEM, GAMMA_IO_BASE },
|
|
+ /* POLARIS */ { POLARIS_DENSE_MEM, 0, POLARIS_IO_BASE },
|
|
+ /* CPUDEP */ { 0, 0, 0 }, /* for platforms dependent on CPU type */
|
|
+ /* PCIDEP */ { 0, 0, 0 }, /* for platforms dependent on core logic */
|
|
+};
|
|
+
|
|
+static struct platform
|
|
+{
|
|
+ const char *name;
|
|
+ iosys_t io_sys;
|
|
+} platform[] = {
|
|
+ { "Alcor", IOSYS_CIA }, { "Avanti", IOSYS_APECS },
|
|
+ { "Cabriolet", IOSYS_APECS }, { "EB164", IOSYS_PCIDEP },
|
|
+ { "EB64+", IOSYS_APECS }, { "EB66", IOSYS_APECS },
|
|
+ { "EB66P", IOSYS_APECS }, { "Jensen", IOSYS_JENSEN },
|
|
+ { "Miata", IOSYS_PYXIS }, { "Mikasa", IOSYS_CPUDEP },
|
|
+ { "Nautilus", IOSYS_TSUNAMI }, { "Noname", IOSYS_APECS },
|
|
+ { "Noritake", IOSYS_CPUDEP }, { "Rawhide", IOSYS_MCPCIA },
|
|
+ { "Ruffian", IOSYS_PYXIS }, { "Sable", IOSYS_CPUDEP },
|
|
+ { "Takara", IOSYS_CIA }, { "Tsunami", IOSYS_TSUNAMI },
|
|
+ { "XL", IOSYS_APECS },
|
|
+};
|
|
+
|
|
+struct ioswtch
|
|
+{
|
|
+ void (*sethae) (unsigned long int addr);
|
|
+ void (*outb) (unsigned char b, unsigned long int port);
|
|
+ void (*outw) (unsigned short b, unsigned long int port);
|
|
+ void (*outl) (unsigned int b, unsigned long int port);
|
|
+ unsigned int (*inb) (unsigned long int port);
|
|
+ unsigned int (*inw) (unsigned long int port);
|
|
+ unsigned int (*inl) (unsigned long int port);
|
|
+};
|
|
+
|
|
+static struct
|
|
+{
|
|
+ unsigned long int hae_cache;
|
|
+ unsigned long int base;
|
|
+ struct ioswtch *swp;
|
|
+ unsigned long int bus_memory_base;
|
|
+ unsigned long int sparse_bus_memory_base;
|
|
+ unsigned long int io_base;
|
|
+ ioswizzle_t swiz;
|
|
+} io;
|
|
+
|
|
+static inline void
|
|
+stb_mb (unsigned char val, unsigned long addr)
|
|
+{
|
|
+ __asm__("stb %1,%0; memb" : "=m"(*(vucp) addr) : "r"(val));
|
|
+}
|
|
+
|
|
+static inline void
|
|
+stw_mb (unsigned short val, unsigned long addr)
|
|
+{
|
|
+ __asm__("sth %1,%0; memb" : "=m"(*(vusp) addr) : "r"(val));
|
|
+}
|
|
+
|
|
+static inline void
|
|
+stl_mb (unsigned int val, unsigned long addr)
|
|
+{
|
|
+ __asm__("stw %1,%0; memb" : "=m"(*(vip) addr) : "r"(val));
|
|
+}
|
|
+
|
|
+/* No need to examine error -- sethae never fails. */
|
|
+static inline void
|
|
+__sethae (unsigned long value)
|
|
+{
|
|
+ fprintf (stderr, " __sethae already abandoned\n");
|
|
+ __builtin_unreachable ();
|
|
+}
|
|
+
|
|
+extern long __pciconfig_iobase (enum __pciconfig_iobase_which __which,
|
|
+ unsigned long int __bus,
|
|
+ unsigned long int __dfn);
|
|
+
|
|
+static inline unsigned long int
|
|
+port_to_cpu_addr (unsigned long int port, ioswizzle_t ioswiz, int size)
|
|
+{
|
|
+ if (ioswiz == IOSWIZZLE_SPARSE)
|
|
+ return io.base + (port << 5) + ((size - 1) << 3);
|
|
+ else if (ioswiz == IOSWIZZLE_DENSE)
|
|
+ return port + io.base;
|
|
+ else
|
|
+ return io.base + (port << 7) + ((size - 1) << 5);
|
|
+}
|
|
+
|
|
+static inline __attribute__ ((always_inline)) void
|
|
+inline_sethae (unsigned long int addr, ioswizzle_t ioswiz)
|
|
+{
|
|
+ if (ioswiz == IOSWIZZLE_SPARSE)
|
|
+ {
|
|
+ unsigned long int msb;
|
|
+
|
|
+ /* no need to set hae if msb is 0: */
|
|
+ msb = addr & 0xf8000000;
|
|
+ if (msb && msb != io.hae_cache)
|
|
+ {
|
|
+ io.hae_cache = msb;
|
|
+ __sethae (msb);
|
|
+ }
|
|
+ }
|
|
+ else if (ioswiz == IOSWIZZLE_JENSEN)
|
|
+ {
|
|
+ /* HAE on the Jensen is bits 31:25 shifted right. */
|
|
+ addr >>= 25;
|
|
+ if (addr != io.hae_cache)
|
|
+ {
|
|
+ io.hae_cache = addr;
|
|
+ __sethae (addr);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+static inline void
|
|
+inline_outb (unsigned char b, unsigned long int port, ioswizzle_t ioswiz)
|
|
+{
|
|
+ unsigned int w;
|
|
+ unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1);
|
|
+
|
|
+ asm("ins0b %2,%1,%0" : "=r"(w) : "ri"(port & 0x3), "r"(b));
|
|
+ stl_mb (w, addr);
|
|
+}
|
|
+
|
|
+static inline void
|
|
+inline_outw (unsigned short int b, unsigned long int port, ioswizzle_t ioswiz)
|
|
+{
|
|
+ unsigned long w;
|
|
+ unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2);
|
|
+
|
|
+ asm("ins1b %2,%1,%0" : "=r"(w) : "ri"(port & 0x3), "r"(b));
|
|
+ stl_mb (w, addr);
|
|
+}
|
|
+
|
|
+static inline void
|
|
+inline_outl (unsigned int b, unsigned long int port, ioswizzle_t ioswiz)
|
|
+{
|
|
+ unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4);
|
|
+
|
|
+ stl_mb (b, addr);
|
|
+}
|
|
+
|
|
+static inline unsigned int
|
|
+inline_inb (unsigned long int port, ioswizzle_t ioswiz)
|
|
+{
|
|
+ unsigned long int addr = port_to_cpu_addr (port, ioswiz, 1);
|
|
+ int result;
|
|
+
|
|
+ result = *(vip) addr;
|
|
+ result >>= (port & 3) * 8;
|
|
+ return 0xffUL & result;
|
|
+}
|
|
+
|
|
+static inline unsigned int
|
|
+inline_inw (unsigned long int port, ioswizzle_t ioswiz)
|
|
+{
|
|
+ unsigned long int addr = port_to_cpu_addr (port, ioswiz, 2);
|
|
+ int result;
|
|
+
|
|
+ result = *(vip) addr;
|
|
+ result >>= (port & 3) * 8;
|
|
+ return 0xffffUL & result;
|
|
+}
|
|
+
|
|
+static inline unsigned int
|
|
+inline_inl (unsigned long int port, ioswizzle_t ioswiz)
|
|
+{
|
|
+ unsigned long int addr = port_to_cpu_addr (port, ioswiz, 4);
|
|
+
|
|
+ return *(vuip) addr;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Now define the inline functions for CPUs supporting byte/word insns,
|
|
+ * and whose core logic supports I/O space accesses utilizing them.
|
|
+ *
|
|
+ * These routines could be used by MIATA, for example, because it has
|
|
+ * and plus PYXIS, but it currently uses SPARSE anyway. This is
|
|
+ * also true of RX164 which used POLARIS, but we will choose to use
|
|
+ * these routines in that case instead of SPARSE.
|
|
+ *
|
|
+ * These routines are necessary for TSUNAMI/TYPHOON based platforms,
|
|
+ * which will have (at least).
|
|
+ */
|
|
+
|
|
+static inline unsigned long int
|
|
+dense_port_to_cpu_addr (unsigned long int port)
|
|
+{
|
|
+ return port + io.base;
|
|
+}
|
|
+
|
|
+static inline void
|
|
+inline_bwx_outb (unsigned char b, unsigned long int port)
|
|
+{
|
|
+ unsigned long int addr = dense_port_to_cpu_addr (port);
|
|
+ stb_mb (b, addr);
|
|
+}
|
|
+
|
|
+static inline void
|
|
+inline_bwx_outw (unsigned short int b, unsigned long int port)
|
|
+{
|
|
+ unsigned long int addr = dense_port_to_cpu_addr (port);
|
|
+ stw_mb (b, addr);
|
|
+}
|
|
+
|
|
+static inline void
|
|
+inline_bwx_outl (unsigned int b, unsigned long int port)
|
|
+{
|
|
+ unsigned long int addr = dense_port_to_cpu_addr (port);
|
|
+ stl_mb (b, addr);
|
|
+}
|
|
+
|
|
+static inline unsigned int
|
|
+inline_bwx_inb (unsigned long int port)
|
|
+{
|
|
+ unsigned long int addr = dense_port_to_cpu_addr (port);
|
|
+ unsigned char r;
|
|
+
|
|
+ __asm__("ldbu %0,%1" : "=r"(r) : "m"(*(vucp) addr));
|
|
+ return r;
|
|
+}
|
|
+
|
|
+static inline unsigned int
|
|
+inline_bwx_inw (unsigned long int port)
|
|
+{
|
|
+ unsigned long int addr = dense_port_to_cpu_addr (port);
|
|
+ unsigned short r;
|
|
+
|
|
+ __asm__("ldhu %0,%1" : "=r"(r) : "m"(*(vusp) addr));
|
|
+ return r;
|
|
+}
|
|
+
|
|
+static inline unsigned int
|
|
+inline_bwx_inl (unsigned long int port)
|
|
+{
|
|
+ unsigned long int addr = dense_port_to_cpu_addr (port);
|
|
+
|
|
+ return *(vuip) addr;
|
|
+}
|
|
+
|
|
+/* macros to define routines with appropriate names and functions */
|
|
+
|
|
+/* these do either SPARSE or JENSEN swizzle */
|
|
+
|
|
+#define DCL_SETHAE(name, ioswiz) \
|
|
+ static void name##_sethae (unsigned long int addr) \
|
|
+ { \
|
|
+ inline_sethae (addr, IOSWIZZLE_##ioswiz); \
|
|
+ }
|
|
+
|
|
+#define DCL_OUT(name, func, type, ioswiz) \
|
|
+ static void name##_##func (unsigned type b, unsigned long int addr) \
|
|
+ { \
|
|
+ inline_##func (b, addr, IOSWIZZLE_##ioswiz); \
|
|
+ }
|
|
+
|
|
+#define DCL_IN(name, func, ioswiz) \
|
|
+ static unsigned int name##_##func (unsigned long int addr) \
|
|
+ { \
|
|
+ return inline_##func (addr, IOSWIZZLE_##ioswiz); \
|
|
+ }
|
|
+
|
|
+/* these do DENSE, so no swizzle is needed */
|
|
+
|
|
+#define DCL_OUT_BWX(name, func, type) \
|
|
+ static void name##_##func (unsigned type b, unsigned long int addr) \
|
|
+ { \
|
|
+ inline_bwx_##func (b, addr); \
|
|
+ }
|
|
+
|
|
+#define DCL_IN_BWX(name, func) \
|
|
+ static unsigned int name##_##func (unsigned long int addr) \
|
|
+ { \
|
|
+ return inline_bwx_##func (addr); \
|
|
+ }
|
|
+
|
|
+/* now declare/define the necessary routines */
|
|
+
|
|
+DCL_SETHAE (jensen, JENSEN)
|
|
+DCL_OUT (jensen, outb, char, JENSEN)
|
|
+DCL_OUT (jensen, outw, short int, JENSEN)
|
|
+DCL_OUT (jensen, outl, int, JENSEN)
|
|
+DCL_IN (jensen, inb, JENSEN)
|
|
+DCL_IN (jensen, inw, JENSEN)
|
|
+DCL_IN (jensen, inl, JENSEN)
|
|
+
|
|
+DCL_SETHAE (sparse, SPARSE)
|
|
+DCL_OUT (sparse, outb, char, SPARSE)
|
|
+DCL_OUT (sparse, outw, short int, SPARSE)
|
|
+DCL_OUT (sparse, outl, int, SPARSE)
|
|
+DCL_IN (sparse, inb, SPARSE)
|
|
+DCL_IN (sparse, inw, SPARSE)
|
|
+DCL_IN (sparse, inl, SPARSE)
|
|
+
|
|
+DCL_SETHAE (dense, DENSE)
|
|
+DCL_OUT_BWX (dense, outb, char)
|
|
+DCL_OUT_BWX (dense, outw, short int)
|
|
+DCL_OUT_BWX (dense, outl, int)
|
|
+DCL_IN_BWX (dense, inb)
|
|
+DCL_IN_BWX (dense, inw)
|
|
+DCL_IN_BWX (dense, inl)
|
|
+
|
|
+/* define the "swizzle" switch */
|
|
+static struct ioswtch ioswtch[]
|
|
+ = { { jensen_sethae, jensen_outb, jensen_outw, jensen_outl, jensen_inb,
|
|
+ jensen_inw, jensen_inl },
|
|
+ { sparse_sethae, sparse_outb, sparse_outw, sparse_outl, sparse_inb,
|
|
+ sparse_inw, sparse_inl },
|
|
+ { dense_sethae, dense_outb, dense_outw, dense_outl, dense_inb,
|
|
+ dense_inw, dense_inl } };
|
|
+
|
|
+#undef DEBUG_IOPERM
|
|
+
|
|
+/* Routine to process the /proc/cpuinfo information into the fields
|
|
+ that are required for correctly determining the platform parameters. */
|
|
+
|
|
+struct cpuinfo_data
|
|
+{
|
|
+ char systype[256]; /* system type field */
|
|
+ char sysvari[256]; /* system variation field */
|
|
+ char cpumodel[256]; /* cpu model field */
|
|
+};
|
|
+
|
|
+static inline int
|
|
+process_cpuinfo (struct cpuinfo_data *data)
|
|
+{
|
|
+ int got_type, got_vari, got_model;
|
|
+ char dummy[256];
|
|
+ FILE *fp;
|
|
+ int n;
|
|
+
|
|
+ data->systype[0] = 0;
|
|
+ data->sysvari[0] = 0;
|
|
+ data->cpumodel[0] = 0;
|
|
+
|
|
+ /* If there's an /etc/sw_64_systype link, we're intending to override
|
|
+ whatever's in /proc/cpuinfo. */
|
|
+ n = __readlink (PATH_SW_64_SYSTYPE, data->systype, 256 - 1);
|
|
+ if (n > 0)
|
|
+ {
|
|
+ data->systype[n] = '\0';
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ fp = fopen (PATH_CPUINFO, "rce");
|
|
+ if (!fp)
|
|
+ return 0;
|
|
+
|
|
+ got_type = got_vari = got_model = 0;
|
|
+
|
|
+ while (1)
|
|
+ {
|
|
+ if (fgets_unlocked (dummy, 256, fp) == NULL)
|
|
+ break;
|
|
+ if (!got_type
|
|
+ && sscanf (dummy, "system type : %256[^\n]\n", data->systype) == 1)
|
|
+ got_type = 1;
|
|
+ if (!got_vari
|
|
+ && (sscanf (dummy, "system variation : %256[^\n]\n", data->sysvari)
|
|
+ == 1))
|
|
+ got_vari = 1;
|
|
+ if (!got_model
|
|
+ && sscanf (dummy, "cpu model : %256[^\n]\n", data->cpumodel) == 1)
|
|
+ got_model = 1;
|
|
+ }
|
|
+
|
|
+ fclose (fp);
|
|
+
|
|
+#ifdef DEBUG_IOPERM
|
|
+ fprintf (stderr, "system type: `%s'\n", data->systype);
|
|
+ fprintf (stderr, "system vari: `%s'\n", data->sysvari);
|
|
+ fprintf (stderr, "cpu model: `%s'\n", data->cpumodel);
|
|
+#endif
|
|
+
|
|
+ return got_type + got_vari + got_model;
|
|
+}
|
|
+
|
|
+/*
|
|
+ * Initialize I/O system.
|
|
+ */
|
|
+static int
|
|
+init_iosys (void)
|
|
+{
|
|
+ long addr;
|
|
+ int i, olderrno = errno;
|
|
+ struct cpuinfo_data data;
|
|
+
|
|
+ /* First try the pciconfig_iobase syscall added to 2.2.15 and 2.3.99. */
|
|
+
|
|
+ addr = __pciconfig_iobase (IOBASE_DENSE_MEM, 0, 0);
|
|
+ if (addr != -1)
|
|
+ {
|
|
+ ioswizzle_t io_swiz;
|
|
+
|
|
+ if (addr == 0)
|
|
+ {
|
|
+ /* Only Jensen doesn't have dense mem space. */
|
|
+ io.sparse_bus_memory_base
|
|
+ = io_system[IOSYS_JENSEN].sparse_bus_mem_base;
|
|
+ io.io_base = io_system[IOSYS_JENSEN].bus_io_base;
|
|
+ io_swiz = IOSWIZZLE_JENSEN;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ io.bus_memory_base = addr;
|
|
+
|
|
+ addr = __pciconfig_iobase (IOBASE_DENSE_IO, 0, 0);
|
|
+ if (addr != 0)
|
|
+ {
|
|
+ /* The X server uses _bus_base_sparse == 0 to know that
|
|
+ BWX access are supported to dense mem space. This is
|
|
+ true of every system that supports dense io space, so
|
|
+ never fill in io.sparse_bus_memory_base in this case. */
|
|
+ io_swiz = IOSWIZZLE_DENSE;
|
|
+ io.io_base = addr;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ io.sparse_bus_memory_base
|
|
+ = __pciconfig_iobase (IOBASE_SPARSE_MEM, 0, 0);
|
|
+ io.io_base = __pciconfig_iobase (IOBASE_SPARSE_IO, 0, 0);
|
|
+ io_swiz = IOSWIZZLE_SPARSE;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ io.swiz = io_swiz;
|
|
+ io.swp = &ioswtch[io_swiz];
|
|
+
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ /* Second, collect the contents of /etc/sw_64_systype or /proc/cpuinfo. */
|
|
+
|
|
+ if (process_cpuinfo (&data) == 0)
|
|
+ {
|
|
+ /* This can happen if the format of /proc/cpuinfo changes. */
|
|
+ fprintf (stderr, "ioperm.init_iosys: Unable to determine system type.\n"
|
|
+ "\t(May need " PATH_SW_64_SYSTYPE " symlink?)\n");
|
|
+ __set_errno (ENODEV);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ /* Translate systype name into i/o system. */
|
|
+ for (i = 0; i < sizeof (platform) / sizeof (platform[0]); ++i)
|
|
+ {
|
|
+ if (strcmp (platform[i].name, data.systype) == 0)
|
|
+ {
|
|
+ iosys_t io_sys = platform[i].io_sys;
|
|
+
|
|
+ /* Some platforms can have either EV4 or EV5 CPUs. */
|
|
+ if (io_sys == IOSYS_CPUDEP)
|
|
+ {
|
|
+ /* SABLE or MIKASA or NORITAKE so far. */
|
|
+ if (strcmp (platform[i].name, "Sable") == 0)
|
|
+ {
|
|
+ if (strncmp (data.cpumodel, "EV4", 3) == 0)
|
|
+ io_sys = IOSYS_T2;
|
|
+ else if (strncmp (data.cpumodel, "EV5", 3) == 0)
|
|
+ io_sys = IOSYS_GAMMA;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ /* This covers MIKASA/NORITAKE. */
|
|
+ if (strncmp (data.cpumodel, "EV4", 3) == 0)
|
|
+ io_sys = IOSYS_APECS;
|
|
+ else if (strncmp (data.cpumodel, "EV5", 3) == 0)
|
|
+ io_sys = IOSYS_CIA;
|
|
+ }
|
|
+ if (io_sys == IOSYS_CPUDEP)
|
|
+ {
|
|
+ /* This can happen if the format of /proc/cpuinfo changes. */
|
|
+ fprintf (stderr, "ioperm.init_iosys: Unable to determine"
|
|
+ " CPU model.\n");
|
|
+ __set_errno (ENODEV);
|
|
+ return -1;
|
|
+ }
|
|
+ }
|
|
+ /* Some platforms can have different core logic chipsets */
|
|
+ if (io_sys == IOSYS_PCIDEP)
|
|
+ {
|
|
+ /* EB164 so far */
|
|
+ if (strcmp (data.systype, "EB164") == 0)
|
|
+ {
|
|
+ if (strncmp (data.sysvari, "RX164", 5) == 0)
|
|
+ io_sys = IOSYS_POLARIS;
|
|
+ else if (strncmp (data.sysvari, "LX164", 5) == 0
|
|
+ || strncmp (data.sysvari, "SX164", 5) == 0)
|
|
+ io_sys = IOSYS_PYXIS;
|
|
+ else
|
|
+ io_sys = IOSYS_CIA;
|
|
+ }
|
|
+ if (io_sys == IOSYS_PCIDEP)
|
|
+ {
|
|
+ /* This can happen if the format of /proc/cpuinfo changes. */
|
|
+ fprintf (stderr, "ioperm.init_iosys: Unable to determine"
|
|
+ " core logic chipset.\n");
|
|
+ __set_errno (ENODEV);
|
|
+ return -1;
|
|
+ }
|
|
+ }
|
|
+ io.bus_memory_base = io_system[io_sys].bus_memory_base;
|
|
+ io.sparse_bus_memory_base = io_system[io_sys].sparse_bus_mem_base;
|
|
+ io.io_base = io_system[io_sys].bus_io_base;
|
|
+
|
|
+ if (io_sys == IOSYS_JENSEN)
|
|
+ io.swiz = IOSWIZZLE_JENSEN;
|
|
+ else if (io_sys == IOSYS_TSUNAMI || io_sys == IOSYS_POLARIS
|
|
+ || io_sys == IOSYS_PYXIS)
|
|
+ io.swiz = IOSWIZZLE_DENSE;
|
|
+ else
|
|
+ io.swiz = IOSWIZZLE_SPARSE;
|
|
+ io.swp = &ioswtch[io.swiz];
|
|
+
|
|
+ __set_errno (olderrno);
|
|
+ return 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ __set_errno (ENODEV);
|
|
+ fprintf (stderr, "ioperm.init_iosys: Platform not recognized.\n"
|
|
+ "\t(May need " PATH_SW_64_SYSTYPE " symlink?)\n");
|
|
+ return -1;
|
|
+}
|
|
+
|
|
+int
|
|
+_ioperm (unsigned long int from, unsigned long int num, int turn_on)
|
|
+{
|
|
+ unsigned long int addr, len, pagesize = __getpagesize ();
|
|
+ int prot;
|
|
+
|
|
+ if (!io.swp && init_iosys () < 0)
|
|
+ {
|
|
+#ifdef DEBUG_IOPERM
|
|
+ fprintf (stderr, "ioperm: init_iosys() failed (%m)\n");
|
|
+#endif
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ /* This test isn't as silly as it may look like; consider overflows! */
|
|
+ if (from >= MAX_PORT || from + num > MAX_PORT)
|
|
+ {
|
|
+ __set_errno (EINVAL);
|
|
+#ifdef DEBUG_IOPERM
|
|
+ fprintf (stderr, "ioperm: from/num out of range\n");
|
|
+#endif
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+#ifdef DEBUG_IOPERM
|
|
+ fprintf (stderr, "ioperm: turn_on %d io.base %ld\n", turn_on, io.base);
|
|
+#endif
|
|
+
|
|
+ if (turn_on)
|
|
+ {
|
|
+ if (!io.base)
|
|
+ {
|
|
+ int fd;
|
|
+
|
|
+ io.hae_cache = 0;
|
|
+ if (io.swiz != IOSWIZZLE_DENSE)
|
|
+ {
|
|
+ /* Synchronize with hw. */
|
|
+ __sethae (0);
|
|
+ }
|
|
+
|
|
+ fd = __open ("/dev/mem", O_RDWR);
|
|
+ if (fd < 0)
|
|
+ {
|
|
+#ifdef DEBUG_IOPERM
|
|
+ fprintf (stderr, "ioperm: /dev/mem open failed (%m)\n");
|
|
+#endif
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ addr = port_to_cpu_addr (0, io.swiz, 1);
|
|
+ len = port_to_cpu_addr (MAX_PORT, io.swiz, 1) - addr;
|
|
+ io.base = (unsigned long int) __mmap (0, len, PROT_NONE, MAP_SHARED,
|
|
+ fd, io.io_base);
|
|
+ __close (fd);
|
|
+#ifdef DEBUG_IOPERM
|
|
+ fprintf (stderr, "ioperm: mmap of len 0x%lx returned 0x%lx\n", len,
|
|
+ io.base);
|
|
+#endif
|
|
+ if ((long) io.base == -1)
|
|
+ return -1;
|
|
+ }
|
|
+ prot = PROT_READ | PROT_WRITE;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ if (!io.base)
|
|
+ return 0; /* never was turned on... */
|
|
+
|
|
+ /* turnoff access to relevant pages: */
|
|
+ prot = PROT_NONE;
|
|
+ }
|
|
+ addr = port_to_cpu_addr (from, io.swiz, 1);
|
|
+ addr &= ~(pagesize - 1);
|
|
+ len = port_to_cpu_addr (from + num, io.swiz, 1) - addr;
|
|
+ return __mprotect ((void *) addr, len, prot);
|
|
+}
|
|
+
|
|
+int
|
|
+_iopl (int level)
|
|
+{
|
|
+ switch (level)
|
|
+ {
|
|
+ case 0:
|
|
+ return 0;
|
|
+
|
|
+ case 1:
|
|
+ case 2:
|
|
+ case 3:
|
|
+ return _ioperm (0, MAX_PORT, 1);
|
|
+
|
|
+ default:
|
|
+ __set_errno (EINVAL);
|
|
+ return -1;
|
|
+ }
|
|
+}
|
|
+
|
|
+void
|
|
+_sethae (unsigned long int addr)
|
|
+{
|
|
+ if (!io.swp && init_iosys () < 0)
|
|
+ return;
|
|
+
|
|
+ io.swp->sethae (addr);
|
|
+}
|
|
+
|
|
+void
|
|
+_outb (unsigned char b, unsigned long int port)
|
|
+{
|
|
+ if (port >= MAX_PORT)
|
|
+ return;
|
|
+
|
|
+ io.swp->outb (b, port);
|
|
+}
|
|
+
|
|
+void
|
|
+_outw (unsigned short b, unsigned long int port)
|
|
+{
|
|
+ if (port >= MAX_PORT)
|
|
+ return;
|
|
+
|
|
+ io.swp->outw (b, port);
|
|
+}
|
|
+
|
|
+void
|
|
+_outl (unsigned int b, unsigned long int port)
|
|
+{
|
|
+ if (port >= MAX_PORT)
|
|
+ return;
|
|
+
|
|
+ io.swp->outl (b, port);
|
|
+}
|
|
+
|
|
+unsigned int
|
|
+_inb (unsigned long int port)
|
|
+{
|
|
+ return io.swp->inb (port);
|
|
+}
|
|
+
|
|
+unsigned int
|
|
+_inw (unsigned long int port)
|
|
+{
|
|
+ return io.swp->inw (port);
|
|
+}
|
|
+
|
|
+unsigned int
|
|
+_inl (unsigned long int port)
|
|
+{
|
|
+ return io.swp->inl (port);
|
|
+}
|
|
+
|
|
+unsigned long int
|
|
+_bus_base (void)
|
|
+{
|
|
+ if (!io.swp && init_iosys () < 0)
|
|
+ return -1;
|
|
+ return io.bus_memory_base;
|
|
+}
|
|
+
|
|
+unsigned long int
|
|
+_bus_base_sparse (void)
|
|
+{
|
|
+ if (!io.swp && init_iosys () < 0)
|
|
+ return -1;
|
|
+ return io.sparse_bus_memory_base;
|
|
+}
|
|
+
|
|
+int
|
|
+_hae_shift (void)
|
|
+{
|
|
+ if (!io.swp && init_iosys () < 0)
|
|
+ return -1;
|
|
+ if (io.swiz == IOSWIZZLE_JENSEN)
|
|
+ return 7;
|
|
+ if (io.swiz == IOSWIZZLE_SPARSE)
|
|
+ return 5;
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+weak_alias (_sethae, sethae);
|
|
+weak_alias (_ioperm, ioperm);
|
|
+weak_alias (_iopl, iopl);
|
|
+weak_alias (_inb, inb);
|
|
+weak_alias (_inw, inw);
|
|
+weak_alias (_inl, inl);
|
|
+weak_alias (_outb, outb);
|
|
+weak_alias (_outw, outw);
|
|
+weak_alias (_outl, outl);
|
|
+weak_alias (_bus_base, bus_base);
|
|
+weak_alias (_bus_base_sparse, bus_base_sparse);
|
|
+weak_alias (_hae_shift, hae_shift);
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/ipc_priv.h b/sysdeps/unix/sysv/linux/sw_64/ipc_priv.h
|
|
new file mode 100644
|
|
index 00000000..fa66f0ac
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/ipc_priv.h
|
|
@@ -0,0 +1,21 @@
|
|
+/* Old SysV permission definition for Linux. Sw_64 version.
|
|
+ Copyright (C) 2016-2023 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/>. */
|
|
+
|
|
+#define __OLD_IPC_ID_TYPE unsigned int
|
|
+#define __OLD_IPC_MODE_TYPE unsigned int
|
|
+#include <sysdeps/unix/sysv/linux/ipc_priv.h>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/jmp_buf-macros.h b/sysdeps/unix/sysv/linux/sw_64/jmp_buf-macros.h
|
|
new file mode 100644
|
|
index 00000000..b595173e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/jmp_buf-macros.h
|
|
@@ -0,0 +1,6 @@
|
|
+#define JMP_BUF_SIZE 272
|
|
+#define SIGJMP_BUF_SIZE 272
|
|
+#define JMP_BUF_ALIGN 8
|
|
+#define SIGJMP_BUF_ALIGN 8
|
|
+#define MASK_WAS_SAVED_OFFSET 136
|
|
+#define SAVED_MASK_OFFSET 144
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/kernel-features.h b/sysdeps/unix/sysv/linux/sw_64/kernel-features.h
|
|
new file mode 100644
|
|
index 00000000..b8986a40
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/kernel-features.h
|
|
@@ -0,0 +1,53 @@
|
|
+/* Set flags signalling availability of kernel features based on given
|
|
+ kernel version number.
|
|
+ Copyright (C) 2010-2023 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/>. */
|
|
+
|
|
+#ifndef _KERNEL_FEATURES_H
|
|
+#define _KERNEL_FEATURES_H 1
|
|
+
|
|
+#include_next <kernel-features.h>
|
|
+
|
|
+/* Support for statfs64 was added in 5.1. */
|
|
+#if __LINUX_KERNEL_VERSION < 0x050100
|
|
+# undef __ASSUME_STATFS64
|
|
+# define __ASSUME_STATFS64 0
|
|
+#endif
|
|
+
|
|
+#define __ASSUME_RECV_SYSCALL 1
|
|
+#define __ASSUME_SEND_SYSCALL 1
|
|
+
|
|
+/* Support for the renameat2 syscall was added in 3.17. */
|
|
+#if __LINUX_KERNEL_VERSION < 0x031100
|
|
+# undef __ASSUME_RENAMEAT2
|
|
+#endif
|
|
+
|
|
+/* Support for the execveat syscall was added in 4.2. */
|
|
+#if __LINUX_KERNEL_VERSION < 0x040200
|
|
+# undef __ASSUME_EXECVEAT
|
|
+#endif
|
|
+
|
|
+/* Support for copy_file_range, statx was added in kernel 4.13. */
|
|
+#if __LINUX_KERNEL_VERSION < 0x040D00
|
|
+# undef __ASSUME_MLOCK2
|
|
+# undef __ASSUME_STATX
|
|
+#endif
|
|
+
|
|
+/* Sw_64 requires old sysvipc even being a 64-bit architecture. */
|
|
+#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64
|
|
+
|
|
+#endif /* _KERNEL_FEATURES_H */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/kernel_rt_sigframe.h b/sysdeps/unix/sysv/linux/sw_64/kernel_rt_sigframe.h
|
|
new file mode 100644
|
|
index 00000000..42f441d5
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/kernel_rt_sigframe.h
|
|
@@ -0,0 +1,25 @@
|
|
+/* Copyright (C) 2009-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+/* This structure must have the same shape as the linux kernel
|
|
+ equivalent. */
|
|
+struct kernel_rt_sigframe
|
|
+{
|
|
+ siginfo_t info;
|
|
+ ucontext_t uc;
|
|
+};
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/kernel_sigaction.h b/sysdeps/unix/sysv/linux/sw_64/kernel_sigaction.h
|
|
new file mode 100644
|
|
index 00000000..bf3da10e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/kernel_sigaction.h
|
|
@@ -0,0 +1,10 @@
|
|
+#include <sysdeps/unix/sysv/linux/kernel_sigaction.h>
|
|
+
|
|
+void __syscall_rt_sigreturn (void) attribute_hidden;
|
|
+void __syscall_sigreturn (void) attribute_hidden;
|
|
+
|
|
+#define STUB(act, sigsetsize) \
|
|
+ (sigsetsize), (act) ? ((unsigned long) ((act->sa_flags & SA_SIGINFO) \
|
|
+ ? &__syscall_rt_sigreturn \
|
|
+ : &__syscall_sigreturn)) \
|
|
+ : 0
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/kernel_stat.h b/sysdeps/unix/sysv/linux/sw_64/kernel_stat.h
|
|
new file mode 100644
|
|
index 00000000..f32f4678
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/kernel_stat.h
|
|
@@ -0,0 +1,91 @@
|
|
+/* Definition of `struct stat' used in the kernel. */
|
|
+struct kernel_stat
|
|
+{
|
|
+ unsigned int st_dev;
|
|
+ unsigned int st_ino;
|
|
+ unsigned int st_mode;
|
|
+ unsigned int st_nlink;
|
|
+ unsigned int st_uid;
|
|
+ unsigned int st_gid;
|
|
+ unsigned int st_rdev;
|
|
+ long int st_size;
|
|
+ unsigned long int st_atime_sec;
|
|
+ unsigned long int st_mtime_sec;
|
|
+ unsigned long int st_ctime_sec;
|
|
+ unsigned int st_blksize;
|
|
+ int st_blocks;
|
|
+ unsigned int st_flags;
|
|
+ unsigned int st_gen;
|
|
+};
|
|
+
|
|
+/* Definition of `struct stat64' used in the kernel. */
|
|
+struct kernel_stat64
|
|
+{
|
|
+ unsigned long st_dev;
|
|
+ unsigned long st_ino;
|
|
+ unsigned long st_rdev;
|
|
+ long st_size;
|
|
+ unsigned long st_blocks;
|
|
+
|
|
+ unsigned int st_mode;
|
|
+ unsigned int st_uid;
|
|
+ unsigned int st_gid;
|
|
+ unsigned int st_blksize;
|
|
+ unsigned int st_nlink;
|
|
+ unsigned int __pad0;
|
|
+
|
|
+ unsigned long st_atime_sec;
|
|
+ unsigned long st_atimensec;
|
|
+ unsigned long st_mtime_sec;
|
|
+ unsigned long st_mtimensec;
|
|
+ unsigned long st_ctime_sec;
|
|
+ unsigned long st_ctimensec;
|
|
+ long __glibc_reserved[3];
|
|
+};
|
|
+
|
|
+/* Definition of `struct stat' used by glibc 2.0. */
|
|
+struct glibc2_stat
|
|
+{
|
|
+ __dev_t st_dev;
|
|
+ __ino_t st_ino;
|
|
+ __mode_t st_mode;
|
|
+ __nlink_t st_nlink;
|
|
+ __uid_t st_uid;
|
|
+ __gid_t st_gid;
|
|
+ __dev_t st_rdev;
|
|
+ __off_t st_size;
|
|
+ __time_t st_atime_sec;
|
|
+ __time_t st_mtime_sec;
|
|
+ __time_t st_ctime_sec;
|
|
+ unsigned int st_blksize;
|
|
+ int st_blocks;
|
|
+ unsigned int st_flags;
|
|
+ unsigned int st_gen;
|
|
+};
|
|
+
|
|
+/* Definition of `struct stat' used by glibc 2.1. */
|
|
+struct glibc21_stat
|
|
+{
|
|
+ __dev_t st_dev;
|
|
+ __ino64_t st_ino;
|
|
+ __mode_t st_mode;
|
|
+ __nlink_t st_nlink;
|
|
+ __uid_t st_uid;
|
|
+ __gid_t st_gid;
|
|
+ __dev_t st_rdev;
|
|
+ __off_t st_size;
|
|
+ __time_t st_atime_sec;
|
|
+ __time_t st_mtime_sec;
|
|
+ __time_t st_ctime_sec;
|
|
+ __blkcnt64_t st_blocks;
|
|
+ __blksize_t st_blksize;
|
|
+ unsigned int st_flags;
|
|
+ unsigned int st_gen;
|
|
+ int __pad3;
|
|
+ long __glibc_reserved[4];
|
|
+};
|
|
+
|
|
+#define STAT_IS_KERNEL_STAT 0
|
|
+#define STAT64_IS_KERNEL_STAT64 1
|
|
+#define XSTAT_IS_XSTAT64 1
|
|
+#define STATFS_IS_STATFS64 0
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/kernel_sysinfo.h b/sysdeps/unix/sysv/linux/sw_64/kernel_sysinfo.h
|
|
new file mode 100644
|
|
index 00000000..b47f33c0
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/kernel_sysinfo.h
|
|
@@ -0,0 +1,6 @@
|
|
+/* A copy of the couple of bits we need from <asm/sysinfo.h>. */
|
|
+
|
|
+#define GSI_IEEE_FP_CONTROL 45
|
|
+
|
|
+#define SSI_IEEE_FP_CONTROL 14
|
|
+#define SSI_IEEE_RAISE_EXCEPTION 1001
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/kernel_termios.h b/sysdeps/unix/sysv/linux/sw_64/kernel_termios.h
|
|
new file mode 100644
|
|
index 00000000..ad7c0047
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/kernel_termios.h
|
|
@@ -0,0 +1,43 @@
|
|
+/* Copyright (C) 1997-2023 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/>. */
|
|
+
|
|
+#ifndef _KERNEL_TERMIOS_H
|
|
+#define _KERNEL_TERMIOS_H 1
|
|
+
|
|
+/* The following corresponds to the values from the Linux 2.1.20 kernel. */
|
|
+
|
|
+/* We need the definition of tcflag_t, cc_t, and speed_t. */
|
|
+#include <termios.h>
|
|
+
|
|
+#define __KERNEL_NCCS 19
|
|
+
|
|
+struct __kernel_termios
|
|
+{
|
|
+ tcflag_t c_iflag; /* input mode flags */
|
|
+ tcflag_t c_oflag; /* output mode flags */
|
|
+ tcflag_t c_cflag; /* control mode flags */
|
|
+ tcflag_t c_lflag; /* local mode flags */
|
|
+ cc_t c_cc[__KERNEL_NCCS]; /* control characters */
|
|
+ cc_t c_line; /* line discipline */
|
|
+ speed_t c_ispeed; /* input speed */
|
|
+ speed_t c_ospeed; /* output speed */
|
|
+};
|
|
+
|
|
+#define _HAVE_C_ISPEED 1
|
|
+#define _HAVE_C_OSPEED 1
|
|
+
|
|
+#endif /* kernel_termios.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/librt-compat.c b/sysdeps/unix/sysv/linux/sw_64/librt-compat.c
|
|
new file mode 100644
|
|
index 00000000..e91925e3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/librt-compat.c
|
|
@@ -0,0 +1,24 @@
|
|
+/* Placeholder definitions to pull in removed symbol versions. sw_64 version.
|
|
+ Copyright (C) 2023 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 <sysdeps/unix/sysv/linux/librt-compat.c>
|
|
+
|
|
+#if SHLIB_COMPAT (librt, GLIBC_2_3, GLIBC_2_34)
|
|
+compat_symbol (librt, __librt_version_placeholder_1,
|
|
+ __librt_version_placeholder, GLIBC_2_3);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/localplt.data b/sysdeps/unix/sysv/linux/sw_64/localplt.data
|
|
new file mode 100644
|
|
index 00000000..9dfd3f9b
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/localplt.data
|
|
@@ -0,0 +1,33 @@
|
|
+libc.so: _OtsAddX ?
|
|
+libc.so: _OtsConvertFloatTX ?
|
|
+libc.so: _OtsConvertFloatXT ?
|
|
+libc.so: _OtsCvtQUX ?
|
|
+libc.so: _OtsCvtQX ?
|
|
+libc.so: _OtsCvtXQ ?
|
|
+libc.so: _OtsDivX ?
|
|
+libc.so: _OtsEqlX ?
|
|
+libc.so: _OtsGeqX ?
|
|
+libc.so: _OtsGtrX ?
|
|
+libc.so: _OtsLeqX ?
|
|
+libc.so: _OtsLssX ?
|
|
+libc.so: _OtsMulX ?
|
|
+libc.so: _OtsNeqX ?
|
|
+libc.so: _OtsNintXQ ?
|
|
+libc.so: _OtsSubX ?
|
|
+libc.so: _Unwind_Find_FDE
|
|
+libc.so: calloc + RELA R_SW_64_GLOB_DAT
|
|
+libc.so: free + RELA R_SW_64_GLOB_DAT
|
|
+libc.so: malloc + RELA R_SW_64_GLOB_DAT
|
|
+libc.so: realloc + RELA R_SW_64_GLOB_DAT
|
|
+libm.so: matherr + RELA R_SW_64_GLOB_DAT
|
|
+# We used to offer inline functions that used this, so it must be exported.
|
|
+# Ought to reorg things such that carg isn't thus forced to use a plt.
|
|
+libm.so: __atan2
|
|
+#libm.so: lround
|
|
+#libm.so: pow
|
|
+#libm.so: scalbln
|
|
+#libm.so: rint
|
|
+#libm.so: lrint
|
|
+#libm.so: remainder
|
|
+# The dynamic loader needs __tls_get_addr for TLS.
|
|
+ld.so: __tls_get_addr ?
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/lxstat64.c b/sysdeps/unix/sysv/linux/sw_64/lxstat64.c
|
|
new file mode 100644
|
|
index 00000000..e0dfcf8b
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/lxstat64.c
|
|
@@ -0,0 +1,46 @@
|
|
+/* lxstat using old-style Unix stat system call.
|
|
+ Copyright (C) 2004-2023 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/>. */
|
|
+
|
|
+#define __lxstat __redirect___lxstat
|
|
+#include <sys/stat.h>
|
|
+#undef __lxstat
|
|
+#include <fcntl.h>
|
|
+#include <kernel_stat.h>
|
|
+#include <sysdep.h>
|
|
+#include <xstatconv.h>
|
|
+
|
|
+/* Get information about the file NAME in BUF. */
|
|
+int
|
|
+__lxstat64 (int vers, const char *name, struct stat64 *buf)
|
|
+{
|
|
+ switch (vers)
|
|
+ {
|
|
+ case _STAT_VER_KERNEL64:
|
|
+ return INLINE_SYSCALL_CALL (lstat64, name, buf);
|
|
+
|
|
+ default:
|
|
+ {
|
|
+ struct kernel_stat kbuf;
|
|
+ int r = INTERNAL_SYSCALL_CALL (lstat, name, &kbuf);
|
|
+ if (r == 0)
|
|
+ return __xstat_conv (vers, &kbuf, buf);
|
|
+ return INLINE_SYSCALL_ERROR_RETURN_VALUE (-r);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+weak_alias (__lxstat64, __lxstat);
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/makecontext.S b/sysdeps/unix/sysv/linux/sw_64/makecontext.S
|
|
new file mode 100644
|
|
index 00000000..55cb73a2
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/makecontext.S
|
|
@@ -0,0 +1,164 @@
|
|
+/* Copyright (C) 2004-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <ucontext-offsets.h>
|
|
+
|
|
+
|
|
+ENTRY(__makecontext)
|
|
+ ldgp $29, 0($27)
|
|
+#ifdef PROF
|
|
+ .set noat
|
|
+ ldi AT, _mcount
|
|
+ call AT, (AT), _mcount
|
|
+ .set at
|
|
+#endif
|
|
+ .prologue 1
|
|
+
|
|
+ /* Compute top of stack, including arguments. */
|
|
+ ldl $1, UC_STACK+SS_SP($16)
|
|
+ ldl $2, UC_STACK+SS_SIZE($16)
|
|
+ addl $1, $2, $8
|
|
+ subl $18, 6, $1
|
|
+ sellt $1, 0, $1, $1
|
|
+ s8addl $1, 0, $2
|
|
+ subl $8, $2, $8
|
|
+ bic $8,0xf,$8 /* Keep the stack aligned ,mod */
|
|
+
|
|
+ /* Copy all parameters. Switch statement header here. */
|
|
+ ldih $3, $jumptable($29) !gprelhigh
|
|
+ cmple $18, 6, $1
|
|
+ mov $18, $2
|
|
+ seleq $1, 7, $2, $2
|
|
+ s4addl $2, $3, $3
|
|
+ ldw $4, $jumptable($3) !gprellow
|
|
+ addl $4, $29, $4
|
|
+ jmp $31, ($4), $args1
|
|
+
|
|
+ .section .rodata
|
|
+ .align 2
|
|
+$jumptable:
|
|
+ .gprel32 $args0
|
|
+ .gprel32 $args1
|
|
+ .gprel32 $args2
|
|
+ .gprel32 $args3
|
|
+ .gprel32 $args4
|
|
+ .gprel32 $args5
|
|
+ .gprel32 $args6
|
|
+ .gprel32 $argsN
|
|
+ .text
|
|
+
|
|
+ /* Here we process arguments 7 through N. This is a straight
|
|
+ stack-to-stack copy. */
|
|
+ .align 4
|
|
+$argsN:
|
|
+ subl $18, 6, $1
|
|
+ ldi $2, 0($8)
|
|
+ ldi $3, 3*8($30)
|
|
+ .align 4
|
|
+1:
|
|
+ ldl $0, 0($3)
|
|
+ subl $1, 1, $1
|
|
+ ldi $3, 8($3)
|
|
+ stl $0, 0($2)
|
|
+ ldi $2, 8($2)
|
|
+ bne $1, 1b
|
|
+
|
|
+ /* Here we process arguments 6 through 0. This involves
|
|
+ copying into the register save areas of the ucontext. */
|
|
+ .align 4
|
|
+$args6:
|
|
+ ldl $0, 2*8($30)
|
|
+ stl $0, UC_SIGCTX+SC_REGS+21*8($16)
|
|
+ unop
|
|
+ stl $0, UC_SIGCTX+SC_FPREGS+21*8($16)
|
|
+$args5:
|
|
+ ldl $0, 1*8($30)
|
|
+ stl $0, UC_SIGCTX+SC_REGS+20*8($16)
|
|
+ unop
|
|
+ stl $0, UC_SIGCTX+SC_FPREGS+20*8($16)
|
|
+$args4:
|
|
+ ldl $0, 0*8($30)
|
|
+ stl $0, UC_SIGCTX+SC_REGS+19*8($16)
|
|
+ unop
|
|
+ stl $0, UC_SIGCTX+SC_FPREGS+19*8($16)
|
|
+$args3:
|
|
+ unop
|
|
+ stl $21, UC_SIGCTX+SC_REGS+18*8($16)
|
|
+ unop
|
|
+ fstd $f21, UC_SIGCTX+SC_FPREGS+18*8($16)
|
|
+$args2:
|
|
+ unop
|
|
+ stl $20, UC_SIGCTX+SC_REGS+17*8($16)
|
|
+ unop
|
|
+ fstd $f20, UC_SIGCTX+SC_FPREGS+17*8($16)
|
|
+$args1:
|
|
+ unop
|
|
+ stl $19, UC_SIGCTX+SC_REGS+16*8($16)
|
|
+ unop
|
|
+ fstd $f19, UC_SIGCTX+SC_FPREGS+16*8($16)
|
|
+$args0:
|
|
+
|
|
+ /* Set up the registers ready to invoke __startcontext.
|
|
+ We seed $27 with the target function address, and $9
|
|
+ with the link from ucp. */
|
|
+ ldih $0, __startcontext($29) !gprelhigh
|
|
+ ldl $1, UC_LINK($16)
|
|
+ ldi $0, __startcontext($0) !gprellow
|
|
+ stl $17, UC_SIGCTX+SC_REGS+27*8($16)
|
|
+ stl $8, UC_SIGCTX+SC_REGS+30*8($16)
|
|
+ stl $0, UC_SIGCTX+SC_PC($16)
|
|
+ stl $1, UC_SIGCTX+SC_REGS+9*8($16)
|
|
+
|
|
+ /* No return value from makecontext. */
|
|
+ ret
|
|
+
|
|
+END(__makecontext)
|
|
+weak_alias (__makecontext, makecontext)
|
|
+
|
|
+/* This function is where a new makecontext "thread" begins life.
|
|
+ We have already set up $27 for calling the target function, and
|
|
+ we've set $9 to the UC_LINK of the parent context.
|
|
+
|
|
+ If the function returns, we either jump to the linked context
|
|
+ (if non-null) or exit. */
|
|
+
|
|
+ .align 4
|
|
+ .ent __startcontext
|
|
+__startcontext:
|
|
+ .frame $31, 0, $31, 0
|
|
+ .prologue 0
|
|
+
|
|
+ call $26, ($27), 0
|
|
+ ldgp $29, 0($26)
|
|
+ mov $9, $16
|
|
+ beq $9, 1f
|
|
+
|
|
+#ifdef PIC
|
|
+ bsr $26, __setcontext !samegp
|
|
+1: mov $31, $16
|
|
+ bsr $26, HIDDEN_JUMPTARGET(exit) !samegp
|
|
+#else
|
|
+ call $26, __setcontext
|
|
+ ldgp $29, 0($26)
|
|
+1: mov $31, $16
|
|
+ call $26, HIDDEN_JUMPTARGET(exit)
|
|
+#endif
|
|
+
|
|
+ halt
|
|
+
|
|
+ .end __startcontext
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/nldbl-abi.h b/sysdeps/unix/sysv/linux/sw_64/nldbl-abi.h
|
|
new file mode 100644
|
|
index 00000000..0b061cb3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/nldbl-abi.h
|
|
@@ -0,0 +1,8 @@
|
|
+/* ABI version for long double switch.
|
|
+ This is used by the Versions and math_ldbl_opt.h files in
|
|
+ sysdeps/ieee754/ldbl-opt/. It gives the ABI version where
|
|
+ long double == double was replaced with proper long double
|
|
+ for libm *l functions and libc functions using long double. */
|
|
+
|
|
+#define NLDBL_VERSION GLIBC_2.4
|
|
+#define LONG_DOUBLE_COMPAT_VERSION GLIBC_2_4
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/oldglob.c b/sysdeps/unix/sysv/linux/sw_64/oldglob.c
|
|
new file mode 100644
|
|
index 00000000..3024d92d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/oldglob.c
|
|
@@ -0,0 +1,96 @@
|
|
+/* Copyright (C) 1998-2023 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/>. */
|
|
+
|
|
+/* This file contains only wrappers around the real glob functions. It
|
|
+ became necessary since the glob_t structure changed. */
|
|
+#include <sys/types.h>
|
|
+#include <glob.h>
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+/* This is the old structure. The difference is that the gl_pathc and
|
|
+ gl_offs elements have type `int'. */
|
|
+typedef struct
|
|
+{
|
|
+ int gl_pathc; /* Count of paths matched by the pattern. */
|
|
+ char **gl_pathv; /* List of matched pathnames. */
|
|
+ int gl_offs; /* Slots to reserve in `gl_pathv'. */
|
|
+ int gl_flags; /* Set to FLAGS, maybe | GLOB_MAGCHAR. */
|
|
+
|
|
+ /* If the GLOB_ALTDIRFUNC flag is set, the following functions
|
|
+ are used instead of the normal file access functions. */
|
|
+ void (*gl_closedir) (void *);
|
|
+ struct dirent *(*gl_readdir) (void *);
|
|
+ void *(*gl_opendir) (const char *);
|
|
+ int (*gl_lstat) (const char *, struct stat *);
|
|
+ int (*gl_stat) (const char *, struct stat *);
|
|
+} old_glob_t;
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__old_glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
|
|
+ old_glob_t *pglob)
|
|
+{
|
|
+ glob_t correct;
|
|
+ int result;
|
|
+
|
|
+ /* Construct an object of correct type. */
|
|
+ correct.gl_pathc = pglob->gl_pathc;
|
|
+ correct.gl_pathv = pglob->gl_pathv;
|
|
+ correct.gl_offs = pglob->gl_offs;
|
|
+ correct.gl_flags = pglob->gl_flags;
|
|
+ correct.gl_closedir = pglob->gl_closedir;
|
|
+ correct.gl_readdir = pglob->gl_readdir;
|
|
+ correct.gl_opendir = pglob->gl_opendir;
|
|
+ /* Set gl_lstat and gl_stat for both gl_stat for compatibility with old
|
|
+ implementation that did not follow dangling symlinks. */
|
|
+ correct.gl_lstat = pglob->gl_stat;
|
|
+ correct.gl_stat = pglob->gl_stat;
|
|
+
|
|
+ result = glob (pattern, flags, errfunc, &correct);
|
|
+
|
|
+ /* And convert it back. */
|
|
+ pglob->gl_pathc = correct.gl_pathc;
|
|
+ pglob->gl_pathv = correct.gl_pathv;
|
|
+ pglob->gl_offs = correct.gl_offs;
|
|
+ pglob->gl_flags = correct.gl_flags;
|
|
+ pglob->gl_closedir = correct.gl_closedir;
|
|
+ pglob->gl_readdir = correct.gl_readdir;
|
|
+ pglob->gl_opendir = correct.gl_opendir;
|
|
+ /* Only need to restore gl_stat. */
|
|
+ pglob->gl_stat = correct.gl_stat;
|
|
+
|
|
+ return result;
|
|
+}
|
|
+compat_symbol (libc, __old_glob, glob, GLIBC_2_0);
|
|
+
|
|
+/* Free storage allocated in PGLOB by a previous `glob' call. */
|
|
+void attribute_compat_text_section
|
|
+__old_globfree (old_glob_t *pglob)
|
|
+{
|
|
+ glob_t correct;
|
|
+
|
|
+ /* We only need these two symbols. */
|
|
+ correct.gl_pathc = pglob->gl_pathc;
|
|
+ correct.gl_pathv = pglob->gl_pathv;
|
|
+ correct.gl_offs = pglob->gl_offs;
|
|
+
|
|
+ globfree (&correct);
|
|
+}
|
|
+compat_symbol (libc, __old_globfree, globfree, GLIBC_2_0);
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_adjtime.c b/sysdeps/unix/sysv/linux/sw_64/osf_adjtime.c
|
|
new file mode 100644
|
|
index 00000000..334c0d53
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_adjtime.c
|
|
@@ -0,0 +1,139 @@
|
|
+/* adjtime -- adjust the system clock. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <time.h>
|
|
+# include <sys/time.h>
|
|
+# include <sys/timex.h>
|
|
+# include <string.h>
|
|
+
|
|
+struct timex32
|
|
+{
|
|
+ unsigned int modes; /* mode selector */
|
|
+ long offset; /* time offset (usec) */
|
|
+ long freq; /* frequency offset (scaled ppm) */
|
|
+ long maxerror; /* maximum error (usec) */
|
|
+ long esterror; /* estimated error (usec) */
|
|
+ int status; /* clock command/status */
|
|
+ long constant; /* pll time constant */
|
|
+ long precision; /* clock precision (usec) (read only) */
|
|
+ long tolerance; /* clock frequency tolerance (ppm)
|
|
+ * (read only)
|
|
+ */
|
|
+ struct __timeval32 time; /* (read only) */
|
|
+ long tick; /* (modified) usecs between clock ticks */
|
|
+
|
|
+ long ppsfreq; /* pps frequency (scaled ppm) (ro) */
|
|
+ long jitter; /* pps jitter (us) (ro) */
|
|
+ int shift; /* interval duration (s) (shift) (ro) */
|
|
+ long stabil; /* pps stability (scaled ppm) (ro) */
|
|
+ long jitcnt; /* jitter limit exceeded (ro) */
|
|
+ long calcnt; /* calibration intervals (ro) */
|
|
+ long errcnt; /* calibration errors (ro) */
|
|
+ long stbcnt; /* stability limit exceeded (ro) */
|
|
+
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+ int : 32;
|
|
+};
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__adjtime_tv32 (const struct __timeval32 *itv, struct __timeval32 *otv)
|
|
+{
|
|
+ struct timeval itv64 = valid_timeval32_to_timeval (*itv);
|
|
+ struct timeval otv64;
|
|
+
|
|
+ if (__adjtime (&itv64, &otv64) == -1)
|
|
+ return -1;
|
|
+
|
|
+ *otv = valid_timeval_to_timeval32 (otv64);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__adjtimex_tv32 (struct timex32 *tx)
|
|
+{
|
|
+ struct timex tx64;
|
|
+ memset (&tx64, 0, sizeof tx64);
|
|
+ tx64.modes = tx->modes;
|
|
+ tx64.offset = tx->offset;
|
|
+ tx64.freq = tx->freq;
|
|
+ tx64.maxerror = tx->maxerror;
|
|
+ tx64.esterror = tx->esterror;
|
|
+ tx64.status = tx->status;
|
|
+ tx64.constant = tx->constant;
|
|
+ tx64.precision = tx->precision;
|
|
+ tx64.tolerance = tx->tolerance;
|
|
+ tx64.tick = tx->tick;
|
|
+ tx64.ppsfreq = tx->ppsfreq;
|
|
+ tx64.jitter = tx->jitter;
|
|
+ tx64.shift = tx->shift;
|
|
+ tx64.stabil = tx->stabil;
|
|
+ tx64.jitcnt = tx->jitcnt;
|
|
+ tx64.calcnt = tx->calcnt;
|
|
+ tx64.errcnt = tx->errcnt;
|
|
+ tx64.stbcnt = tx->stbcnt;
|
|
+ tx64.time = valid_timeval32_to_timeval (tx->time);
|
|
+
|
|
+ int status = __adjtimex (&tx64);
|
|
+ if (status < 0)
|
|
+ return status;
|
|
+
|
|
+ memset (tx, 0, sizeof *tx);
|
|
+ tx->modes = tx64.modes;
|
|
+ tx->offset = tx64.offset;
|
|
+ tx->freq = tx64.freq;
|
|
+ tx->maxerror = tx64.maxerror;
|
|
+ tx->esterror = tx64.esterror;
|
|
+ tx->status = tx64.status;
|
|
+ tx->constant = tx64.constant;
|
|
+ tx->precision = tx64.precision;
|
|
+ tx->tolerance = tx64.tolerance;
|
|
+ tx->tick = tx64.tick;
|
|
+ tx->ppsfreq = tx64.ppsfreq;
|
|
+ tx->jitter = tx64.jitter;
|
|
+ tx->shift = tx64.shift;
|
|
+ tx->stabil = tx64.stabil;
|
|
+ tx->jitcnt = tx64.jitcnt;
|
|
+ tx->calcnt = tx64.calcnt;
|
|
+ tx->errcnt = tx64.errcnt;
|
|
+ tx->stbcnt = tx64.stbcnt;
|
|
+ tx->time = valid_timeval_to_timeval32 (tx64.time);
|
|
+
|
|
+ return status;
|
|
+}
|
|
+
|
|
+strong_alias (__adjtimex_tv32, __adjtimex_tv32_1);
|
|
+strong_alias (__adjtimex_tv32, __adjtimex_tv32_2);
|
|
+compat_symbol (libc, __adjtimex_tv32_1, __adjtimex, GLIBC_2_0);
|
|
+compat_symbol (libc, __adjtimex_tv32_2, adjtimex, GLIBC_2_0);
|
|
+compat_symbol (libc, __adjtime_tv32, adjtime, GLIBC_2_0);
|
|
+
|
|
+#endif /* SHLIB_COMPAT */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_getitimer.c b/sysdeps/unix/sysv/linux/sw_64/osf_getitimer.c
|
|
new file mode 100644
|
|
index 00000000..938ffb99
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_getitimer.c
|
|
@@ -0,0 +1,42 @@
|
|
+/* getitimer -- Get the state of an interval timer. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <time.h>
|
|
+# include <sys/time.h>
|
|
+# include <tv32-compat.h>
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__getitimer_tv32 (int which, struct __itimerval32 *curr_value)
|
|
+{
|
|
+ struct itimerval curr_value_64;
|
|
+ if (__getitimer (which, &curr_value_64) == -1)
|
|
+ return -1;
|
|
+
|
|
+ /* Write all fields of 'curr_value' regardless of overflow. */
|
|
+ curr_value->it_interval
|
|
+ = valid_timeval_to_timeval32 (curr_value_64.it_interval);
|
|
+ curr_value->it_value = valid_timeval_to_timeval32 (curr_value_64.it_value);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __getitimer_tv32, getitimer, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_getrusage.c b/sysdeps/unix/sysv/linux/sw_64/osf_getrusage.c
|
|
new file mode 100644
|
|
index 00000000..c5fb5a47
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_getrusage.c
|
|
@@ -0,0 +1,39 @@
|
|
+/* utimes -- change file timestamps. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <sys/time.h>
|
|
+# include <sys/resource.h>
|
|
+# include <tv32-compat.h>
|
|
+
|
|
+int
|
|
+__getrusage_tv32 (int who, struct __rusage32 *usage32)
|
|
+{
|
|
+ struct rusage usage;
|
|
+ if (__getrusage (who, &usage) == -1)
|
|
+ return -1;
|
|
+
|
|
+ rusage64_to_rusage32 (&usage, usage32);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __getrusage_tv32, getrusage, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_gettimeofday.c b/sysdeps/unix/sysv/linux/sw_64/osf_gettimeofday.c
|
|
new file mode 100644
|
|
index 00000000..affb5655
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_gettimeofday.c
|
|
@@ -0,0 +1,47 @@
|
|
+/* gettimeofday -- Get the current time of day. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <time.h>
|
|
+# include <string.h>
|
|
+# include <time.h>
|
|
+# include <sys/time.h>
|
|
+
|
|
+/* Get the current time of day and timezone information putting it
|
|
+ into *TV and *TZ. */
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__gettimeofday_tv32 (struct __timeval32 *restrict tv32, void *restrict tz)
|
|
+{
|
|
+ if (__glibc_unlikely (tz != 0))
|
|
+ memset (tz, 0, sizeof (struct timezone));
|
|
+
|
|
+ struct __timespec64 ts;
|
|
+ __clock_gettime64 (CLOCK_REALTIME, &ts);
|
|
+
|
|
+ *tv32 = valid_timespec_to_timeval32 (ts);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __gettimeofday_tv32, __gettimeofday, GLIBC_2_0);
|
|
+strong_alias (__gettimeofday_tv32, __gettimeofday_tv32_1);
|
|
+compat_symbol (libc, __gettimeofday_tv32_1, gettimeofday, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_setitimer.c b/sysdeps/unix/sysv/linux/sw_64/osf_setitimer.c
|
|
new file mode 100644
|
|
index 00000000..7388a2e8
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_setitimer.c
|
|
@@ -0,0 +1,51 @@
|
|
+/* getitimer -- Get the state of an interval timer. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <time.h>
|
|
+# include <sys/time.h>
|
|
+# include <tv32-compat.h>
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__setitimer_tv32 (int which, const struct __itimerval32 *restrict new_value,
|
|
+ struct __itimerval32 *restrict old_value)
|
|
+{
|
|
+ struct itimerval new_value_64;
|
|
+ new_value_64.it_interval
|
|
+ = valid_timeval32_to_timeval (new_value->it_interval);
|
|
+ new_value_64.it_value = valid_timeval32_to_timeval (new_value->it_value);
|
|
+
|
|
+ if (old_value == NULL)
|
|
+ return __setitimer (which, &new_value_64, NULL);
|
|
+
|
|
+ struct itimerval old_value_64;
|
|
+ if (__setitimer (which, &new_value_64, &old_value_64) == -1)
|
|
+ return -1;
|
|
+
|
|
+ /* Write all fields of 'old_value' regardless of overflow. */
|
|
+ old_value->it_interval
|
|
+ = valid_timeval_to_timeval32 (old_value_64.it_interval);
|
|
+ old_value->it_value = valid_timeval_to_timeval32 (old_value_64.it_value);
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __setitimer_tv32, setitimer, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_settimeofday.c b/sysdeps/unix/sysv/linux/sw_64/osf_settimeofday.c
|
|
new file mode 100644
|
|
index 00000000..1dfe802e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_settimeofday.c
|
|
@@ -0,0 +1,48 @@
|
|
+/* settimeofday -- Set the current time of day. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <time.h>
|
|
+# include <sys/time.h>
|
|
+# include <time.h>
|
|
+# include <errno.h>
|
|
+
|
|
+/* Set the current time of day and timezone information.
|
|
+ This call is restricted to the super-user. */
|
|
+int attribute_compat_text_section
|
|
+__settimeofday_tv32 (const struct __timeval32 *tv32, const struct timezone *tz)
|
|
+{
|
|
+ if (__glibc_unlikely (tz != 0))
|
|
+ {
|
|
+ if (tv32 != 0)
|
|
+ {
|
|
+ __set_errno (EINVAL);
|
|
+ return -1;
|
|
+ }
|
|
+ return __settimezone (tz);
|
|
+ }
|
|
+
|
|
+ struct timespec ts = valid_timeval32_to_timespec (*tv32);
|
|
+ return __clock_settime (CLOCK_REALTIME, &ts);
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __settimeofday_tv32, settimeofday, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_utimes.c b/sysdeps/unix/sysv/linux/sw_64/osf_utimes.c
|
|
new file mode 100644
|
|
index 00000000..20fb6895
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_utimes.c
|
|
@@ -0,0 +1,36 @@
|
|
+/* utimes -- change file timestamps. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <time.h>
|
|
+# include <sys/time.h>
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__utimes_tv32 (const char *filename, const struct __timeval32 times32[2])
|
|
+{
|
|
+ struct timeval times[2];
|
|
+ times[0] = valid_timeval32_to_timeval (times32[0]);
|
|
+ times[1] = valid_timeval32_to_timeval (times32[1]);
|
|
+ return __utimes (filename, times);
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __utimes_tv32, utimes, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/osf_wait4.c b/sysdeps/unix/sysv/linux/sw_64/osf_wait4.c
|
|
new file mode 100644
|
|
index 00000000..8a7de5a4
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/osf_wait4.c
|
|
@@ -0,0 +1,40 @@
|
|
+/* wait4 -- wait for process to change state. Linux/SW_64/tv32 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+
|
|
+# include <sys/time.h>
|
|
+# include <sys/resource.h>
|
|
+# include <sys/wait.h>
|
|
+# include <tv32-compat.h>
|
|
+
|
|
+pid_t attribute_compat_text_section
|
|
+__wait4_tv32 (pid_t pid, int *status, int options, struct __rusage32 *usage32)
|
|
+{
|
|
+ struct rusage usage;
|
|
+ pid_t child = __wait4 (pid, status, options, &usage);
|
|
+
|
|
+ if (child >= 0 && usage32 != NULL)
|
|
+ rusage64_to_rusage32 (&usage, usage32);
|
|
+ return child;
|
|
+}
|
|
+
|
|
+compat_symbol (libc, __wait4_tv32, wait4, GLIBC_2_0);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/pipe.S b/sysdeps/unix/sysv/linux/sw_64/pipe.S
|
|
new file mode 100644
|
|
index 00000000..4ff12601
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/pipe.S
|
|
@@ -0,0 +1 @@
|
|
+#include <sysdeps/unix/sw_64/pipe.S>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/pointer_guard.h b/sysdeps/unix/sysv/linux/sw_64/pointer_guard.h
|
|
new file mode 100644
|
|
index 00000000..71f0e1e3
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/pointer_guard.h
|
|
@@ -0,0 +1,57 @@
|
|
+/* Pointer guard implementation. sw_64 version.
|
|
+ Copyright (C) 2006-2023 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/>. */
|
|
+
|
|
+#ifndef POINTER_GUARD_H
|
|
+#define POINTER_GUARD_H
|
|
+
|
|
+/* Pointer mangling support. Note that tls access is slow enough that
|
|
+ we don't deoptimize things by placing the pointer check value there. */
|
|
+#ifdef __ASSEMBLER__
|
|
+# if IS_IN(rtld)
|
|
+# define PTR_MANGLE(dst, src, tmp) \
|
|
+ ldih tmp, __pointer_chk_guard_local ($29) !gprelhigh; \
|
|
+ ldl tmp, __pointer_chk_guard_local (tmp) !gprellow; \
|
|
+ xor src, tmp, dst
|
|
+# define PTR_MANGLE2(dst, src, tmp) xor src, tmp, dst
|
|
+# elif defined SHARED
|
|
+# define PTR_MANGLE(dst, src, tmp) \
|
|
+ ldl tmp, __pointer_chk_guard; \
|
|
+ xor src, tmp, dst
|
|
+# else
|
|
+# define PTR_MANGLE(dst, src, tmp) \
|
|
+ ldl tmp, __pointer_chk_guard_local; \
|
|
+ xor src, tmp, dst
|
|
+# endif
|
|
+# define PTR_MANGLE2(dst, src, tmp) xor src, tmp, dst
|
|
+# define PTR_DEMANGLE(dst, tmp) PTR_MANGLE (dst, dst, tmp)
|
|
+# define PTR_DEMANGLE2(dst, tmp) PTR_MANGLE2 (dst, dst, tmp)
|
|
+#else
|
|
+# include <stdint.h>
|
|
+# if (IS_IN(rtld) || (!defined SHARED && (IS_IN(libc) || IS_IN(libpthread))))
|
|
+extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
|
|
+# define PTR_MANGLE(var) \
|
|
+ (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
|
|
+# else
|
|
+extern uintptr_t __pointer_chk_guard attribute_relro;
|
|
+# define PTR_MANGLE(var) \
|
|
+ (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard)
|
|
+# endif
|
|
+# define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
|
+#endif /* ASSEMBLER */
|
|
+
|
|
+#endif /* POINTER_GUARD_H */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/register-dump.h b/sysdeps/unix/sysv/linux/sw_64/register-dump.h
|
|
new file mode 100644
|
|
index 00000000..ff45563b
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/register-dump.h
|
|
@@ -0,0 +1,239 @@
|
|
+/* Dump registers.
|
|
+ Copyright (C) 2004-2023 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 <string.h>
|
|
+#include <ucontext.h>
|
|
+#include <sys/uio.h>
|
|
+#include <_itoa.h>
|
|
+
|
|
+/* We will print the register dump in this format:
|
|
+
|
|
+ V0: XXXXXXXXXXXXXXXX T0: XXXXXXXXXXXXXXXX T1: XXXXXXXXXXXXXXXX
|
|
+ T2: XXXXXXXXXXXXXXXX T3: XXXXXXXXXXXXXXXX T4: XXXXXXXXXXXXXXXX
|
|
+ T5: XXXXXXXXXXXXXXXX T6: XXXXXXXXXXXXXXXX T7: XXXXXXXXXXXXXXXX
|
|
+ S0: XXXXXXXXXXXXXXXX S1: XXXXXXXXXXXXXXXX S2: XXXXXXXXXXXXXXXX
|
|
+ S3: XXXXXXXXXXXXXXXX S4: XXXXXXXXXXXXXXXX S5: XXXXXXXXXXXXXXXX
|
|
+ S6: XXXXXXXXXXXXXXXX A0: XXXXXXXXXXXXXXXX A1: XXXXXXXXXXXXXXXX
|
|
+ A2: XXXXXXXXXXXXXXXX A3: XXXXXXXXXXXXXXXX A4: XXXXXXXXXXXXXXXX
|
|
+ A5: XXXXXXXXXXXXXXXX T8: XXXXXXXXXXXXXXXX T9: XXXXXXXXXXXXXXXX
|
|
+ T10: XXXXXXXXXXXXXXXX T11: XXXXXXXXXXXXXXXX RA: XXXXXXXXXXXXXXXX
|
|
+ T12: XXXXXXXXXXXXXXXX AT: XXXXXXXXXXXXXXXX GP: XXXXXXXXXXXXXXXX
|
|
+ SP: XXXXXXXXXXXXXXXX PC: XXXXXXXXXXXXXXXX
|
|
+
|
|
+ FP0: XXXXXXXXXXXXXXXX FP1: XXXXXXXXXXXXXXXX FP2: XXXXXXXXXXXXXXXX
|
|
+ FP3: XXXXXXXXXXXXXXXX FP4: XXXXXXXXXXXXXXXX FP5: XXXXXXXXXXXXXXXX
|
|
+ FP6: XXXXXXXXXXXXXXXX FP7: XXXXXXXXXXXXXXXX FP8: XXXXXXXXXXXXXXXX
|
|
+ FP9: XXXXXXXXXXXXXXXX FP10: XXXXXXXXXXXXXXXX FP11: XXXXXXXXXXXXXXXX
|
|
+ FP12: XXXXXXXXXXXXXXXX FP13: XXXXXXXXXXXXXXXX FP14: XXXXXXXXXXXXXXXX
|
|
+ FP15: XXXXXXXXXXXXXXXX FP16: XXXXXXXXXXXXXXXX FP17: XXXXXXXXXXXXXXXX
|
|
+ FP18: XXXXXXXXXXXXXXXX FP19: XXXXXXXXXXXXXXXX FP20: XXXXXXXXXXXXXXXX
|
|
+ FP21: XXXXXXXXXXXXXXXX FP22: XXXXXXXXXXXXXXXX FP23: XXXXXXXXXXXXXXXX
|
|
+ FP24: XXXXXXXXXXXXXXXX FP25: XXXXXXXXXXXXXXXX FP26: XXXXXXXXXXXXXXXX
|
|
+ FP27: XXXXXXXXXXXXXXXX FP28: XXXXXXXXXXXXXXXX FP29: XXXXXXXXXXXXXXXX
|
|
+ FP30: XXXXXXXXXXXXXXXX FPCR: XXXXXXXXXXXXXXXX
|
|
+
|
|
+ TA0: XXXXXXXXXXXXXXXX TA1: XXXXXXXXXXXXXXXX TA2: XXXXXXXXXXXXXXXX
|
|
+*/
|
|
+
|
|
+static void
|
|
+hexvalue (unsigned long int value, char *buf, size_t len)
|
|
+{
|
|
+ char *cp = _itoa_word (value, buf + len, 16, 0);
|
|
+ while (cp > buf)
|
|
+ *--cp = '0';
|
|
+}
|
|
+
|
|
+static void
|
|
+register_dump (int fd, struct ucontext_t *ctx)
|
|
+{
|
|
+ struct iovec iov[31 * 2 + 2 /* REGS + PC. */
|
|
+ + 31 * 2 + 2 /* FREGS + FPCR. */
|
|
+ + (3 * 2) /* TA0, TA1, TA3. */
|
|
+ + 1 /* '\n'. */];
|
|
+ size_t nr = 0;
|
|
+
|
|
+#define ADD_STRING(str) \
|
|
+ iov[nr].iov_base = (char *) str; \
|
|
+ iov[nr].iov_len = strlen (str); \
|
|
+ ++nr
|
|
+#define ADD_MEM(str, len) \
|
|
+ iov[nr].iov_base = str; \
|
|
+ iov[nr].iov_len = len; \
|
|
+ ++nr
|
|
+
|
|
+ char regs[31][16];
|
|
+ char pc[16];
|
|
+ for (int i = 0; i < 31; i++)
|
|
+ hexvalue (ctx->uc_mcontext.sc_regs[i], regs[i], 16);
|
|
+ hexvalue (ctx->uc_mcontext.sc_pc, pc, 16);
|
|
+
|
|
+ /* Generate the output. */
|
|
+ ADD_STRING ("Register dump:\n\n V0: ");
|
|
+ ADD_MEM (regs[0], 16);
|
|
+ ADD_STRING (" T0: ");
|
|
+ ADD_MEM (regs[1], 16);
|
|
+ ADD_STRING (" T1: ");
|
|
+ ADD_MEM (regs[2], 16);
|
|
+ ADD_STRING ("\n T2: ");
|
|
+ ADD_MEM (regs[3], 16);
|
|
+ ADD_STRING (" T3: ");
|
|
+ ADD_MEM (regs[4], 16);
|
|
+ ADD_STRING (" T4: ");
|
|
+ ADD_MEM (regs[5], 16);
|
|
+ ADD_STRING ("\n T5: ");
|
|
+ ADD_MEM (regs[6], 16);
|
|
+ ADD_STRING (" T6: ");
|
|
+ ADD_MEM (regs[7], 16);
|
|
+ ADD_STRING (" T7: ");
|
|
+ ADD_MEM (regs[8], 16);
|
|
+ ADD_STRING ("\n S0: ");
|
|
+ ADD_MEM (regs[9], 16);
|
|
+ ADD_STRING (" S1: ");
|
|
+ ADD_MEM (regs[10], 16);
|
|
+ ADD_STRING (" S2: ");
|
|
+ ADD_MEM (regs[11], 16);
|
|
+ ADD_STRING ("\n S3: ");
|
|
+ ADD_MEM (regs[12], 16);
|
|
+ ADD_STRING (" S4: ");
|
|
+ ADD_MEM (regs[13], 16);
|
|
+ ADD_STRING (" S5: ");
|
|
+ ADD_MEM (regs[14], 16);
|
|
+ ADD_STRING ("\n S6: ");
|
|
+ ADD_MEM (regs[15], 16);
|
|
+ ADD_STRING (" A0: ");
|
|
+ ADD_MEM (regs[16], 16);
|
|
+ ADD_STRING (" A1: ");
|
|
+ ADD_MEM (regs[17], 16);
|
|
+ ADD_STRING ("\n A2: ");
|
|
+ ADD_MEM (regs[18], 16);
|
|
+ ADD_STRING (" A3: ");
|
|
+ ADD_MEM (regs[19], 16);
|
|
+ ADD_STRING (" A4: ");
|
|
+ ADD_MEM (regs[20], 16);
|
|
+ ADD_STRING ("\n A5: ");
|
|
+ ADD_MEM (regs[21], 16);
|
|
+ ADD_STRING (" T8: ");
|
|
+ ADD_MEM (regs[22], 16);
|
|
+ ADD_STRING (" T9: ");
|
|
+ ADD_MEM (regs[23], 16);
|
|
+ ADD_STRING ("\n T10: ");
|
|
+ ADD_MEM (regs[24], 16);
|
|
+ ADD_STRING (" T11: ");
|
|
+ ADD_MEM (regs[25], 16);
|
|
+ ADD_STRING (" RA: ");
|
|
+ ADD_MEM (regs[26], 16);
|
|
+ ADD_STRING ("\n T12: ");
|
|
+ ADD_MEM (regs[27], 16);
|
|
+ ADD_STRING (" AT: ");
|
|
+ ADD_MEM (regs[28], 16);
|
|
+ ADD_STRING (" GP: ");
|
|
+ ADD_MEM (regs[29], 16);
|
|
+ ADD_STRING ("\n SP: ");
|
|
+ ADD_MEM (regs[30], 16);
|
|
+ ADD_STRING (" PC: ");
|
|
+ ADD_MEM (pc, 16);
|
|
+
|
|
+ char fpregs[31][16];
|
|
+ char fpcr[16];
|
|
+ for (int i = 0; i < 31; i++)
|
|
+ hexvalue (ctx->uc_mcontext.sc_fpregs[i], fpregs[i], 16);
|
|
+ hexvalue (ctx->uc_mcontext.sc_fpcr, fpcr, 16);
|
|
+
|
|
+ ADD_STRING ("\n\n FP0: ");
|
|
+ ADD_MEM (fpregs[0], 16);
|
|
+ ADD_STRING (" FP1: ");
|
|
+ ADD_MEM (fpregs[1], 16);
|
|
+ ADD_STRING (" FP2: ");
|
|
+ ADD_MEM (fpregs[2], 16);
|
|
+ ADD_STRING ("\n FP3: ");
|
|
+ ADD_MEM (fpregs[3], 16);
|
|
+ ADD_STRING (" FP4: ");
|
|
+ ADD_MEM (fpregs[4], 16);
|
|
+ ADD_STRING (" FP5: ");
|
|
+ ADD_MEM (fpregs[5], 16);
|
|
+ ADD_STRING ("\n FP6: ");
|
|
+ ADD_MEM (fpregs[6], 16);
|
|
+ ADD_STRING (" FP7: ");
|
|
+ ADD_MEM (fpregs[7], 16);
|
|
+ ADD_STRING (" FP8: ");
|
|
+ ADD_MEM (fpregs[8], 16);
|
|
+ ADD_STRING ("\n FP9: ");
|
|
+ ADD_MEM (fpregs[9], 16);
|
|
+ ADD_STRING (" FP10: ");
|
|
+ ADD_MEM (fpregs[10], 16);
|
|
+ ADD_STRING (" FP11: ");
|
|
+ ADD_MEM (fpregs[11], 16);
|
|
+ ADD_STRING ("\n FP12: ");
|
|
+ ADD_MEM (fpregs[12], 16);
|
|
+ ADD_STRING (" FP13: ");
|
|
+ ADD_MEM (fpregs[13], 16);
|
|
+ ADD_STRING (" FP14: ");
|
|
+ ADD_MEM (fpregs[14], 16);
|
|
+ ADD_STRING ("\n FP15: ");
|
|
+ ADD_MEM (fpregs[15], 16);
|
|
+ ADD_STRING (" FP16: ");
|
|
+ ADD_MEM (fpregs[16], 16);
|
|
+ ADD_STRING (" FP17: ");
|
|
+ ADD_MEM (fpregs[17], 16);
|
|
+ ADD_STRING ("\n FP18: ");
|
|
+ ADD_MEM (fpregs[18], 16);
|
|
+ ADD_STRING (" FP19: ");
|
|
+ ADD_MEM (fpregs[19], 16);
|
|
+ ADD_STRING (" FP20: ");
|
|
+ ADD_MEM (fpregs[20], 16);
|
|
+ ADD_STRING ("\n FP21: ");
|
|
+ ADD_MEM (fpregs[21], 16);
|
|
+ ADD_STRING (" FP22: ");
|
|
+ ADD_MEM (fpregs[22], 16);
|
|
+ ADD_STRING (" FP23: ");
|
|
+ ADD_MEM (fpregs[23], 16);
|
|
+ ADD_STRING ("\n FP24: ");
|
|
+ ADD_MEM (fpregs[24], 16);
|
|
+ ADD_STRING (" FP25: ");
|
|
+ ADD_MEM (fpregs[25], 16);
|
|
+ ADD_STRING (" FP26: ");
|
|
+ ADD_MEM (fpregs[26], 16);
|
|
+ ADD_STRING ("\n FP27: ");
|
|
+ ADD_MEM (fpregs[27], 16);
|
|
+ ADD_STRING (" FP28: ");
|
|
+ ADD_MEM (fpregs[28], 16);
|
|
+ ADD_STRING (" FP29: ");
|
|
+ ADD_MEM (fpregs[29], 16);
|
|
+ ADD_STRING ("\n FP30: ");
|
|
+ ADD_MEM (fpregs[30], 16);
|
|
+ ADD_STRING (" FPCR: ");
|
|
+ ADD_MEM (fpcr, 16);
|
|
+
|
|
+ char traparg[3][16];
|
|
+ hexvalue (ctx->uc_mcontext.sc_traparg_a0, traparg[0], 16);
|
|
+ hexvalue (ctx->uc_mcontext.sc_traparg_a1, traparg[1], 16);
|
|
+ hexvalue (ctx->uc_mcontext.sc_traparg_a2, traparg[2], 16);
|
|
+ ADD_STRING ("\n\n TA0: ");
|
|
+ ADD_MEM (traparg[0], 16);
|
|
+ ADD_STRING (" TA1: ");
|
|
+ ADD_MEM (traparg[1], 16);
|
|
+ ADD_STRING (" TA2: ");
|
|
+ ADD_MEM (traparg[2], 16);
|
|
+
|
|
+ ADD_STRING ("\n");
|
|
+
|
|
+ /* Write the stuff out. */
|
|
+ writev (fd, iov, nr);
|
|
+}
|
|
+
|
|
+#define REGISTER_DUMP register_dump (fd, ctx)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/rt_sigaction.S b/sysdeps/unix/sysv/linux/sw_64/rt_sigaction.S
|
|
new file mode 100644
|
|
index 00000000..57a3b66e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/rt_sigaction.S
|
|
@@ -0,0 +1,87 @@
|
|
+/* Copyright (C) 1998-2023 Free Software Foundation, Inc.
|
|
+ This file is part of the GNU C Library.
|
|
+ Contributed by Richard Henderson <rth@cygnus.com>, 1998
|
|
+
|
|
+ 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 <sysdep.h>
|
|
+
|
|
+/* To enable unwinding through the signal frame without special hackery
|
|
+ elsewhere, describe the entire struct sigcontext with unwind info.
|
|
+
|
|
+ In order to minimize the size of the encoding, we set the CFA to the
|
|
+ end of the sigcontext, which makes all of the registers have small
|
|
+ negative offsets from that. */
|
|
+
|
|
+ .macro SIGCONTEXT_REGS_I base, from=0
|
|
+ cfi_offset (\from, \base + (4 + \from) * 8)
|
|
+ .if 30-\from
|
|
+ SIGCONTEXT_REGS_I \base, "(\from+1)"
|
|
+ .endif
|
|
+ .endm
|
|
+
|
|
+ .macro SIGCONTEXT_REGS_F base, from=32
|
|
+ cfi_offset (\from, \base + (4 + 1 + \from) * 8)
|
|
+ .if 62-\from
|
|
+ SIGCONTEXT_REGS_F \base, "(\from+1)"
|
|
+ .endif
|
|
+ .endm
|
|
+
|
|
+ .macro SIGCONTEXT_REGS base
|
|
+ SIGCONTEXT_REGS_I \base
|
|
+ SIGCONTEXT_REGS_F \base
|
|
+ cfi_offset (63, \base + (4 + 32 + 1 + 32) * 8)
|
|
+ cfi_offset (64, \base + 2 * 8)
|
|
+ .endm
|
|
+
|
|
+ cfi_startproc
|
|
+ cfi_return_column (64)
|
|
+ .cfi_signal_frame
|
|
+ SIGCONTEXT_REGS -648
|
|
+ cfi_def_cfa_offset (648)
|
|
+
|
|
+ /* While this frame is marked as a signal frame, that only applies
|
|
+ to how this return address is handled for the outer frame.
|
|
+ The return address that arrived here, from the inner frame, is
|
|
+ not marked as a signal frame and so the unwinder still tries to
|
|
+ fsubdract 1 to examine the presumed call insn. Thus we must
|
|
+ extend the unwind info to a nop before the start. */
|
|
+ nop
|
|
+ .align 4
|
|
+
|
|
+__syscall_sigreturn:
|
|
+ mov sp, a0
|
|
+ ldi v0, __NR_sigreturn
|
|
+ sys_call 0x83
|
|
+ .size __syscall_sigreturn, .-__syscall_sigreturn
|
|
+ .type __syscall_sigreturn, @function
|
|
+ .global __syscall_sigreturn;
|
|
+ .hidden __syscall_sigreturn;
|
|
+
|
|
+ /* See above wrt including the nop. */
|
|
+ cfi_def_cfa_offset (176 + 648)
|
|
+ nop
|
|
+ .align 4
|
|
+
|
|
+__syscall_rt_sigreturn:
|
|
+ mov sp,a0
|
|
+ ldi v0,__NR_rt_sigreturn
|
|
+ sys_call 0x83
|
|
+ .size __syscall_rt_sigreturn, .-__syscall_rt_sigreturn
|
|
+ .type __syscall_rt_sigreturn, @function
|
|
+ .global __syscall_rt_sigreturn;
|
|
+ .hidden __syscall_rt_sigreturn;
|
|
+
|
|
+ cfi_endproc
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/select.c b/sysdeps/unix/sysv/linux/sw_64/select.c
|
|
new file mode 100644
|
|
index 00000000..ae14d831
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/select.c
|
|
@@ -0,0 +1,52 @@
|
|
+/* Linux/sw_64 select implementation.
|
|
+ Copyright (C) 2017-2023 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 <sys/time.h>
|
|
+#include <sys/types.h>
|
|
+#include <sys/select.h>
|
|
+#include <errno.h>
|
|
+#include <sysdep-cancel.h>
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+int
|
|
+__new_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|
+ struct timeval *timeout)
|
|
+{
|
|
+ return SYSCALL_CANCEL (select, nfds, readfds, writefds, exceptfds, timeout);
|
|
+}
|
|
+
|
|
+strong_alias (__new_select, __select) libc_hidden_def (__select)
|
|
+default_symbol_version (__new_select, select, GLIBC_2.1);
|
|
+strong_alias (__new_select, __new_select_private);
|
|
+symbol_version (__new_select_private, __select, GLIBC_2.1);
|
|
+
|
|
+// TODO: select32 already deleted in linux 4.19
|
|
+/* Old timeval32 compat calls. */
|
|
+/* #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
|
+int
|
|
+__select_tv32 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
|
|
+ struct timeval *timeout)
|
|
+{
|
|
+ return SYSCALL_CANCEL (osf_select, nfds, readfds, writefds, exceptfds,
|
|
+ timeout);
|
|
+}
|
|
+strong_alias (__select_tv32, __select_tv32_1)
|
|
+
|
|
+compat_symbol (libc, __select_tv32, __select, GLIBC_2_0);
|
|
+compat_symbol (libc, __select_tv32_1, select, GLIBC_2_0);
|
|
+#endif */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/setcontext.S b/sysdeps/unix/sysv/linux/sw_64/setcontext.S
|
|
new file mode 100644
|
|
index 00000000..69819b24
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/setcontext.S
|
|
@@ -0,0 +1,34 @@
|
|
+/* Install given context.
|
|
+ Copyright (C) 2004-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <ucontext-offsets.h>
|
|
+
|
|
+
|
|
+/* In case the user fiddled it, copy the "official" signal mask
|
|
+ from the ucontext_t into the sigcontext structure. */
|
|
+#undef PSEUDO_PREPARE_ARGS
|
|
+#define PSEUDO_PREPARE_ARGS \
|
|
+ ldl $0, UC_SIGMASK($16); \
|
|
+ stl $0, UC_SIGCTX+SC_MASK($16); \
|
|
+ ldi $16, UC_SIGCTX($16);
|
|
+
|
|
+PSEUDO(__setcontext, sigreturn, 1)
|
|
+ ret
|
|
+PSEUDO_END(__setcontext)
|
|
+weak_alias (__setcontext, setcontext)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/setfpucw.c b/sysdeps/unix/sysv/linux/sw_64/setfpucw.c
|
|
new file mode 100644
|
|
index 00000000..34cbfbee
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/setfpucw.c
|
|
@@ -0,0 +1,56 @@
|
|
+/* Set FP exception mask and rounding mode.
|
|
+ Copyright (C) 1996-2023 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 <fpu_control.h>
|
|
+#include <fenv_libc.h>
|
|
+
|
|
+#define convert_bit(M, F, T) \
|
|
+ ((T) < (F) ? ((M) / ((F) / (T))) & (T) : ((M) & (F)) * ((T) / (F)))
|
|
+
|
|
+void
|
|
+__setfpucw (fpu_control_t fpu_control)
|
|
+{
|
|
+ unsigned long fpcr, swcr, fc = (int) fpu_control;
|
|
+
|
|
+ /* ??? If this was a real external interface we'd want to read the current
|
|
+ exception state with __ieee_get_fp_control. But this is an internal
|
|
+ function only called at process startup, so there's no point in trying
|
|
+ to preserve exceptions that cannot have been raised yet. Indeed, this
|
|
+ entire function is likely to be one big nop unless the user overrides
|
|
+ the default __fpu_control variable. */
|
|
+
|
|
+ /* Convert the rounding mode from fpu_control.h format. */
|
|
+ const unsigned long conv_rnd = ((FE_TOWARDZERO << (_FPU_RC_ZERO >> 8))
|
|
+ | (FE_DOWNWARD << (_FPU_RC_DOWN >> 8))
|
|
+ | (FE_TONEAREST << (_FPU_RC_NEAREST >> 8))
|
|
+ | (FE_UPWARD << (_FPU_RC_UP >> 8)));
|
|
+
|
|
+ fpcr = ((conv_rnd >> ((fc >> 8) & 3)) & 3) << FPCR_ROUND_SHIFT;
|
|
+
|
|
+ /* Convert the exception mask from fpu_control.h format. */
|
|
+ swcr = convert_bit (~fc, _FPU_MASK_IM, FE_INVALID >> SWCR_ENABLE_SHIFT);
|
|
+ swcr |= convert_bit (~fc, _FPU_MASK_DM, FE_UNDERFLOW >> SWCR_ENABLE_SHIFT);
|
|
+ swcr |= convert_bit (~fc, _FPU_MASK_ZM, FE_DIVBYZERO >> SWCR_ENABLE_SHIFT);
|
|
+ swcr |= convert_bit (~fc, _FPU_MASK_OM, FE_OVERFLOW >> SWCR_ENABLE_SHIFT);
|
|
+ swcr |= convert_bit (~fc, _FPU_MASK_PM, FE_INEXACT >> SWCR_ENABLE_SHIFT);
|
|
+
|
|
+ /* Install everything. */
|
|
+ __fpu_control = fc;
|
|
+ asm volatile ("wfpcr %0" : : "f"(fpcr));
|
|
+ __ieee_set_fp_control (swcr);
|
|
+}
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/setrlimit64.c b/sysdeps/unix/sysv/linux/sw_64/setrlimit64.c
|
|
new file mode 100644
|
|
index 00000000..0911305a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/setrlimit64.c
|
|
@@ -0,0 +1,52 @@
|
|
+/* Copyright (C) 2018-2023 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/>. */
|
|
+
|
|
+#define USE_VERSIONED_RLIMIT
|
|
+#include <sysdeps/unix/sysv/linux/setrlimit64.c>
|
|
+versioned_symbol (libc, __setrlimit, setrlimit, GLIBC_2_27);
|
|
+versioned_symbol (libc, __setrlimit64, setrlimit64, GLIBC_2_27);
|
|
+
|
|
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_27)
|
|
+/* RLIM64_INFINITY was supposed to be a glibc convention rather than
|
|
+ anything seen by the kernel, but it ended being passed to the kernel
|
|
+ through the prlimit64 syscall. Given that a lot of binaries with
|
|
+ the wrong constant value are in the wild, provide a wrapper function
|
|
+ fixing the value before the syscall. */
|
|
+# define OLD_RLIM64_INFINITY 0x7fffffffffffffffULL
|
|
+
|
|
+int attribute_compat_text_section
|
|
+__old_setrlimit64 (enum __rlimit_resource resource,
|
|
+ const struct rlimit64 *rlimits)
|
|
+{
|
|
+ struct rlimit64 krlimits;
|
|
+
|
|
+ if (rlimits->rlim_cur == OLD_RLIM64_INFINITY)
|
|
+ krlimits.rlim_cur = RLIM64_INFINITY;
|
|
+ else
|
|
+ krlimits.rlim_cur = rlimits->rlim_cur;
|
|
+ if (rlimits->rlim_max == OLD_RLIM64_INFINITY)
|
|
+ krlimits.rlim_max = RLIM64_INFINITY;
|
|
+ else
|
|
+ krlimits.rlim_max = rlimits->rlim_max;
|
|
+
|
|
+ return __setrlimit64 (resource, &krlimits);
|
|
+}
|
|
+
|
|
+strong_alias (__old_setrlimit64, __old_setrlimit)
|
|
+ compat_symbol (libc, __old_setrlimit, setrlimit, GLIBC_2_0);
|
|
+compat_symbol (libc, __old_setrlimit64, setrlimit64, GLIBC_2_1);
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/settimeofday.c b/sysdeps/unix/sysv/linux/sw_64/settimeofday.c
|
|
new file mode 100644
|
|
index 00000000..dec19839
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/settimeofday.c
|
|
@@ -0,0 +1,22 @@
|
|
+/* settimeofday -- Set the current time of day. Linux/SW_64/tv64 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+/* We can use the generic implementation, but we have to override its
|
|
+ default symbol version. */
|
|
+#define VERSION_settimeofday GLIBC_2.1
|
|
+#include <time/settimeofday.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/shlib-versions b/sysdeps/unix/sysv/linux/sw_64/shlib-versions
|
|
new file mode 100644
|
|
index 00000000..58b0bd8e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/shlib-versions
|
|
@@ -0,0 +1,20 @@
|
|
+%ifdef HAVE_SW64_NEW_LIBCVERSION
|
|
+libm=6
|
|
+libc=6
|
|
+libBrokenLocale=1
|
|
+libdl=2
|
|
+libnsl=1
|
|
+libresolv=2
|
|
+libutil=1
|
|
+%else
|
|
+libm=6.1
|
|
+libc=6.1
|
|
+libBrokenLocale=1.1
|
|
+libdl=2.1
|
|
+libnsl=1.1
|
|
+libresolv=2.1
|
|
+libutil=1.1
|
|
+%endif
|
|
+
|
|
+ld=ld-linux.so.2
|
|
+libcrypt=1.1
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sigcontextinfo.h b/sysdeps/unix/sysv/linux/sw_64/sigcontextinfo.h
|
|
new file mode 100644
|
|
index 00000000..ba7ccfea
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sigcontextinfo.h
|
|
@@ -0,0 +1,30 @@
|
|
+/* Copyright (C) 1999-2023 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/>. */
|
|
+
|
|
+#ifndef _SIGCONTEXTINFO_H
|
|
+#define _SIGCONTEXTINFO_H
|
|
+
|
|
+#include <stdint.h>
|
|
+#include <sys/ucontext.h>
|
|
+
|
|
+static inline uintptr_t
|
|
+sigcontext_get_pc (const ucontext_t *ctx)
|
|
+{
|
|
+ return ctx->uc_mcontext.sc_pc;
|
|
+}
|
|
+
|
|
+#endif
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sizes.h b/sysdeps/unix/sysv/linux/sw_64/sizes.h
|
|
new file mode 100644
|
|
index 00000000..4243a1c9
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sizes.h
|
|
@@ -0,0 +1,23 @@
|
|
+/* Copyright (C) 1998-2023 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/>. */
|
|
+
|
|
+#ifndef _SIZES_H
|
|
+#define _SIZES_H 1
|
|
+
|
|
+#define PTR_SIZE_STR "8"
|
|
+
|
|
+#endif /* sizes.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/statfs.c b/sysdeps/unix/sysv/linux/sw_64/statfs.c
|
|
new file mode 100644
|
|
index 00000000..ab05750e
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/statfs.c
|
|
@@ -0,0 +1,29 @@
|
|
+/* Return information about the filesystem on which FILE resides. Linux/sw_64.
|
|
+ Copyright (C) 1996-2023 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 <sys/statfs.h>
|
|
+#include <sysdep.h>
|
|
+#include <kernel_stat.h>
|
|
+
|
|
+/* Return information about the filesystem on which FILE resides. */
|
|
+int
|
|
+__statfs (const char *file, struct statfs *buf)
|
|
+{
|
|
+ return INLINE_SYSCALL_CALL (statfs, file, buf);
|
|
+}
|
|
+libc_hidden_def (__statfs) weak_alias (__statfs, statfs)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sw_64/ptrace.h b/sysdeps/unix/sysv/linux/sw_64/sw_64/ptrace.h
|
|
new file mode 100644
|
|
index 00000000..8309293d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sw_64/ptrace.h
|
|
@@ -0,0 +1,18 @@
|
|
+#ifndef __sw_64_ptrace_h__
|
|
+#define __sw_64_ptrace_h__
|
|
+
|
|
+/*
|
|
+ * Mostly for OSF/1 compatibility.
|
|
+ */
|
|
+
|
|
+#define REG_BASE 0
|
|
+#define NGP_REGS 32
|
|
+#define NFP_REGS 32
|
|
+
|
|
+#define GPR_BASE REG_BASE
|
|
+#define FPR_BASE (GPR_BASE + NGP_REGS)
|
|
+#define PC (FPR_BASE + NFP_REGS)
|
|
+#define SPR_PS (PC + 1)
|
|
+#define NPTRC_REGS (SPR_PS + 1)
|
|
+
|
|
+#endif /* __sw_64_ptrace_h__ */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sw_64/regdef.h b/sysdeps/unix/sysv/linux/sw_64/sw_64/regdef.h
|
|
new file mode 100644
|
|
index 00000000..04ab6481
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sw_64/regdef.h
|
|
@@ -0,0 +1,44 @@
|
|
+#ifndef __sw_64_regdef_h__
|
|
+#define __sw_64_regdef_h__
|
|
+
|
|
+#define v0 $0 /* function return value */
|
|
+
|
|
+#define t0 $1 /* temporary registers (caller-saved) */
|
|
+#define t1 $2
|
|
+#define t2 $3
|
|
+#define t3 $4
|
|
+#define t4 $5
|
|
+#define t5 $6
|
|
+#define t6 $7
|
|
+#define t7 $8
|
|
+
|
|
+#define s0 $9 /* saved-registers (callee-saved registers) */
|
|
+#define s1 $10
|
|
+#define s2 $11
|
|
+#define s3 $12
|
|
+#define s4 $13
|
|
+#define s5 $14
|
|
+#define s6 $15
|
|
+#define fp s6 /* frame-pointer (s6 in frame-less procedures) */
|
|
+
|
|
+#define a0 $16 /* argument registers (caller-saved) */
|
|
+#define a1 $17
|
|
+#define a2 $18
|
|
+#define a3 $19
|
|
+#define a4 $20
|
|
+#define a5 $21
|
|
+
|
|
+#define t8 $22 /* more temps (caller-saved) */
|
|
+#define t9 $23
|
|
+#define t10 $24
|
|
+#define t11 $25
|
|
+#define ra $26 /* return address register */
|
|
+#define t12 $27
|
|
+
|
|
+#define pv t12 /* procedure-variable register */
|
|
+#define AT $at /* assembler temporary */
|
|
+#define gp $29 /* global pointer */
|
|
+#define sp $30 /* stack pointer */
|
|
+#define zero $31 /* reads as zero, writes are noops */
|
|
+
|
|
+#endif /* __sw_64_regdef_h__ */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/swapcontext.S b/sysdeps/unix/sysv/linux/sw_64/swapcontext.S
|
|
new file mode 100644
|
|
index 00000000..e3e2f445
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/swapcontext.S
|
|
@@ -0,0 +1,50 @@
|
|
+/* Save current context and install the given one.
|
|
+ Copyright (C) 2004-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <sysdep.h>
|
|
+#include <ucontext-offsets.h>
|
|
+
|
|
+ENTRY(__swapcontext)
|
|
+
|
|
+#ifdef PROF
|
|
+ ldgp $29, 0($27)
|
|
+ .set noat
|
|
+ ldi AT, _mcount
|
|
+ call AT, (AT), _mcount
|
|
+ .set at
|
|
+ .prologue 1
|
|
+#elif defined PIC
|
|
+ .prologue 0
|
|
+#else
|
|
+ ldgp $29, 0($27)
|
|
+ .prologue 1
|
|
+#endif
|
|
+
|
|
+#ifdef PIC
|
|
+ unop
|
|
+ bsr $0, __getcontext_x !samegp
|
|
+ mov $17, $16
|
|
+ br $31, __setcontext !samegp
|
|
+#else
|
|
+ call $0, __getcontext_x
|
|
+ mov $17, $16
|
|
+ jmp $31, __setcontext
|
|
+#endif
|
|
+
|
|
+END(__swapcontext)
|
|
+weak_alias (__swapcontext, swapcontext)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sys/acct.h b/sysdeps/unix/sysv/linux/sw_64/sys/acct.h
|
|
new file mode 100644
|
|
index 00000000..9209eff1
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sys/acct.h
|
|
@@ -0,0 +1,62 @@
|
|
+/* Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_ACCT_H
|
|
+
|
|
+#define _SYS_ACCT_H 1
|
|
+#include <features.h>
|
|
+
|
|
+#include <bits/types/time_t.h>
|
|
+
|
|
+__BEGIN_DECLS
|
|
+
|
|
+#define ACCT_COMM 16
|
|
+
|
|
+struct acct
|
|
+{
|
|
+ char ac_comm[ACCT_COMM]; /* Accounting command name. */
|
|
+ time_t ac_utime; /* Accounting user time. */
|
|
+ time_t ac_stime; /* Accounting system time. */
|
|
+ time_t ac_etime; /* Accounting elapsed time. */
|
|
+ time_t ac_btime; /* Beginning time. */
|
|
+ unsigned int ac_uid; /* Accounting user ID. */
|
|
+ unsigned int ac_gid; /* Accounting group ID. */
|
|
+ unsigned int ac_tty; /* Controlling tty. */
|
|
+ /* Please note that the value of the `ac_tty' field, a device number,
|
|
+ is encoded differently in the kernel and for the libc dev_t type. */
|
|
+ char ac_flag; /* Accounting flag. */
|
|
+ long int ac_minflt; /* Accounting minor pagefaults. */
|
|
+ long int ac_majflt; /* Accounting major pagefaults. */
|
|
+ long int ac_exitcode; /* Accounting process exitcode. */
|
|
+};
|
|
+
|
|
+enum
|
|
+{
|
|
+ AFORK = 0001, /* Has executed fork, but no exec. */
|
|
+ ASU = 0002, /* Used super-user privileges. */
|
|
+ ACORE = 0004, /* Dumped core. */
|
|
+ AXSIG = 0010 /* Killed by a signal. */
|
|
+};
|
|
+
|
|
+#define AHZ 100
|
|
+
|
|
+/* Switch process accounting on and off. */
|
|
+extern int acct (const char *__filename) __THROW;
|
|
+
|
|
+__END_DECLS
|
|
+
|
|
+#endif /* sys/acct.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sys/io.h b/sysdeps/unix/sysv/linux/sw_64/sys/io.h
|
|
new file mode 100644
|
|
index 00000000..67d5c8ab
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sys/io.h
|
|
@@ -0,0 +1,90 @@
|
|
+/* Copyright (C) 1996-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_IO_H
|
|
+
|
|
+#define _SYS_IO_H 1
|
|
+#include <features.h>
|
|
+
|
|
+__BEGIN_DECLS
|
|
+
|
|
+/* If TURN_ON is TRUE, request for permission to do direct i/o on the
|
|
+ port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
|
|
+ permission off for that range. This call requires root privileges.
|
|
+
|
|
+ Portability note: not all Linux platforms support this call. Most
|
|
+ platforms based on the PC I/O architecture probably will, however.
|
|
+ E.g., Linux/Sw_64 for Sw_64 PCs supports this. */
|
|
+extern int ioperm (unsigned long int __from, unsigned long int __num,
|
|
+ int __turn_on) __THROW;
|
|
+
|
|
+/* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to
|
|
+ access any I/O port is granted. This call requires root
|
|
+ privileges. */
|
|
+extern int iopl (int __level) __THROW;
|
|
+
|
|
+/* Return the physical address of the DENSE I/O memory or NULL if none
|
|
+ is available (e.g. on a jensen). */
|
|
+extern unsigned long int _bus_base (void) __THROW __attribute__ ((const));
|
|
+extern unsigned long int bus_base (void) __THROW __attribute__ ((const));
|
|
+
|
|
+/* Return the physical address of the SPARSE I/O memory. */
|
|
+extern unsigned long _bus_base_sparse (void) __THROW __attribute__ ((const));
|
|
+extern unsigned long bus_base_sparse (void) __THROW __attribute__ ((const));
|
|
+
|
|
+/* Return the HAE shift used by the SPARSE I/O memory. */
|
|
+extern int _hae_shift (void) __THROW __attribute__ ((const));
|
|
+extern int hae_shift (void) __THROW __attribute__ ((const));
|
|
+
|
|
+/* Previous three are deprecated in favour of the following, which
|
|
+ knows about multiple PCI "hoses". Provide the PCI bus and dfn
|
|
+ numbers just as to pciconfig_read/write. */
|
|
+
|
|
+enum __pciconfig_iobase_which
|
|
+{
|
|
+ IOBASE_HOSE = 0, /* Return hose index. */
|
|
+ IOBASE_SPARSE_MEM = 1, /* Return physical memory addresses. */
|
|
+ IOBASE_DENSE_MEM = 2,
|
|
+ IOBASE_SPARSE_IO = 3,
|
|
+ IOBASE_DENSE_IO = 4
|
|
+};
|
|
+
|
|
+extern long pciconfig_iobase (enum __pciconfig_iobase_which __which,
|
|
+ unsigned long int __bus,
|
|
+ unsigned long int __dfn) __THROW
|
|
+ __attribute__ ((const));
|
|
+
|
|
+/* Access PCI space protected from machine checks. */
|
|
+extern int pciconfig_read (unsigned long int __bus, unsigned long int __dfn,
|
|
+ unsigned long int __off, unsigned long int __len,
|
|
+ unsigned char *__buf) __THROW;
|
|
+
|
|
+extern int pciconfig_write (unsigned long int __bus, unsigned long int __dfn,
|
|
+ unsigned long int __off, unsigned long int __len,
|
|
+ unsigned char *__buf) __THROW;
|
|
+
|
|
+/* Userspace declarations. */
|
|
+extern unsigned int inb (unsigned long __port) __THROW;
|
|
+extern unsigned int inw (unsigned long __port) __THROW;
|
|
+extern unsigned int inl (unsigned long __port) __THROW;
|
|
+extern void outb (unsigned char __b, unsigned long __port) __THROW;
|
|
+extern void outw (unsigned short __w, unsigned long __port) __THROW;
|
|
+extern void outl (unsigned int __l, unsigned long __port) __THROW;
|
|
+
|
|
+__END_DECLS
|
|
+
|
|
+#endif /* _SYS_IO_H */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sys/ucontext.h b/sysdeps/unix/sysv/linux/sw_64/sys/ucontext.h
|
|
new file mode 100644
|
|
index 00000000..a47ce691
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sys/ucontext.h
|
|
@@ -0,0 +1,92 @@
|
|
+/* Copyright (C) 1998-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_UCONTEXT_H
|
|
+#define _SYS_UCONTEXT_H 1
|
|
+
|
|
+#include <features.h>
|
|
+
|
|
+#include <bits/types/sigset_t.h>
|
|
+#include <bits/types/stack_t.h>
|
|
+
|
|
+#ifdef __USE_MISC
|
|
+# define __ctx(fld) fld
|
|
+#else
|
|
+# define __ctx(fld) __##fld
|
|
+#endif
|
|
+
|
|
+/* Type for general register. */
|
|
+typedef long int greg_t;
|
|
+
|
|
+/* Number of general registers. */
|
|
+#define __NGREG 33
|
|
+#ifdef __USE_MISC
|
|
+# define NGREG __NGREG
|
|
+#endif
|
|
+
|
|
+/* Container for all general registers. */
|
|
+typedef greg_t gregset_t[__NGREG];
|
|
+
|
|
+/* Type for floating-point register. */
|
|
+typedef long int fpreg_t;
|
|
+
|
|
+/* Number of general registers. */
|
|
+#define __NFPREG 32
|
|
+#ifdef __USE_MISC
|
|
+# define NFPREG __NFPREG
|
|
+#endif
|
|
+
|
|
+/* Container for all general registers. */
|
|
+typedef fpreg_t fpregset_t[__NFPREG];
|
|
+
|
|
+/* A machine context is exactly a sigcontext. */
|
|
+typedef struct
|
|
+{
|
|
+ long int __ctx (sc_onstack);
|
|
+ long int __ctx (sc_mask);
|
|
+ long int __ctx (sc_pc);
|
|
+ long int __ctx (sc_ps);
|
|
+ long int __ctx (sc_regs)[32];
|
|
+ long int __ctx (sc_ownedfp);
|
|
+ long int __ctx (sc_fpregs)[128];
|
|
+ unsigned long int __ctx (sc_fpcr);
|
|
+ unsigned long int __ctx (sc_fp_control);
|
|
+ unsigned long int __glibc_reserved1, __glibc_reserved2;
|
|
+ unsigned long int __ctx (sc_ssize);
|
|
+ char *__ctx (sc_sbase);
|
|
+ unsigned long int __ctx (sc_traparg_a0);
|
|
+ unsigned long int __ctx (sc_traparg_a1);
|
|
+ unsigned long int __ctx (sc_traparg_a2);
|
|
+ unsigned long int __ctx (sc_fp_trap_pc);
|
|
+ unsigned long int __ctx (sc_fp_trigger_sum);
|
|
+ unsigned long int __ctx (sc_fp_trigger_inst);
|
|
+} mcontext_t;
|
|
+
|
|
+/* Userlevel context. */
|
|
+typedef struct ucontext_t
|
|
+{
|
|
+ unsigned long int __ctx (uc_flags);
|
|
+ struct ucontext_t *uc_link;
|
|
+ unsigned long __uc_osf_sigmask;
|
|
+ stack_t uc_stack;
|
|
+ mcontext_t uc_mcontext;
|
|
+ sigset_t uc_sigmask;
|
|
+} ucontext_t;
|
|
+
|
|
+#undef __ctx
|
|
+
|
|
+#endif /* sys/ucontext.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sys/user.h b/sysdeps/unix/sysv/linux/sw_64/sys/user.h
|
|
new file mode 100644
|
|
index 00000000..3462615d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sys/user.h
|
|
@@ -0,0 +1,52 @@
|
|
+/* Copyright (C) 1999-2023 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/>. */
|
|
+
|
|
+#ifndef _SYS_USER_H
|
|
+#define _SYS_USER_H 1
|
|
+
|
|
+/* The whole purpose of this file is for gdb/strace and gdb/strace
|
|
+ only. Don't read too much into it. Don't use it for anything other
|
|
+ than gdb/strace unless you know what you are doing. */
|
|
+
|
|
+#include <asm/reg.h>
|
|
+#include <stddef.h>
|
|
+
|
|
+struct user
|
|
+{
|
|
+ unsigned long int regs[EF_SIZE / 8 + 32]; /* integer and fp regs */
|
|
+ size_t u_tsize; /* text size (pages) */
|
|
+ size_t u_dsize; /* data size (pages) */
|
|
+ size_t u_ssize; /* stack size (pages) */
|
|
+ unsigned long int start_code; /* text starting address */
|
|
+ unsigned long int start_data; /* data starting address */
|
|
+ unsigned long int start_stack; /* stack starting address */
|
|
+ long int signal; /* signal causing core dump */
|
|
+ struct regs *u_ar0; /* help gdb find registers */
|
|
+ unsigned long int magic; /* identifies a core file */
|
|
+ char u_comm[32]; /* user command name */
|
|
+};
|
|
+
|
|
+#define PAGE_SHIFT 13
|
|
+#define PAGE_SIZE (1UL << PAGE_SHIFT)
|
|
+#define PAGE_MASK (~(PAGE_SIZE - 1))
|
|
+#define NBPG PAGE_SIZE
|
|
+#define UPAGES 1
|
|
+#define HOST_TEXT_START_ADDR (u.start_code)
|
|
+#define HOST_DATA_START_ADDR (u.start_data)
|
|
+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
|
|
+
|
|
+#endif /* sys/user.h */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/syscalls.list b/sysdeps/unix/sysv/linux/sw_64/syscalls.list
|
|
new file mode 100644
|
|
index 00000000..cbfd1258
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/syscalls.list
|
|
@@ -0,0 +1,27 @@
|
|
+# File name Caller Syscall name Args Strong name Weak names
|
|
+
|
|
+sigstack - sigstack 2 sigstack
|
|
+
|
|
+getpriority - getpriority i:ii __getpriority getpriority
|
|
+
|
|
+# proper socket implementations:
|
|
+bind - bind i:ipi __bind bind
|
|
+getpeername - getpeername i:ipp __getpeername getpeername
|
|
+getsockname - getsockname i:ipp __getsockname getsockname
|
|
+listen - listen i:ii __listen listen
|
|
+shutdown - shutdown i:ii __shutdown shutdown
|
|
+socket - socket i:iii __socket socket
|
|
+socketpair - socketpair i:iiif __socketpair socketpair
|
|
+
|
|
+ptrace - ptrace 4 __ptrace ptrace
|
|
+
|
|
+# access pci space protected from machine checks:
|
|
+pciconfig_read EXTRA pciconfig_read 5 pciconfig_read
|
|
+pciconfig_write EXTRA pciconfig_write 5 pciconfig_write
|
|
+pciconfig_iobase EXTRA pciconfig_iobase 3 __pciconfig_iobase pciconfig_iobase
|
|
+
|
|
+# timeval64 entry points (see osf_*.c for GLIBC_2.0 timeval32 equivalents)
|
|
+getitimer - getitimer i:ip __getitimer getitimer@@GLIBC_2.1
|
|
+setitimer - setitimer i:ipP __setitimer setitimer@@GLIBC_2.1
|
|
+utimes - utimes i:sp __utimes utimes@@GLIBC_2.1
|
|
+getrusage - getrusage i:ip __getrusage getrusage@@GLIBC_2.1
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/sysconf.c b/sysdeps/unix/sysv/linux/sw_64/sysconf.c
|
|
new file mode 100644
|
|
index 00000000..fd74f16a
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/sysconf.c
|
|
@@ -0,0 +1,126 @@
|
|
+/* Copyright (C) 2004-2023 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 <assert.h>
|
|
+#include <stdbool.h>
|
|
+#include <stdlib.h>
|
|
+#include <unistd.h>
|
|
+
|
|
+static long int linux_sysconf (int name);
|
|
+
|
|
+#define CSHAPE(totalsize, linesize, assoc) \
|
|
+ ((totalsize & ~0xff) | (linesize << 4) | assoc)
|
|
+
|
|
+extern long __libc_sw_64_cache_shape[4];
|
|
+
|
|
+/* Get the value of the system variable NAME. */
|
|
+long int
|
|
+__sysconf (int name)
|
|
+{
|
|
+ long shape, index;
|
|
+
|
|
+ /* We only handle the cache information here (for now). */
|
|
+ if (name < _SC_LEVEL1_ICACHE_SIZE || name > _SC_LEVEL4_CACHE_LINESIZE)
|
|
+ return linux_sysconf (name);
|
|
+
|
|
+ /* No SW_64 has L4 caches. */
|
|
+ if (name >= _SC_LEVEL4_CACHE_SIZE)
|
|
+ return -1;
|
|
+
|
|
+ index = (name - _SC_LEVEL1_ICACHE_SIZE) / 3;
|
|
+ shape = __libc_sw_64_cache_shape[index];
|
|
+ if (shape == -2)
|
|
+ {
|
|
+ long shape_l1i, shape_l1d, shape_l2, shape_l3 = -1;
|
|
+
|
|
+ /* ??? In the cases below for which we do not know L1 cache sizes,
|
|
+ we could do timings to measure sizes. But for the Bcache, it's
|
|
+ generally big enough that (without additional help) TLB effects
|
|
+ get in the way. We'd either need to be able to allocate large
|
|
+ pages or have the kernel do the timings from KSEG. Fortunately,
|
|
+ kernels beginning with 2.6.5 will pass us this info in auxvec. */
|
|
+
|
|
+ switch (__builtin_sw_64_implver ())
|
|
+ {
|
|
+ case 0:
|
|
+ /* LCA45 had 8k L1 caches; had 16k L1 caches. */
|
|
+ /* had 128k to 16M 32-byte direct Bcache. LCA45
|
|
+ had 64k to 8M 8-byte direct Bcache. Can't tell. */
|
|
+ shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 5, 1);
|
|
+ break;
|
|
+
|
|
+ case 1:
|
|
+ if (__builtin_sw_64_amask (1 << 8))
|
|
+ {
|
|
+ /* MAX insns not present; */
|
|
+ shape_l1i = shape_l1d = CSHAPE (8 * 1024, 5, 1);
|
|
+ /* ??? L2 and L3 *can* be configured as 32-byte line. */
|
|
+ shape_l2 = CSHAPE (96 * 1024, 6, 3);
|
|
+ /* has 1M to 16M Bcache. */
|
|
+ shape_l3 = CSHAPE (0, 6, 1);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ /* MAX insns present; either PCA56 or PCA57. */
|
|
+ /* PCA56 had 16k 64-byte cache; PCA57 had 32k Icache. */
|
|
+ /* PCA56 had 8k 64-byte cache; PCA57 had 16k Dcache. */
|
|
+ /* PCA5[67] had 512k to 4M Bcache. */
|
|
+ shape_l1i = shape_l1d = shape_l2 = CSHAPE (0, 6, 1);
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case 2:
|
|
+ shape_l1i = shape_l1d = CSHAPE (64 * 1024, 6, 2);
|
|
+ /* had 1M to 16M Bcache. */
|
|
+ shape_l2 = CSHAPE (0, 6, 1);
|
|
+ break;
|
|
+
|
|
+ case 3:
|
|
+ shape_l1i = shape_l1d = CSHAPE (64 * 1024, 6, 2);
|
|
+ shape_l2 = CSHAPE (7 * 1024 * 1024 / 4, 6, 7);
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ shape_l1i = shape_l1d = shape_l2 = 0;
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ __libc_sw_64_cache_shape[0] = shape_l1i;
|
|
+ __libc_sw_64_cache_shape[1] = shape_l1d;
|
|
+ __libc_sw_64_cache_shape[2] = shape_l2;
|
|
+ __libc_sw_64_cache_shape[3] = shape_l3;
|
|
+ shape = __libc_sw_64_cache_shape[index];
|
|
+ }
|
|
+
|
|
+ if (shape <= 0)
|
|
+ return shape;
|
|
+
|
|
+ switch ((name - _SC_LEVEL1_ICACHE_SIZE) % 3)
|
|
+ {
|
|
+ case 0: /* total size */
|
|
+ return shape & -0x100;
|
|
+ case 1: /* associativity */
|
|
+ return shape & 0xf;
|
|
+ default: /* line size */
|
|
+ return 1L << ((shape >> 4) & 0xf);
|
|
+ }
|
|
+}
|
|
+
|
|
+/* Now the generic Linux version. */
|
|
+#undef __sysconf
|
|
+#define __sysconf static linux_sysconf
|
|
+#include <sysdeps/unix/sysv/linux/sysconf.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/timer_t_was_int_compat.h b/sysdeps/unix/sysv/linux/sw_64/timer_t_was_int_compat.h
|
|
new file mode 100644
|
|
index 00000000..d340cdde
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/timer_t_was_int_compat.h
|
|
@@ -0,0 +1,19 @@
|
|
+/* timer_t/int compatibility transition. sw_64 version.
|
|
+ Copyright (C) 2023 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; see the file COPYING.LIB. If
|
|
+ not, see <https://www.gnu.org/licenses/>. */
|
|
+
|
|
+#define TIMER_T_WAS_INT_COMPAT 1
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/ucontext-offsets.sym b/sysdeps/unix/sysv/linux/sw_64/ucontext-offsets.sym
|
|
new file mode 100644
|
|
index 00000000..806c6093
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/ucontext-offsets.sym
|
|
@@ -0,0 +1,28 @@
|
|
+#include <stddef.h>
|
|
+#include <signal.h>
|
|
+#include <sys/ucontext.h>
|
|
+#include "kernel_rt_sigframe.h"
|
|
+
|
|
+--
|
|
+UC_LINK offsetof (ucontext_t, uc_link)
|
|
+UC_OSF_SIGMASK offsetof (ucontext_t, __uc_osf_sigmask)
|
|
+UC_STACK offsetof (ucontext_t, uc_stack)
|
|
+UC_SIGCTX offsetof (ucontext_t, uc_mcontext)
|
|
+UC_SIGMASK offsetof (ucontext_t, uc_sigmask)
|
|
+SC_REGS offsetof (mcontext_t, sc_regs)
|
|
+SC_FPREGS offsetof (mcontext_t, sc_fpregs)
|
|
+SC_PC offsetof (mcontext_t, sc_pc)
|
|
+SC_PS offsetof (mcontext_t, sc_ps)
|
|
+SC_FPCRS offsetof (mcontext_t, sc_fpcr)
|
|
+SC_MASK offsetof (mcontext_t, sc_mask)
|
|
+SC_FPCR offsetof (mcontext_t, sc_fpcr)
|
|
+SS_SP offsetof (stack_t, ss_sp)
|
|
+SS_SIZE offsetof (stack_t, ss_size)
|
|
+
|
|
+_NSIG8 (_NSIG / 8)
|
|
+
|
|
+-- Offsets of the fields in the kernel rt_sigframe_t structure.
|
|
+#define rt_sigframe(member) offsetof (struct kernel_rt_sigframe, member)
|
|
+
|
|
+RT_SIGFRAME_UCONTEXT rt_sigframe (uc)
|
|
+RT_SIGFRAME_SIZE sizeof (struct kernel_rt_sigframe)
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/wait4.c b/sysdeps/unix/sysv/linux/sw_64/wait4.c
|
|
new file mode 100644
|
|
index 00000000..029db464
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/wait4.c
|
|
@@ -0,0 +1,28 @@
|
|
+/* wait4 -- wait for process to change state. Linux/SW_64 version.
|
|
+ Copyright (C) 2019-2023 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
|
|
+ <http://www.gnu.org/licenses/>. */
|
|
+
|
|
+#include <shlib-compat.h>
|
|
+
|
|
+#undef weak_alias
|
|
+#define weak_alias(a, b)
|
|
+#include <sysdeps/unix/sysv/linux/wait4.c>
|
|
+#undef weak_alias
|
|
+#define weak_alias(name, aliasname) _weak_alias (name, aliasname)
|
|
+versioned_symbol (libc, __wait4, wait4, GLIBC_2_1);
|
|
+
|
|
+/* GLIBC_2_0 version is implemented at osf_wait4.c. */
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/wordexp.c b/sysdeps/unix/sysv/linux/sw_64/wordexp.c
|
|
new file mode 100644
|
|
index 00000000..32aefe57
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/wordexp.c
|
|
@@ -0,0 +1 @@
|
|
+#include <sysdeps/unix/sysv/linux/sparc/sparc64/wordexp.c>
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/xstat64.c b/sysdeps/unix/sysv/linux/sw_64/xstat64.c
|
|
new file mode 100644
|
|
index 00000000..c70a6c36
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/xstat64.c
|
|
@@ -0,0 +1,46 @@
|
|
+/* xstat using old-style Unix stat system call.
|
|
+ Copyright (C) 2004-2023 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/>. */
|
|
+
|
|
+#define __xstat __redirect___xstat
|
|
+#include <sys/stat.h>
|
|
+#undef __xstat
|
|
+#include <fcntl.h>
|
|
+#include <kernel_stat.h>
|
|
+#include <sysdep.h>
|
|
+#include <xstatconv.h>
|
|
+
|
|
+/* Get information about the file NAME in BUF. */
|
|
+int
|
|
+__xstat64 (int vers, const char *name, struct stat64 *buf)
|
|
+{
|
|
+ switch (vers)
|
|
+ {
|
|
+ case _STAT_VER_KERNEL64:
|
|
+ return INLINE_SYSCALL_CALL (stat64, name, buf);
|
|
+
|
|
+ default:
|
|
+ {
|
|
+ struct kernel_stat kbuf;
|
|
+ int r = INTERNAL_SYSCALL_CALL (stat, name, &kbuf);
|
|
+ if (r == 0)
|
|
+ return __xstat_conv (vers, &kbuf, buf);
|
|
+ return INLINE_SYSCALL_ERROR_RETURN_VALUE (-r);
|
|
+ }
|
|
+ }
|
|
+}
|
|
+weak_alias (__xstat64, __xstat);
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/xstatconv.c b/sysdeps/unix/sysv/linux/sw_64/xstatconv.c
|
|
new file mode 100644
|
|
index 00000000..3556bc6c
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/xstatconv.c
|
|
@@ -0,0 +1,120 @@
|
|
+/* Convert between the kernel's `struct stat' format, and libc's.
|
|
+ Copyright (C) 1997-2023 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 <errno.h>
|
|
+#include <string.h>
|
|
+#include <sys/stat.h>
|
|
+#include <kernel_stat.h>
|
|
+#include <xstatconv.h>
|
|
+#include <sys/syscall.h>
|
|
+
|
|
+int
|
|
+__xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
|
|
+{
|
|
+ switch (vers)
|
|
+ {
|
|
+ case _STAT_VER_KERNEL:
|
|
+ *(struct kernel_stat *) ubuf = *kbuf;
|
|
+ break;
|
|
+
|
|
+ case _STAT_VER_GLIBC2:
|
|
+ {
|
|
+ struct glibc2_stat *buf = ubuf;
|
|
+
|
|
+ buf->st_dev = kbuf->st_dev;
|
|
+ buf->st_ino = kbuf->st_ino;
|
|
+ buf->st_mode = kbuf->st_mode;
|
|
+ buf->st_nlink = kbuf->st_nlink;
|
|
+ buf->st_uid = kbuf->st_uid;
|
|
+ buf->st_gid = kbuf->st_gid;
|
|
+ buf->st_rdev = kbuf->st_rdev;
|
|
+ buf->st_size = kbuf->st_size;
|
|
+ buf->st_atime_sec = kbuf->st_atime_sec;
|
|
+ buf->st_mtime_sec = kbuf->st_mtime_sec;
|
|
+ buf->st_ctime_sec = kbuf->st_ctime_sec;
|
|
+ buf->st_blksize = kbuf->st_blksize;
|
|
+ buf->st_blocks = kbuf->st_blocks;
|
|
+ buf->st_flags = kbuf->st_flags;
|
|
+ buf->st_gen = kbuf->st_gen;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case _STAT_VER_GLIBC2_1:
|
|
+ {
|
|
+ struct glibc21_stat *buf = ubuf;
|
|
+
|
|
+ buf->st_dev = kbuf->st_dev;
|
|
+ buf->st_ino = kbuf->st_ino;
|
|
+ buf->st_mode = kbuf->st_mode;
|
|
+ buf->st_nlink = kbuf->st_nlink;
|
|
+ buf->st_uid = kbuf->st_uid;
|
|
+ buf->st_gid = kbuf->st_gid;
|
|
+ buf->st_rdev = kbuf->st_rdev;
|
|
+ buf->st_size = kbuf->st_size;
|
|
+ buf->st_atime_sec = kbuf->st_atime_sec;
|
|
+ buf->st_mtime_sec = kbuf->st_mtime_sec;
|
|
+ buf->st_ctime_sec = kbuf->st_ctime_sec;
|
|
+ buf->st_blocks = kbuf->st_blocks;
|
|
+ buf->st_blksize = kbuf->st_blksize;
|
|
+ buf->st_flags = kbuf->st_flags;
|
|
+ buf->st_gen = kbuf->st_gen;
|
|
+ buf->__pad3 = 0;
|
|
+ buf->__glibc_reserved[0] = 0;
|
|
+ buf->__glibc_reserved[1] = 0;
|
|
+ buf->__glibc_reserved[2] = 0;
|
|
+ buf->__glibc_reserved[3] = 0;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ case _STAT_VER_GLIBC2_3_4:
|
|
+ {
|
|
+ struct stat64 *buf = ubuf;
|
|
+
|
|
+ buf->st_dev = kbuf->st_dev;
|
|
+ buf->st_ino = kbuf->st_ino;
|
|
+ buf->st_rdev = kbuf->st_rdev;
|
|
+ buf->st_size = kbuf->st_size;
|
|
+ buf->st_blocks = kbuf->st_blocks;
|
|
+
|
|
+ buf->st_mode = kbuf->st_mode;
|
|
+ buf->st_uid = kbuf->st_uid;
|
|
+ buf->st_gid = kbuf->st_gid;
|
|
+ buf->st_blksize = kbuf->st_blksize;
|
|
+ buf->st_nlink = kbuf->st_nlink;
|
|
+ buf->__pad0 = 0;
|
|
+
|
|
+ buf->st_atim.tv_sec = kbuf->st_atime_sec;
|
|
+ buf->st_atim.tv_nsec = 0;
|
|
+ buf->st_mtim.tv_sec = kbuf->st_mtime_sec;
|
|
+ buf->st_mtim.tv_nsec = 0;
|
|
+ buf->st_ctim.tv_sec = kbuf->st_ctime_sec;
|
|
+ buf->st_ctim.tv_nsec = 0;
|
|
+
|
|
+ buf->__glibc_reserved[0] = 0;
|
|
+ buf->__glibc_reserved[1] = 0;
|
|
+ buf->__glibc_reserved[2] = 0;
|
|
+ }
|
|
+ break;
|
|
+
|
|
+ default:
|
|
+ __set_errno (EINVAL);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/xstatconv.h b/sysdeps/unix/sysv/linux/sw_64/xstatconv.h
|
|
new file mode 100644
|
|
index 00000000..0c309d7d
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/xstatconv.h
|
|
@@ -0,0 +1,22 @@
|
|
+/* Convert between the kernel's `struct stat' format, and libc's.
|
|
+ Copyright (C) 2004-2023 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 <sys/syscall.h>
|
|
+
|
|
+extern int __xstat_conv (int vers, struct kernel_stat *kbuf,
|
|
+ void *ubuf) attribute_hidden;
|
|
diff --git a/sysdeps/unix/sysv/linux/sw_64/xstatver.h b/sysdeps/unix/sysv/linux/sw_64/xstatver.h
|
|
new file mode 100644
|
|
index 00000000..82eb5c13
|
|
--- /dev/null
|
|
+++ b/sysdeps/unix/sysv/linux/sw_64/xstatver.h
|
|
@@ -0,0 +1,14 @@
|
|
+/* Versions of the 'struct stat' data structure used in compatibility xstat
|
|
+ functions. */
|
|
+#define _STAT_VER_KERNEL 0
|
|
+#define _STAT_VER_GLIBC2 1
|
|
+#define _STAT_VER_GLIBC2_1 2
|
|
+#define _STAT_VER_KERNEL64 3
|
|
+#define _STAT_VER_GLIBC2_3_4 3
|
|
+#define _STAT_VER_LINUX 3
|
|
+#define _STAT_VER _STAT_VER_LINUX
|
|
+
|
|
+/* Versions of the 'xmknod' interface used in compatibility xmknod
|
|
+ functions. */
|
|
+#define _MKNOD_VER_LINUX 0
|
|
+#define _MKNOD_VER _MKNOD_VER_LINUX
|
|
--
|
|
2.25.1
|
|
|