Linux Manual Pages development
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx@kernel.org>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: "Pali Rohár" <pali@kernel.org>,
	"Adhemerval Zanella Netto" <adhemerval.zanella@linaro.org>,
	"Guillem Jover" <guillem@debian.org>,
	linux-man@vger.kernel.org, libc-alpha@sourceware.org
Subject: Re: On <asm/termbits.h> and <asm/termios.h> usage in man pages
Date: Mon, 17 Aug 2026 11:03:09 +0200	[thread overview]
Message-ID: <aoLOL-1JRTElewuP@debian> (raw)
In-Reply-To: <83BA7F0B-7318-4F8B-B59B-1F508750E276@zytor.com>

[-- Attachment #1: Type: text/plain, Size: 4890 bytes --]

Hi all,

> Date: 2026-08-16 12:49:59-0700
> From: "H. Peter Anvin" <hpa@zytor.com>
>
> On August 16, 2026 6:19:55 AM PDT, "Pali Rohár" <pali@kernel.org> wrote:
> >On Sunday 16 August 2026 10:03:24 Adhemerval Zanella Netto wrote:
> >> On 16/08/26 09:15, Pali Rohár wrote:
> >> > On Sunday 16 August 2026 13:54:24 Guillem Jover wrote:
> >> >> Hi!
> >> >>
> >> >> I was just refreshing my mind about documentation around TIOCGWINSZ,
> >> >> and noticed the weird <asm/termbits.h> and <asm/termios.h> usage in
> >> >> various ioctl man pages.
> >> >>
> >> >> These originate from commit c023614536251bd6b47a0eab45ab3bcfd2ad9ec2,
> >> >> where it states that the «struct termios» definitions in the
> >> >> <termios.h> header are incompatible with the defined ioctl calls.
> >> >>
> >> >> This seems problematic, for one because the <asm/*> headers are Linux
> >> >> specific, so they reduce portability for all these macros, even when
> >> >> they do not rely or make use of «struct termios». For another because if
> >> >> there is a problem in glibc with the interaction between «struct termios»
> >> >> and the ioctl calls, then that should be fixed in glibc, instead of
> >> >> adding these workarounds in the man pages.
> >> >>
> >> >> It seems the problem is that in glibc «struct termios» maps to the Linux
> >> >> «struct termios2», but the macros for ioctls that use «struct termios»
> >> >> do not match (for example TCGETS instead of TCGETS2)?
> >> >>
> >> >>
> >> >> I think this should be fixed both in glibc, to make the definitions
> >> >> coherent, and in man-pages to not use those Linux-only headers where
> >> >> it is not necessary and then on a second stage to point back to the
> >> >> portable headers once glibc has been fixed?
> >> >>
> >> >> Thanks,
> >> >> Guillem
> >> > 
> >> > Hello! The main problem is that glibc has different API and ABI for
> >> > termios functions and structures than the raw Linux syscalls.
> >> > 
> >> > And at the same time glibc does not provide API for all functionality
> >> > which Linux syscall provides.
> >> > 
> >> > And POSIX, nor GNU does not provide functions / API for setting
> >> > arbitrary baudrate on the tty device.
> >> 
> >> From NEWS:
> >> 
> >>  464 Version 2.42
> >>  [...]
> >>  481 * On Linux, the <termios.h> interface now supports arbitrary baud rates;
> >>  482   speed_t is redefined to simply be the baud rate specified as an
> >>  483   unsigned int, which matches the kernel interface.
> >
> >Nice! So it was finally done.
> >
> >> > 
> >> > So all this functionality and information in the manpage are Linux
> >> > specific, they are not portable.
> >> > 
> >> > Therefore in this case it is necessary for Linux specific thing to use
> >> > Linux-only headers.
> >> > 
> >> > When I was looking at it in the past, I had feeling that glibc cannot
> >> > easily fix it because it would break existing glibc ABI and contract for
> >> > all existing applications.
> >> 
> >> It turned out to be doable, speed_t was already an unsigned int, old binaries
> >> and the legacy Bxxxx bit-pattern values remain accepted for compatibility.
> >> 
> >> The struct termios ABI was preserved (the kernel conversion happens inside
> >> tcgetattr/tcsetattr).
> >> 
> >> There was one regression in the transition (BZ 33340, non-standard baud handling
> >> of CIBAUD), fixed for 2.43 by 8d999a69936.
> >> 
> >> > 
> >> > But once glibc provides API for setting the arbitrary baudrate on tty
> >> > device, we can improve the manpages. But as this did not happened
> >> > for 30 years (in past I saw that there were some attempts), I doubt that
> >> > it would be in near future. It is not easy thing.
> >> 
> >> The incompatibility we have is glibc and kernel struct termios have different
> >> layout, so mixing them is a recipe for trouble.
> >
> >Yes, this is what I remember that there are two structures with same
> >name but different layout and I was passing the wrong one to ioctl and
> >it did not worked.
> >
> >> Kudos to H. Peter Anvin for this work.
> >
> >Thank you very much for this work.
> 
> It is not just the structure but the Bxxx and several other constants as well. My advice is to use <linux/termios.h> in a separate translation unit if one is to use the ioctl interface directly. 
> 
> It is *also* important to note that not all platforms have the TC*ETS*2 ioctls, and on powerpc the ioctl numbers in glibc are different. Virtually all code I have seen gets this wrong, together with the handling of CIBAUD.
> 
> glibc now also has an explicitly numeric interface, with -baud instead of -speed; the hope is that POSIX will eventually adopt that interface too.

So, any suggested changes to the manual pages?


Have a lovely day!
Alex

-- 
<https://www.alejandro-colomar.es>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2026-08-17  9:03 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-16 11:54 On <asm/termbits.h> and <asm/termios.h> usage in man pages Guillem Jover
2026-08-16 12:06 ` Andreas Schwab
2026-08-16 12:15 ` Pali Rohár
2026-08-16 13:03   ` Adhemerval Zanella Netto
2026-08-16 13:19     ` Pali Rohár
2026-08-16 19:49       ` H. Peter Anvin
2026-08-16 20:11         ` H. Peter Anvin
2026-08-17  9:03         ` Alejandro Colomar [this message]
2026-08-17  9:23           ` H. Peter Anvin
2026-08-17  9:53             ` Alejandro Colomar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aoLOL-1JRTElewuP@debian \
    --to=alx@kernel.org \
    --cc=adhemerval.zanella@linaro.org \
    --cc=guillem@debian.org \
    --cc=hpa@zytor.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-man@vger.kernel.org \
    --cc=pali@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox