bunzip2: fix code bloat caused by zcat's seamless magic
authorKang-Che Sung <explorer09@gmail.com>
Sun, 8 Jan 2017 13:31:06 +0000 (14:31 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 8 Jan 2017 13:31:06 +0000 (14:31 +0100)
This example single-applet configuration would trigger the bloat:

    CONFIG_FEATURE_SEAMLESS_XZ=y
    CONFIG_FEATURE_SEAMLESS_LZMA=y
    CONFIG_FEATURE_SEAMLESS_BZ2=y
    CONFIG_FEATURE_SEAMLESS_GZ=y
    CONFIG_BUNZIP2=y
    # CONFIG_ZCAT is not set
    # All other applets disabled

Here, the resulting "busybox-bunzip2" binary would contain
unpack_gz_stream, unpack_lzma_stream and unpack_xz_stream functions
code. In other words, the gzip, lzma and xz decompressors' code are
linked into the binary unnecessarily.

This happens because SEAMLESS_MAGIC != 0 and compiler is unable
to figure out that SEAMLESS_MAGIC bit is never set.

Fix this by disabling SEAMLESS_MAGIC option flag (setting its value
to 0) when zcat is disabled. This will help the compiler optimize out
bbunpack() and no longer generate open_zipped() function call.

Signed-off-by: Kang-Che Sung <explorer09@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
archival/bbunzip.c

index 60a837e2262d6cc10c2fea3700b1be583cd06ca9..0eff5871333fe65d1e032987f025c7f5314218ce 100644 (file)
@@ -25,7 +25,7 @@ enum {
        OPT_QUIET      = 1 << 3,
        OPT_DECOMPRESS = 1 << 4,
        OPT_TEST       = 1 << 5,
-       SEAMLESS_MAGIC = (1 << 31) * SEAMLESS_COMPRESSION,
+       SEAMLESS_MAGIC = (1 << 31) * ENABLE_ZCAT * SEAMLESS_COMPRESSION,
 };
 
 static