diff --git a/package/pppd/0001-pppd-workaround-sparc-asm-termbits.h-issue.patch b/package/pppd/0001-pppd-workaround-sparc-asm-termbits.h-issue.patch new file mode 100644 index 0000000000..923c047743 --- /dev/null +++ b/package/pppd/0001-pppd-workaround-sparc-asm-termbits.h-issue.patch @@ -0,0 +1,316 @@ +From ef37e5b112734f551132b613438788fd4ef8797a Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni +Date: Fri, 12 Jul 2024 20:24:22 +0200 +Subject: [PATCH] pppd: workaround sparc issue +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The SPARC version of the kernel header has an issue: +it defines "struct termio", which conflicts with the definition in +, causing a build failure in pppd. + +This issue was fixed in the upstream Linux kernel in commit +c32d18e7942d7589b62e301eb426b32623366565 ("sparc: move struct termio +to asm/termios.h"), which is going to appear in Linux 6.10. + +In order to support building with older toolchains, this patch +includes in the pppd source code a copy of the fixed SPARC + in the pppd code base, and uses it if we're on SPARC +with kernel headers older than 6.10. + +Fixes: + +In file included from termios_linux.h:39: +/home/thomas/projets/buildroot/output/host/sparc64-buildroot-linux-gnu/sysroot/usr/include/asm/termbits.h:17:8: error: redefinition of ‘struct termio’ + 17 | struct termio { + | ^~~~~~ + CC pppd-ipv6cp.o +In file included from /home/thomas/projets/buildroot/output/host/sparc64-buildroot-linux-gnu/sysroot/usr/include/sys/ioctl.h:29, + from sys-linux.c:76: +/home/thomas/projets/buildroot/output/host/sparc64-buildroot-linux-gnu/sysroot/usr/include/bits/ioctl-types.h:36:8: note: originally defined here + 36 | struct termio + | ^~~~~~ + +Upstream: https://github.com/ppp-project/ppp/pull/504 +Signed-off-by: Thomas Petazzoni +--- + pppd/sparc-termbits.h | 247 ++++++++++++++++++++++++++++++++++++++++++ + pppd/termios_linux.h | 6 + + 2 files changed, 253 insertions(+) + create mode 100644 pppd/sparc-termbits.h + +diff --git a/pppd/sparc-termbits.h b/pppd/sparc-termbits.h +new file mode 100644 +index 0000000..f92a27a +--- /dev/null ++++ b/pppd/sparc-termbits.h +@@ -0,0 +1,247 @@ ++/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ ++#ifndef _SPARC_TERMBITS_H ++#define _SPARC_TERMBITS_H ++ ++#include ++ ++typedef unsigned char cc_t; ++typedef unsigned int speed_t; ++ ++#if defined(__sparc__) && defined(__arch64__) ++typedef unsigned int tcflag_t; ++#else ++typedef unsigned long tcflag_t; ++#endif ++ ++#define NCCS 17 ++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_line; /* line discipline */ ++ cc_t c_cc[NCCS]; /* control characters */ ++}; ++ ++struct termios2 { ++ 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_line; /* line discipline */ ++ cc_t c_cc[NCCS+2]; /* control characters */ ++ speed_t c_ispeed; /* input speed */ ++ speed_t c_ospeed; /* output speed */ ++}; ++ ++struct ktermios { ++ 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_line; /* line discipline */ ++ cc_t c_cc[NCCS+2]; /* control characters */ ++ speed_t c_ispeed; /* input speed */ ++ speed_t c_ospeed; /* output speed */ ++}; ++ ++/* c_cc characters */ ++#define VINTR 0 ++#define VQUIT 1 ++#define VERASE 2 ++#define VKILL 3 ++#define VEOF 4 ++#define VEOL 5 ++#define VEOL2 6 ++#define VSWTC 7 ++#define VSTART 8 ++#define VSTOP 9 ++ ++ ++ ++#define VSUSP 10 ++#define VDSUSP 11 /* SunOS POSIX nicety I do believe... */ ++#define VREPRINT 12 ++#define VDISCARD 13 ++#define VWERASE 14 ++#define VLNEXT 15 ++ ++/* Kernel keeps vmin/vtime separated, user apps assume vmin/vtime is ++ * shared with eof/eol ++ */ ++#define VMIN VEOF ++#define VTIME VEOL ++ ++/* c_iflag bits */ ++#define IGNBRK 0x00000001 ++#define BRKINT 0x00000002 ++#define IGNPAR 0x00000004 ++#define PARMRK 0x00000008 ++#define INPCK 0x00000010 ++#define ISTRIP 0x00000020 ++#define INLCR 0x00000040 ++#define IGNCR 0x00000080 ++#define ICRNL 0x00000100 ++#define IUCLC 0x00000200 ++#define IXON 0x00000400 ++#define IXANY 0x00000800 ++#define IXOFF 0x00001000 ++#define IMAXBEL 0x00002000 ++#define IUTF8 0x00004000 ++ ++/* c_oflag bits */ ++#define OPOST 0x00000001 ++#define OLCUC 0x00000002 ++#define ONLCR 0x00000004 ++#define OCRNL 0x00000008 ++#define ONOCR 0x00000010 ++#define ONLRET 0x00000020 ++#define OFILL 0x00000040 ++#define OFDEL 0x00000080 ++#define NLDLY 0x00000100 ++#define NL0 0x00000000 ++#define NL1 0x00000100 ++#define CRDLY 0x00000600 ++#define CR0 0x00000000 ++#define CR1 0x00000200 ++#define CR2 0x00000400 ++#define CR3 0x00000600 ++#define TABDLY 0x00001800 ++#define TAB0 0x00000000 ++#define TAB1 0x00000800 ++#define TAB2 0x00001000 ++#define TAB3 0x00001800 ++#define XTABS 0x00001800 ++#define BSDLY 0x00002000 ++#define BS0 0x00000000 ++#define BS1 0x00002000 ++#define VTDLY 0x00004000 ++#define VT0 0x00000000 ++#define VT1 0x00004000 ++#define FFDLY 0x00008000 ++#define FF0 0x00000000 ++#define FF1 0x00008000 ++#define PAGEOUT 0x00010000 /* SUNOS specific */ ++#define WRAP 0x00020000 /* SUNOS specific */ ++ ++/* c_cflag bit meaning */ ++#define CBAUD 0x0000100f ++#define B0 0x00000000 /* hang up */ ++#define B50 0x00000001 ++#define B75 0x00000002 ++#define B110 0x00000003 ++#define B134 0x00000004 ++#define B150 0x00000005 ++#define B200 0x00000006 ++#define B300 0x00000007 ++#define B600 0x00000008 ++#define B1200 0x00000009 ++#define B1800 0x0000000a ++#define B2400 0x0000000b ++#define B4800 0x0000000c ++#define B9600 0x0000000d ++#define B19200 0x0000000e ++#define B38400 0x0000000f ++#define EXTA B19200 ++#define EXTB B38400 ++#define CSIZE 0x00000030 ++#define CS5 0x00000000 ++#define CS6 0x00000010 ++#define CS7 0x00000020 ++#define CS8 0x00000030 ++#define CSTOPB 0x00000040 ++#define CREAD 0x00000080 ++#define PARENB 0x00000100 ++#define PARODD 0x00000200 ++#define HUPCL 0x00000400 ++#define CLOCAL 0x00000800 ++#define CBAUDEX 0x00001000 ++/* We'll never see these speeds with the Zilogs, but for completeness... */ ++#define BOTHER 0x00001000 ++#define B57600 0x00001001 ++#define B115200 0x00001002 ++#define B230400 0x00001003 ++#define B460800 0x00001004 ++/* This is what we can do with the Zilogs. */ ++#define B76800 0x00001005 ++/* This is what we can do with the SAB82532. */ ++#define B153600 0x00001006 ++#define B307200 0x00001007 ++#define B614400 0x00001008 ++#define B921600 0x00001009 ++/* And these are the rest... */ ++#define B500000 0x0000100a ++#define B576000 0x0000100b ++#define B1000000 0x0000100c ++#define B1152000 0x0000100d ++#define B1500000 0x0000100e ++#define B2000000 0x0000100f ++/* These have totally bogus values and nobody uses them ++ so far. Later on we'd have to use say 0x10000x and ++ adjust CBAUD constant and drivers accordingly. ++#define B2500000 0x00001010 ++#define B3000000 0x00001011 ++#define B3500000 0x00001012 ++#define B4000000 0x00001013 */ ++#define CIBAUD 0x100f0000 /* input baud rate (not used) */ ++#define CMSPAR 0x40000000 /* mark or space (stick) parity */ ++#define CRTSCTS 0x80000000 /* flow control */ ++ ++#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */ ++ ++/* c_lflag bits */ ++#define ISIG 0x00000001 ++#define ICANON 0x00000002 ++#define XCASE 0x00000004 ++#define ECHO 0x00000008 ++#define ECHOE 0x00000010 ++#define ECHOK 0x00000020 ++#define ECHONL 0x00000040 ++#define NOFLSH 0x00000080 ++#define TOSTOP 0x00000100 ++#define ECHOCTL 0x00000200 ++#define ECHOPRT 0x00000400 ++#define ECHOKE 0x00000800 ++#define DEFECHO 0x00001000 /* SUNOS thing, what is it? */ ++#define FLUSHO 0x00002000 ++#define PENDIN 0x00004000 ++#define IEXTEN 0x00008000 ++#define EXTPROC 0x00010000 ++ ++/* modem lines */ ++#define TIOCM_LE 0x001 ++#define TIOCM_DTR 0x002 ++#define TIOCM_RTS 0x004 ++#define TIOCM_ST 0x008 ++#define TIOCM_SR 0x010 ++#define TIOCM_CTS 0x020 ++#define TIOCM_CAR 0x040 ++#define TIOCM_RNG 0x080 ++#define TIOCM_DSR 0x100 ++#define TIOCM_CD TIOCM_CAR ++#define TIOCM_RI TIOCM_RNG ++#define TIOCM_OUT1 0x2000 ++#define TIOCM_OUT2 0x4000 ++#define TIOCM_LOOP 0x8000 ++ ++/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ ++#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ ++ ++ ++/* tcflow() and TCXONC use these */ ++#define TCOOFF 0 ++#define TCOON 1 ++#define TCIOFF 2 ++#define TCION 3 ++ ++/* tcflush() and TCFLSH use these */ ++#define TCIFLUSH 0 ++#define TCOFLUSH 1 ++#define TCIOFLUSH 2 ++ ++/* tcsetattr uses these */ ++#define TCSANOW 0 ++#define TCSADRAIN 1 ++#define TCSAFLUSH 2 ++ ++#endif /* _SPARC_TERMBITS_H */ +diff --git a/pppd/termios_linux.h b/pppd/termios_linux.h +index a234d30..9812017 100644 +--- a/pppd/termios_linux.h ++++ b/pppd/termios_linux.h +@@ -32,7 +32,13 @@ + #include + #include + #include ++#include ++ ++#if defined(__sparc__) && LINUX_VERSION_CODE < KERNEL_VERSION(6,10,0) ++#include "sparc-termbits.h" ++#else + #include ++#endif + + #if defined(BOTHER) && defined(TCGETS2) + #define termios termios2 +-- +2.45.2 +