tcpdump mailing list archives
Re: compiler warnings on AIX and Solaris
From: Guy Harris via tcpdump-workers <tcpdump-workers () lists tcpdump org>
Date: Sat, 24 Jul 2021 10:55:19 -0700
--- Begin Message --- From: Guy Harris <gharris () sonic net>
Date: Sat, 24 Jul 2021 10:55:19 -0700
On Jul 23, 2021, at 4:11 PM, Denis Ovsienko via tcpdump-workers <tcpdump-workers () lists tcpdump org> wrote:As it turns out, on Solaris 9 it is impossible to compile current tcpdump with CFLAGS=-Werror because missing/getopt_long.c yields a few warnings (attached). As far as the current revisions of this file go in FreeBSD, NetBSD and OpenBSD, FreeBSD seems to be the closest and just a bit newer than the current tcpdump copy (OpenBSD revision 1.22 -> 1.26). However, it seems unlikely that porting the newer revision would make the warnings go away, because, for example, permute_args() has not changed at all.At least when it comes to not violating the promises made by the API definition, the BSD implementations of getupt_long(), the GNU libc implementation of getopt_long(), and the Solaris implementation of getopt_long() are all broken by design. The declaration is int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex); where "char * const *argv" means, to quote cdecl.org, "declare argv as pointer to const pointer to char", which means that the pointer(s) to which argv points cannot be modified. What the pointers point *to* - i.e., the argument strings - can be modified, but the pointers in the argv array will not be modified. All three implementations could shuffle the arguments in argv[] (as per the name "permute_args" in the BSD implementations) unless either 1) the option string begins with a "+" or 2) the POSIXLY_CORRECT environment variable is set. This isn't an issue for us on systems that provide getopt_long() - it's an issue for whoever compiles the standard library if they turn on "warn about casting away constness", but it's not an issue for *us*, as somebody else compiled the standard library. Thus, it doesn't show up on Linux (GNU libc), *BSD/macOS (BSD), or newer versions of Solaris (they added getopt_long() to the library). It is, however, an issue for us if 1) the platform doesn't provide getopt_long() (presumably it was added to Solaris after Solaris 9), so it has to be compiled as part of the tcpdump build process and 2) the compiler issues that warning. It's not currently an issue on Windows when compiling with MSVC, because either 1) MSVC never issues that warning or 2) it can but we're not enabling it. So the only way to fix this is to turn off the warnings; change 39f09d68ce7ebe9e229c9bf5209bfc30a8f51064 adds macros to disable and re-enable -Wcast-qual and wraps the offending code in getopt_long.c with those macros, so the problem should be fixed on Solaris 9.The same problem stands on AIX 7,AIX also doesn't appear to provide getopt_long(), at least as of AIX 7.2: https://www.ibm.com/docs/en/aix/7.2?topic=reference-base-operating-system-bos-runtime-services so the same problem occurs; the change should fix that as well.and in addition there is an issue specific to XL C compiler, in that ./configure detects that the compiler does not support -W, but then proceeds to flex every -Wxxxx option anyway, which the compiler treats as a soft error,"The compiler treats [that] as a s soft error" is the problem - the configure script checks currently require that unknown -W flags be a *hard* error, so that attempting to compile a small test program with that option fails. If there's a way to force XL C to treat it as a hard error, we need to update the AC_LBL_CHECK_UNKNOWN_WARNING_OPTION_ERROR autoconf macro to set the compiler up to use it when testing whether compiler options are supported. If there *isn't* a way to do that, the configure-script test also needs to scan the standard error of the compilation and look for the warning, and treat that as an indication of lack of support as well. (I think the equivalent test provided as part of CMake may already do that.)
--- End Message ---
_______________________________________________ tcpdump-workers mailing list tcpdump-workers () lists tcpdump org https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers
Current thread:
- compiler warnings on AIX and Solaris Denis Ovsienko via tcpdump-workers (Jul 23)
- Re: compiler warnings on AIX and Solaris Guy Harris via tcpdump-workers (Jul 24)
- Message not available
- Re: compiler warnings on AIX and Solaris Denis Ovsienko via tcpdump-workers (Jul 24)
- Message not available
- Re: compiler warnings on AIX and Solaris Denis Ovsienko via tcpdump-workers (Jul 25)
- build failures on Solaris Denis Ovsienko via tcpdump-workers (Jul 31)
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Jul 31)
- Message not available
- Re: build failures on Solaris Denis Ovsienko via tcpdump-workers (Jul 31)
- Message not available
- Message not available
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Aug 01)
- Message not available
- Message not available
- Message not available
- Re: build failures on Solaris Denis Ovsienko via tcpdump-workers (Aug 01)
- Message not available
- Message not available
- Message not available
- Re: build failures on Solaris Guy Harris via tcpdump-workers (Aug 01)
- Re: build failures on Solaris Denis Ovsienko via tcpdump-workers (Aug 02)