[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