[PATCH] tar: Fix build error when CONFIG_UNCOMPRESS is not selected

Michael Tokarev mjt at tls.msk.ru
Wed Jul 1 17:26:41 UTC 2015


01.07.2015 19:55, Denys Vlasenko wrote:
> Rob Landley has an opposite view: preprocessor #if's are evil.
> 
> I agree with him that they do tend to obfuscate.

So what's the solution to this?  Blame compilers and force them to
act like GCC does?

Thanks,

/mjt

> On Sun, Jun 28, 2015 at 9:44 AM, Michael Tokarev <mjt at tls.msk.ru> wrote:
>> [Rehashing a thread from 3 years ago]
>>
>> 28.01.2013 11:48, Denys Vlasenko wrote:
>>> On Monday 28 January 2013 00:17, Abdoulaye Walsimou GAYE wrote:
>>
>>>>>>> diff --git a/archival/libarchive/Kbuild.src b/archival/libarchive/Kbuild.src
>>>>>>> index 58457fc..87e1ab9 100644
>>>>>>> --- a/archival/libarchive/Kbuild.src
>>>>>>> +++ b/archival/libarchive/Kbuild.src
>>>>>>> -lib-$(CONFIG_TAR)                       += get_header_tar.o
>>>>>>> +lib-$(CONFIG_TAR)                       += get_header_tar.o decompress_uncompress.o
>>>>
>>>> /home/walsimou/embtoolkit.git/build/packages_build-mipsel-linux-mips32/busybox-1.20.2/archival/tar.c:1065: undefined reference to `unpack_Z_stream'
>>>> /home/walsimou/embtoolkit.git/build/packages_build-mipsel-linux-mips32/busybox-1.20.2/archival/tar.c:1065: undefined reference to `unpack_Z_stream'
>>>> /home/walsimou/embtoolkit.git/tools-mipsel-linux-mips32/bin/mipsisa32el-unknown-linux-uclibc-ld: busybox_unstripped: hidden symbol `unpack_Z_stream' isn't defined
>>>> /home/walsimou/embtoolkit.git/tools-mipsel-linux-mips32/bin/mipsisa32el-unknown-linux-uclibc-ld: final link failed: Bad value
>>>> mipsisa32el-unknown-linux-uclibc-clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>>
>>>
>>> I was able to build busybox-1.20.2 with this .config
>>> without errors.
>>>
>>> Looks like your compiler did not optimize this out:
>>>
>>>                 if (opt & OPT_COMPRESS)
>>>                         USE_FOR_MMU(xformer = unpack_Z_stream;)
>>>                         USE_FOR_NOMMU(xformer_prog = "uncompress";)
>>>
>>>
>>> even though OPT_COMPRESS is a constant zero.
>>
>> The same prob exists with clang, apparently,  Here's a bugreport
>> filed against debian package of busybox: http://bugs.debian.org/789499 .
>> The proposed fix is to apply the above patch only if building
>> with clang :)
>>
>> Basically, I'm not sure relying on dead code elimination like this is
>> a good idea.  I mean, the code is eliminated, there's no if() statement
>> in the generated code, so it is okay, but it looks like clang still
>> records symbols referenced in the eliminated code.  Sometimes it
>> is actually a good idea to keep ref symbols, eg when you build an
>> executable which can load modules, so that modules will use symbols
>> in that executable.
>>
>> Thanks,
>>
>> /mjt
>>



More information about the busybox mailing list