[lld] r205391 - [ELF] Add -z muldefs option.
Rui Ueyama
ruiu at google.com
Tue Apr 1 22:56:41 PDT 2014
On Tue, Apr 1, 2014 at 10:06 PM, Shankar Easwaran
<shankare at codeaurora.org>wrote:
> On 4/1/2014 11:54 PM, Rui Ueyama wrote:
>
>> On Tue, Apr 1, 2014 at 9:40 PM, Shankar Easwaran <shankare at codeaurora.org
>> >wrote:
>>
>> 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.
>>>
>>
>> Well, that's not true because I learned the use of -r from other test
>> files
>> having .objtxt extension in the same directory.
>>
> Ah!, Thanks for pointing that. The vast majority use noinhibit-exec though.
>
> Below are the stats from the test/elf directory.
>
> $find . -type f | xargs grep -w 'noinhibit-exec' | wc -l
> 90
> $find . -type f | xargs grep -w '\-r' | grep lld | wc -l
> 6
>
> Not sure if it was a shortcut chosen to make sure unresolved symbols are
> accepted and not displayed to the user.
>
> If you want to use -r back, let me know, I will not have any issues to go
> back and revert to use -r.
--noinhibit-exec is okay as long as it's working. It might be a good thing
to have some mix of -r and --noinbhit-exec because by doing that we have
broader test coverage.
>
>
> Thanks
>
> Shankar Easwaran
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by the Linux Foundation
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140401/8ada2232/attachment.html>
More information about the llvm-commits
mailing list