1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-06-27 00:01:05 +03:00
Files
glibc/sysdeps/unix/sysv/linux/Versions
H. Peter Anvin (Intel) 5cf101a85a linux: implement arbitrary and split speeds in termios
Linux has supported arbitrary speeds and split speeds in the kernel
since 2008 on all platforms except Alpha (fixed in 2020), but glibc
was never updated to match. This is further complicated by POSIX uses
of macros for the cf[gs]et[io]speed interfaces, rather than plain
numbers, as it really ought to have.

On most platforms, the glibc ABI includes the c_[io]speed fields in
struct termios, but they are incorrectly used. On MIPS and SPARC, they
are entirely missing.

For backwards compatibility, the kernel will still use the legacy
speed fields unless they are set to BOTHER, and will use the legacy
output speed as the input speed if the latter is 0 (== B0). However,
the specific encoding used is visible to user space applications,
including ones other than the one running.

- SPARC and MIPS get a new struct termios, and tc[gs]etattr() is
  versioned accordingly. However, the new struct termios is set to be
  a strict extension of the old one, which means that cf* interfaces
  other than the speed-related ones do not need versioning.
- The Bxxx constants are redefined as equivalent to their integer
  values and the legacy Bxxx constants are renamed __Bxxx.
- cf[gs]et[io]speed() and cfsetspeed() are versioned accordingly.
- tcgetattr() and cfset[io]speed() are adjusted to always keep the
  c_[io]speed fields correct (unlike earlier versions), but to
  canonicalize the representation to ALSO configure the legacy fields
  if a valid legacy representation exists.
- tcsetattr(), too, canonicalizes the representation in this way
  before passing it to the kernel, to maximize compatibility with
  older applications/tools.
- The old IBAUD0 hack is removed; it is no longer necessary since
  even the legacy c_cflag baud rate fields have had separate input
  values for a long time.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2025-06-17 09:11:38 -03:00

371 lines
6.5 KiB
Plaintext

%include <time64-compat.h>
libc {
GLIBC_2.0 {
# functions used in inline functions or macros
__cmsg_nxthdr;
# functions used in other libraries
__clone;
# helper functions
__errno_location;
# b*
bdflush;
# c*
clone; create_module;
# d*
delete_module;
# g*
get_kernel_syms; getresgid; getresuid;
# i*
init_module;
# k*
klogctl;
# l*
llseek;
# m*
mremap;
# n*
nfsservctl;
# p*
personality; prctl;
# q*
query_module; quotactl;
# s*
setfsgid; setfsuid;
# s*
setresgid; setresuid; swapoff; swapon; sysctl; sysinfo;
# u*
umount; uselib;
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.1 {
# functions used in inline functions or macros
__libc_sa_len;
# Since we have new signals this structure changed.
_sys_siglist; sys_siglist; sys_sigabbrev;
# New errlist.
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
# chown interface change.
chown;
# Change in pthread_attr_t.
pthread_attr_init;
# c*
capget; capset;
# n*
ntp_adjtime; ntp_gettime;
# u*
umount2;
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.2 {
# needed in other libraries.
__endmntent; __getmntent_r; __setmntent; __statfs; __sysctl;
# ipc ctl interface change.
semctl; shmctl; msgctl;
# Old symbol versions from libpthread.
__pread64;
__pwrite64;
lseek64;
open64;
pread;
pread64;
pwrite;
pwrite64;
}
GLIBC_2.2.1 {
# p*
pivot_root;
}
GLIBC_2.3 {
# r*
readahead;
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.3.2 {
# New kernel interfaces.
epoll_create; epoll_ctl; epoll_wait;
}
GLIBC_2.3.3 {
_sys_siglist;
gnu_dev_major;
gnu_dev_makedev;
gnu_dev_minor;
posix_fadvise64;
posix_fallocate64;
sys_sigabbrev;
sys_siglist;
# Changed timer_t. Only used by some 64-bit targets.
timer_create;
timer_delete;
timer_getoverrun;
timer_gettime;
timer_settime;
}
GLIBC_2.3.4 {
sched_getaffinity; sched_setaffinity;
}
GLIBC_2.4 {
inotify_init; inotify_add_watch; inotify_rm_watch;
unshare;
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.5 {
splice; tee; vmsplice;
}
GLIBC_2.6 {
epoll_pwait; sync_file_range; sched_getcpu;
}
GLIBC_2.7 {
eventfd; eventfd_read; eventfd_write; signalfd;
}
GLIBC_2.8 {
timerfd_create; timerfd_settime; timerfd_gettime;
}
GLIBC_2.9 {
epoll_create1; inotify_init1;
}
GLIBC_2.10 {
fallocate;
}
GLIBC_2.11 {
fallocate64;
}
GLIBC_2.12 {
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
ntp_gettimex;
recvmmsg;
}
GLIBC_2.13 {
prlimit; prlimit64;
fanotify_init; fanotify_mark;
}
GLIBC_2.14 {
clock_adjtime;
name_to_handle_at; open_by_handle_at;
setns;
sendmmsg;
}
GLIBC_2.15 {
process_vm_readv; process_vm_writev;
}
GLIBC_2.27 {
memfd_create;
mlock2;
pkey_alloc; pkey_free; pkey_set; pkey_get; pkey_mprotect;
}
GLIBC_2.29 {
getcpu;
}
GLIBC_2.30 {
getdents64; gettid; tgkill;
}
GLIBC_2.32 {
}
GLIBC_2.34 {
%ifdef TIME64_NON_DEFAULT
# 64-bit time_t support
__adjtime64;
___adjtimex64;
__aio_suspend_time64;
__clock_adjtime64;
__clock_getres64;
__clock_gettime64;
__clock_nanosleep_time64;
__clock_settime64;
__cnd_timedwait64;
__ctime64;
__ctime64_r;
__difftime64;
__fcntl_time64;
__fstat64_time64;
__fstatat64_time64;
__futimens64;
__futimes64;
__futimesat64;
__fts64_open_time64;
__fts64_close_time64;
__fts64_read_time64;
__fts64_set_time64;
__fts64_children_time64;
__ftw64_time64;
__nftw64_time64;
__gai_suspend_time64;
__getitimer64;
__getrusage64;
__getsockopt64;
__gettimeofday64;
__glob64_time64;
__globfree64_time64;
__gmtime64;
__gmtime64_r;
__ioctl_time64;
__localtime64;
__localtime64_r;
__lstat64_time64;
__lutimes64;
__mktime64;
__mq_timedreceive_time64;
__mq_timedsend_time64;
__msgctl64;
__mtx_timedlock64;
__nanosleep64;
__nanosleep64;
__ntp_gettime64;
__ntp_gettimex64;
__ppoll64;
__prctl_time64;
__pselec64;
__pselect64;
__pthread_clockjoin_np64;
__pthread_cond_clockwait64;
__pthread_cond_timedwait64;
__pthread_mutex_clocklock64;
__pthread_mutex_timedlock64;
__pthread_rwlock_clockrdlock64;
__pthread_rwlock_clockwrlock64;
__pthread_rwlock_timedrdlock64;
__pthread_rwlock_timedwrlock64;
__pthread_timedjoin_np64;
__recvmmsg64;
__recvmsg64;
__sched_rr_get_interval64;
__select64;
__sem_clockwait64;
__semctl64;
__semtimedop64;
__sem_timedwait64;
__sendmmsg64;
__sendmsg64;
__setitimer64;
__setsockopt64;
__settimeofday64;
__shmctl64;
__sigtimedwait64;
__stat64_time64;
__thrd_sleep64;
__time64;
__timegm64;
__timer_gettime64;
__timer_settime64;
__timerfd_gettime64;
__timerfd_settime64;
__timespec_get64;
__timespec_getres64;
__utime64;
__utimensat64;
__utimes64;
__utimes64;
__wait3_time64;
__wait4_time64;
%endif
close_range;
}
GLIBC_2.35 {
%ifdef TIME64_NON_DEFAULT
__epoll_pwait2_time64;
%endif
epoll_pwait2;
}
GLIBC_2.36 {
fsconfig;
fsmount;
fsopen;
fspick;
move_mount;
mount_setattr;
open_tree;
pidfd_open;
pidfd_getfd;
pidfd_send_signal;
process_madvise;
process_mrelease;
}
GLIBC_2.37 {
%ifdef TIME64_NON_DEFAULT
__ppoll64_chk;
%endif
}
GLIBC_2.39 {
pidfd_getpid;
pidfd_spawn;
pidfd_spawnp;
posix_spawnattr_getcgroup_np;
posix_spawnattr_setcgroup_np;
}
GLIBC_2.41 {
sched_getattr;
sched_setattr;
}
GLIBC_2.42 {
cfgetospeed;
cfgetispeed;
cfsetospeed;
cfsetispeed;
cfsetspeed;
}
GLIBC_PRIVATE {
# functions used in other libraries
__syscall_rt_sigqueueinfo;
__open_nocancel;
__read_nocancel;
__pread64_nocancel;
__close_nocancel;
__sigtimedwait;
# functions used by nscd
__netlink_assert_response;
}
}
librt {
GLIBC_2.3.3 {
# Leftover from the int -> timer_t transition. For ABIs that came later
# and do not have the symbol version, this version node is merged with
# the baseline version.
__librt_version_placeholder;
}
}
ld {
GLIBC_2.35 {
__rseq_flags;
__rseq_offset;
__rseq_size;
}
}