[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