|
From: | Thomas Huth |
Subject: | Re: s390-ccw: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] |
Date: | Thu, 22 Apr 2021 06:47:30 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 |
On 22/04/2021 06.18, Philippe Mathieu-Daudé wrote:
Hi Thomas, Daniel, Stefano, Regarding the following warning (GCC 11 on Fedora 34): In file included from pc-bios/s390-ccw/main.c:11: In function ‘memset’, inlined from ‘boot_setup’ at pc-bios/s390-ccw/main.c:185:5, inlined from ‘main’ at pc-bios/s390-ccw/main.c:288:5: pc-bios/s390-ccw/libc.h:28:14: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] 28 | p[i] = c; | ~~~~~^~~ Daniel were right on IRC: danpb: it is from a call memset((char *)S390EP, 0, 6) where S390EP is just a constant address 0x10008 danpb: the compiler doesn't now how big that is, so it seems to assume it is zero length This is a known GCC issue: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578 "gcc-11 -Warray-bounds or -Wstringop-overread warning when accessing a pointer from integer literal"
Hi Philippe, thanks for following up with the gcc bugzilla!... so the problem is that GCC thinks we're in fact dereferencing a NULL pointer at offset 0x10008 here? Wow, that's ... crazy.
Not sure what to do now - wait for the bug to get resolved? Compile the s390-ccw bios with -Wno-stringop-overread ? Add "volatiles" here and there to hope that these silence the compiler warnings? ... I tend to wait for the bug ticket to see whether the GCC folks change the behavior of the compiler again, but I'm open for other suggestions.
Thomas
[Prev in Thread] | Current Thread | [Next in Thread] |