Hi!
Haha! So obvious now that you've pointed it out!! Yes, I confirm that this is the problem! I never even thought to look for such macros upstream! Thanks!
OK, can I propose a patch to uclibc-ng to change the naming of the unused fields to include "uclibc" in the name. This is in the style of glibc, which does the same (only with __glibc_unused)
Signed off: Ed Wildgoose lists@wildgooses.com
--- /usr/include/bits/stat.h.orig 2020-06-11 16:14:05.995149761 +0000 +++ /usr/include/bits/stat.h 2020-06-11 16:14:47.344220485 +0000 @@ -99,11 +99,11 @@ unsigned long int st_ctimensec; /* Nsecs of last status change. */ #endif #if __WORDSIZE == 64 - long int ___unused[3]; + long int __uclibc__unused[3]; #else # ifndef __USE_FILE_OFFSET64 - unsigned long int __unused4; - unsigned long int __unused5; + unsigned long int __uclibc_unused4; + unsigned long int __uclibc_unused5; # else __ino64_t st_ino; /* File serial number. */ # endif @@ -160,7 +160,7 @@ unsigned long int st_ctimensec; /* Nsecs of last status change. */ #endif #if __WORDSIZE == 64 - long int __unused[3]; + long int __uclibc_unused[3]; #else __ino64_t st_ino; /* File serial number. */ #endif
On 10/06/2020 22:00, Yann Sionneau wrote:
Hello Ed,
Maybe it is due to this https://github.com/rsmarples/dhcpcd/blob/709e6b1a38ef87ada75354e968a9b35eca3... ?
Could you try renaming __unused[3] as ___unused[3] (with an extra leading '_') to see if it compiles?
Regards,
Yann
Le 10/06/2020 à 22:51, Ed W a écrit :
Hi, Could someone please take a look at my errors below and see if this is a uclibc problem? I'm struggling to understand.
System is gentoo/hardened/uclibc-ng. Using gcc-9.3.0, uclibc-1.0.33 in a chroot on x86-64
Using dhcpcd-8+, ie observe the same on 9.x and various 8.x versions. Specifically testing dhcpcd-8.1.9 in this case.
Error on compilation looks like:
In file included from /usr/include/sys/stat.h:106, from /usr/include/fcntl.h:37, from if.c:58: /usr/include/bits/stat.h:102:22: error: expected identifier or '(' before '[' token 102 | long int __unused[3]; | ^
If I comment out the "#include <fcntl.h>" in if.c, then it compiles without error.
Also, if I convert the definition from the form "__unused[3]" to separate lines like "long int __unused1", etc, then it also compiles without error.
I'm not clear why an array definition in a struct is triggering this compiler error? Any thoughts? Is this something that dhcpcd is doing wrong?
Thanks for any help. Full log below
Ed W
# ./configure configure args: Deriving operating system from ... x86_64-unknown-linux Configuring dhcpcd for ... linux Enabling INET support Enabling ARP support Enabling ARPing support Enabling IPv4LL support Enabling INET6 support Enabling DHCPv6 support Enabling Authentication Using compiler .. cc cc (Gentoo Hardened 9.3.0 p2) 9.3.0 dhcpcd-definitions.conf will be embedded in dhcpcd itself Testing for nl80211 ... yes Testing for IN6_ADDR_GEN_MODE_NONE ... yes Testing for getifaddrs ... yes Testing for ifaddrs.ifa_addrflags ... no Testing for clock_gettime ... yes Testing for inet_ntoa ... yes Testing for arc4random ... no Testing for arc4random_uniform ... no Testing for open_memstream ... yes Testing for pidfile_lock ... no Testing for setproctitle ... no Testing for strlcpy ... yes Testing for strtoi ... no Testing for consttime_memequal ... no Testing for dprintf ... yes Testing for TAILQ_FOREACH_SAFE ... no Testing for TAILQ_FOREACH_MUTABLE ... no Testing for TAILQ_CONCAT ...yes Testing for rb_tree_init ... no Testing for reallocarray ... no Testing for kqueue1 ... no Testing for kqueue ... no Testing for epoll ... yes Testing for be64enc ... no Testing for fls64 ... no Testing for MD5Init ... no Testing for sha2.h ... no Testing for SHA256_Init ... no Testing for SHA256Init ... no Testing for hmac ... no Checking for libudev ... yes Checking udev_monitor_filter_add_match_subsystem_devtype ... yes Checking udev_device_get_is_initialized ... yes Testing for dlopen ... yes Checking for ntpd ... /usr/sbin/ntpd (50-ntp.conf) Checking for chronyd ... not found Checking for ypbind ... not found
SYSCONFDIR = /etc SBINDIR = /sbin LIBDIR = /lib LIBEXECDIR = /libexec DBDIR = /var/db/dhcpcd RUNDIR = /var/run MANDIR = /usr/share/man DATADIR = /usr/share HOOKSCRIPTS = 50-ntp.conf EGHOOKSCRIPTS = STATUSARG =
chroot:twocubed dhcpcd-8.1.9 # make for x in src hooks; do cd $x; make all || exit $?; cd ..; done make[1]: Entering directory '/var/tmp/portage/net-misc/dhcpcd-8.1.9/work/dhcpcd-8.1.9/src' cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c common.c -o common.o cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c control.c -o control.o cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c dhcpcd.c -o dhcpcd.o cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c duid.c -o duid.o cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c eloop.c -o eloop.o cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c logerr.c -o logerr.o cc -O2 -std=c99 -DHAVE_CONFIG_H -DNDEBUG -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DINET -DARP -DARPING -DIPV4LL -DINET6 -DDHCP6 -DAUTH -DPLUGIN_DEV -I.. -I../src -I./crypt -c if.c -o if.o In file included from /usr/include/sys/stat.h:106, from /usr/include/fcntl.h:37, from if.c:58: /usr/include/bits/stat.h:102:22: error: expected identifier or '(' before '[' token 102 | long int __unused[3]; | ^ /usr/include/bits/stat.h:163:22: error: expected identifier or '(' before '[' token 163 | long int __unused[3]; | ^ make[1]: *** [Makefile:55: if.o] Error 1 make[1]: Leaving directory '/var/tmp/portage/net-misc/dhcpcd-8.1.9/work/dhcpcd-8.1.9/src' make: *** [Makefile:24: all] Error 2
devel mailing list devel@uclibc-ng.org https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel