Hi,

As Icenowy has pointed out, there is no termios2 for ppc. The TCGETS2
constant for ppc in glibc is not actually usable in user code. However,
this gave me an idea...

On 10/31/25 21:26, Luca Bonissi wrote:
> >From 2aa0a13da0da6e3a804359f24cc1298b97cda45c Mon Sep 17 00:00:00 2001
> From: Luca Bonissi <[email protected]>
> Date: Fri, 31 Oct 2025 13:31:36 +0100
> Subject: [PATCH 5/7] Add termios2 support to ppc target
>
> Signed-off-by: Luca Bonissi <[email protected]>
> ---
>  linux-user/ppc/termbits.h | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/linux-user/ppc/termbits.h b/linux-user/ppc/termbits.h
> index eb226e0999..ae6ee8897c 100644
> --- a/linux-user/ppc/termbits.h
> +++ b/linux-user/ppc/termbits.h
> @@ -20,6 +20,28 @@ struct target_termios {
>      target_speed_t c_ospeed;               /* output speed */
>  };
>  
> +struct target_termios2 {
> +    target_tcflag_t c_iflag;               /* input mode flags */
> +    target_tcflag_t c_oflag;               /* output mode flags */
> +    target_tcflag_t c_cflag;               /* control mode flags */
> +    target_tcflag_t c_lflag;               /* local mode flags */
> +    target_cc_t c_cc[TARGET_NCCS];         /* control characters */
> +    target_cc_t c_line;                    /* line discipline */
> +    target_speed_t c_ispeed;               /* input speed */
> +    target_speed_t c_ospeed;               /* output speed */
> +};
> +

The "nonsensical" target_termios2 here is identical to target_termios.
So, can we simply *rename* target_termios into target_termios2, and also
rename the constants like these to add a "2":

#define TARGET_TCGETS           TARGET_IOR('t', 19, struct target_termios)
#define TARGET_TCSETS           TARGET_IOW('t', 20, struct target_termios)
#define TARGET_TCSETSW          TARGET_IOW('t', 21, struct target_termios)
#define TARGET_TCSETSF          TARGET_IOW('t', 22, struct target_termios)

So that we repurpose the generic termios2 code to handle termios for
ppc? This would look like we're translating ppc guest TCGETS into host
TCGETS2, but the code would be written like it's doing a straight ppc
guest fake-TCGETS2 to host TCGETS2 translation.

Essentially, instead of thinking of ppc as "termios is different, and
there's no termios2", we can think of it as "termios2 only, no termios".
This would be ABI compatible with user programs and support the
non-standard baud rates use case that are checked in the glibc test
suite on ppc guest. 

Icenowy's suggestion [1] to fix ppc host support basically does the
corresponding thing on the ppc host side. This looks slightly less
cursed than my idea but is basically the same deal.

Some extra handling may be needed to print the correct words in syscall
trace output.

Vivian "dramforever" Wang

[1]: 
https://lore.kernel.org/qemu-devel/[email protected]/


Reply via email to