[PATCH v4] linux/termio: remove <termio.h> and struct termio

Florian Weimer fw@deneb.enyo.de
Sun Apr 27 06:40:16 GMT 2025


* H. Peter Anvin:

> On 4/25/25 08:44, Florian Weimer wrote:
>> * H. Peter Anvin:
>> 
>>> The <termio.h> interface is absolutely ancient: it was obsoleted by
>>> <termios.h> already in the first version of POSIX (1988) and thus
>>> predates the very first version of Linux. Unfortunately, some constant
>>> macros are used both by <termio.h> and <termios.h>; particularly
>>> problematic is the baud rate constants since the termio interface
>>> *requires* that the baud rate is set via an enumeration as part of
>>> c_cflag.
>>>
>>> In preparation of revamping the termios interface to support the
>>> arbitrary baud rate capability that the Linux kernel has supported
>>> since 2008, remove <termio.h> in the hope that no one still uses this
>>> archaic interface.
>>>
>>> Note that there is no actual code in glibc to support termio: it is
>>> purely an unabstracted ioctl() interface.
>>>
>>> [ v4: fix botched patch ]
>>> [ v3: rebase onto current master ceeffd970c56893885cbf8382ae34b015f177850 ]
>>> [ v2: remove separate struct termio definitions for mips and sparc ]
>>>
>>> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
>>> ---
>>>   NEWS                                               |  5 +++++
>>>   sysdeps/unix/sysv/linux/Makefile                   |  6 ------
>>>   sysdeps/unix/sysv/linux/bits/ioctl-types.h         | 11 -----------
>>>   sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h    | 12 ------------
>>>   sysdeps/unix/sysv/linux/powerpc/bits/ioctl-types.h | 11 -----------
>>>   sysdeps/unix/sysv/linux/termio.h                   |  6 ------
>>>   6 files changed, 5 insertions(+), 46 deletions(-)
>>>   delete mode 100644 sysdeps/unix/sysv/linux/termio.h
>> 
>> I've pushed that.  It's headed towards Fedora rawhide, so we'll see if
>> there's any breakage soon.  Likewise for OpenSUSE tumbleweed.
>> 
>
> So Linaro reports that this breaks gcc libsanitizer. This is simply 
> because of the following lines
>
> sanitizer_common/sanitizer_platform_limits_posix.cpp [488-490]:
>
> #if SANITIZER_GLIBC || SANITIZER_ANDROID
>    unsigned struct_termio_sz = sizeof(struct termio);
> #endif
>
> struct_termio_sz is then used in sanitizer_common_interceptors_ioctl.inc.

There's an upstream/LLVM PR for this:

  [sanitizer_common] Remove interceptors for deprecated struct termio
  <https://github.com/llvm/llvm-project/pull/137403>

I plan to submit a GCC patch once the LLVM change has been merged.


More information about the Libc-alpha mailing list