On 5/25/21 4:40 PM, Thomas Huth wrote: > On 25/05/2021 16.31, Cornelia Huck wrote: >> On Tue, 25 May 2021 16:20:32 +0200 >> Thomas Huth <[email protected]> wrote: >> >>> The -msoft-float switch is not available in older versions of Clang. >>> Since we rely on the compiler to not generate floating point >>> instructions >>> unexpectedly, we block those old compilers now via a test in the >>> configure >>> script. Note that for some weird reasons, the Clang compiler only >>> complains >>> about the missing soft-float support if no other flags are passed via >>> "-Wl,..." to the linker. So we have to use "compile_object" instead of >>> "compile_prog" for this check. >> >> Ugh. > > It's maybe better to use compile_object for testing -msoft-float anyway > since it could influence the way of linking against libraries (if I get > https://reviews.llvm.org/D72189 right). > >>> >>> Signed-off-by: Thomas Huth <[email protected]> >>> --- >>> configure | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/configure b/configure >>> index 676239c697..673419ff31 100755 >>> --- a/configure >>> +++ b/configure >>> @@ -5462,7 +5462,7 @@ if test "$cpu" = "s390x" ; then >>> write_c_skeleton >>> compile_prog "-march=z900" "" >>> has_z900=$? >>> - if [ $has_z900 = 0 ] || compile_prog "-march=z10" ""; then >>> + if [ $has_z900 = 0 ] || compile_object "-march=z10 -msoft-float >>> -Werror"; then >> >> Do you believe that we should have caught the various clang >> specialties now? > > Apart from one compiler warning that just popped up today, yes. I'm > seeing this compiler warning with Clang 12.0 now: > > roms/SLOF/lib/libnet/ipv6.c:447:18: warning: variable length array > folded to constant array as an extension [-Wgnu-folding-constant] > unsigned short raw[ip6size]; > ^ > > ... not sure what to do with that one yet.
Fix it? =) Same class as: https://gitlab.freedesktop.org/slirp/libslirp/-/commit/6690d55626cc -- >8 -- diff --git a/lib/libnet/ipv6.c b/lib/libnet/ipv6.c index 6420004..b7daeda 100644 --- a/lib/libnet/ipv6.c +++ b/lib/libnet/ipv6.c @@ -441,10 +441,9 @@ static unsigned short ip6_checksum(struct ip6hdr *ip6h, unsigned char *packet, { int i; unsigned long checksum; - const int ip6size = sizeof(struct ip6hdr)/sizeof(unsigned short); union { struct ip6hdr ip6h; - unsigned short raw[ip6size]; + unsigned short raw[sizeof(struct ip6hdr) / sizeof(unsigned short)]; } pseudo; memcpy (&pseudo.ip6h, ip6h, sizeof(struct ip6hdr)); @@ -455,7 +454,7 @@ static unsigned short ip6_checksum(struct ip6hdr *ip6h, unsigned char *packet, for (checksum = 0, i = 0; i < bytes; i += 2) checksum += (packet[i] << 8) | packet[i + 1]; - for (i = 0; i < ip6size; i++) + for (i = 0; i < sizeof(pseudo.raw); i++) checksum += pseudo.raw[i]; checksum = (checksum >> 16) + (checksum & 0xffff); --- Do you want me to send the fix since I have it ready?
