On Fri, 2019-07-05T08:04-0500, Eric Blake wrote:
On 7/4/19 1:38 PM, Thomas Weißschuh wrote:
> In filter/nozero a 64M large, static, zeroed, read-only array is declared.
> The new behavior of GCC puts this array as-is into the binary inflating the
> size by a factor of around 10000.
Odd that you are only seeing this for the nozero filter, since we also
have the same sort of buffer in server/plugins.c. Oh, I see a
difference between the two - one is function-local, the other is
file-local. Does this patch make a difference? (I need to fire up a
rawhide VM to test it myself...) If it doesn't, then removing the
'const' seems like the easiest trick to work around this compiler
pessimization (yes, I can see why the compiler writers argued that
sticking things in .rodata adds a bit more security against errant code
accidentally trying to corrupt the buffer; but as the buffer shouldn't
be escaping, it's already undefined behavior for such code to happen).
It actually also happens for server/plugins.c.
I assumed that filter/nozero got somehow statically linked into the server
(which does not really make sense), so it would have been the same instance of
the problem. Then I forgot to confirm this afterwards.
diff --git i/filters/nozero/nozero.c w/filters/nozero/nozero.c
index 16ec710b..21863707 100644
--- i/filters/nozero/nozero.c
+++ w/filters/nozero/nozero.c
...
Nope, same thing.
Thomas