[lld] r205391 - [ELF] Add -z muldefs option.
Shankar Easwaran
shankare at codeaurora.org
Tue Apr 1 21:40:14 PDT 2014
On 4/1/2014 11:30 PM, Rui Ueyama wrote:
> On Tue, Apr 1, 2014 at 9:17 PM, Shankar Easwaran <shankare at codeaurora.org>wrote:
>
>> On 4/1/2014 11:12 PM, Rui Ueyama wrote:
>>
>>> On Tue, Apr 1, 2014 at 8:57 PM, Shankar Easwaran <shankarke at gmail.com
>>>> wrote:
>>> Author: shankare
>>>> Date: Tue Apr 1 22:57:37 2014
>>>> New Revision: 205391
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=205391&view=rev
>>>> Log:
>>>> [ELF] Add -z muldefs option.
>>>>
>>>> This adds -z muldefs option which is widely used over
>>>> --allow-multiple-definition.
>>>>
>>>> This option is supported by the GNU linker.
>>>>
>>>> Modified:
>>>> lld/trunk/lib/Driver/GnuLdDriver.cpp
>>>> lld/trunk/test/elf/allowduplicates.objtxt
>>>>
>>>> Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/
>>>> GnuLdDriver.cpp?rev=205391&r1=205390&r2=205391&view=diff
>>>>
>>>> ============================================================
>>>> ==================
>>>> --- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
>>>> +++ lld/trunk/lib/Driver/GnuLdDriver.cpp Tue Apr 1 22:57:37 2014
>>>> @@ -440,6 +440,16 @@ bool GnuLdDriver::parse(int argc, const
>>>> groupStack.pop();
>>>> break;
>>>>
>>>> + case OPT_z: {
>>>> + StringRef extOpt = inputArg->getValue();
>>>> + if (extOpt == "muldefs")
>>>> + ctx->setAllowDuplicates(true);
>>>> + else
>>>> + diagnostics << "warning: ignoring unknown argument for -z: " <<
>>>> extOpt
>>>> + << "\n";
>>>> + break;
>>>> + }
>>>> +
>>>> case OPT_INPUT:
>>>> case OPT_l: {
>>>> bool isDashlPrefix = (inputArg->getOption().getID() == OPT_l);
>>>>
>>>> Modified: lld/trunk/test/elf/allowduplicates.objtxt
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/
>>>> allowduplicates.objtxt?rev=205391&r1=205390&r2=205391&view=diff
>>>>
>>>> ============================================================
>>>> ==================
>>>> --- lld/trunk/test/elf/allowduplicates.objtxt (original)
>>>> +++ lld/trunk/test/elf/allowduplicates.objtxt Tue Apr 1 22:57:37 2014
>>>> @@ -1,8 +1,11 @@
>>>> -# RUN: lld -flavor gnu -target x86_64 --allow-multiple-definition -r %s
>>>> \
>>>> -# RUN: --output-filetype=yaml | FileCheck %s
>>>> +# RUN: lld -flavor gnu -target x86_64 --allow-multiple-definition %s \
>>>> +# RUN: --output-filetype=yaml --noinhibit-exec | FileCheck %s
>>>> #
>>>> -# RUN: not lld -flavor gnu -target x86_64 -r %s --output-filetype=yaml
>>>> 2>&1 \
>>>> -# RUN: | FileCheck -check-prefix=ERROR %s
>>>> +# RUN: not lld -flavor gnu -target x86_64 %s --output-filetype=yaml \
>>>> +# RUN: --noinhibit-exec 2>&1 | FileCheck -check-prefix=ERROR %s
>>>> +#
>>>> +# RUN: lld -flavor gnu -target x86_64 -z muldefs %s \
>>>> +# RUN: --noinhibit-exec --output-filetype=yaml | FileCheck %s
>>>>
>>>> Why do you now need --noinhibit-exec?
>> The testcase previously used -r, which is not supported (or) not
>> implemented at this time.
>>
>> --noinhibit-exec tries to keep the executable even if there is an
>> undefined symbol, which in this case corresponds to _start undefined.
>
> -r was intentional -- although ELF writer does not support writing it, YAML
> writer does. It was slightly better than --noinhibit-exec because it did
> not warn on unresolved symbols unlike --noinhibit-exec.
>
You might already know, The -r option is not handled by YAML writer.
The GnuLdDriver handles this and sets appropriate flags when -r option
is seen in the LinkingContext, and nothing else is done with it, since
you bypass the writer to the output yaml writer.
With gnu, we consistently use --noinhibit-exec for all tests, and I
would prefer to stay consistent with all tests.
Thanks
Shankar Easwaran
-- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by the Linux Foundation
More information about the llvm-commits
mailing list