[Libguestfs] [nbdkit] [filter/nozero] large binary size with GCC 9
Thomas Weißschuh
thomas at weissschuh.net
Fri Jul 5 13:21:08 UTC 2019
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
More information about the Libguestfs
mailing list