[llvm-dev] Linking android with lld: aarch64 target

Peter Smith via llvm-dev llvm-dev at lists.llvm.org
Tue Apr 4 08:08:45 PDT 2017


Hello Min,

I've put a comment in the pr. I personally think lld is correct in
issuing the error message. The symbol causing the problem is
preemptible which prevents the relocation from being resolved at
static link-time. I think the source file needs to use .hidden
OPENSSL_armcap_P

ld.bfd seems to be ok with resolving the relocation statically even
though OPENSSL_armcap_P could be preempted.

Peter

On 4 April 2017 at 06:49, Minseong Kim <minseong.kim at linaro.org> wrote:
> Thank you~
>
> I filed a bug report following your suggestion:
>
> https://bugs.llvm.org/show_bug.cgi?id=32518
>
> cheers,
> -- Min
>
> On 1 April 2017 at 07:04, Sean Silva <chisophugis at gmail.com> wrote:
>>
>>
>>
>> On Fri, Mar 24, 2017 at 12:18 AM, Minseong Kim via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>>>
>>> On 23 March 2017 at 21:35, Peter Smith <peter.smith at linaro.org> wrote:
>>>>
>>>> Hello Min,
>>>>
>>>> This error message occurs when the linker would have to create a
>>>> dynamic relocation in a read-only part of the program, which isn't
>>>> usually allowed when making a position independent shared-library or
>>>> position independent executable. In practice this usually means that
>>>> one or more of the objects hasn't been compiled to be position
>>>> independent -fPIC.
>>>
>>>
>>> OK~ I will check the objects to be linked, if they are compiled (with
>>> -fPIC or not).
>>>
>>>> It is difficult to tell much more without knowing the compiler and
>>>> linker options. The R_AARCH64_PREL64 relocation is a relative
>>>> relocation, this can require a dynamic relocation if the symbol it
>>>> refers to is preemptible (i.e another definition of the symbol could
>>>> potentially override it at load-time).
>>>>
>>>> Given that the file sha1-armv8.S is an assembler file, and I assume
>>>> that the link with the same inputs works on ld.bfd and ld.gold, I can
>>>> only think that it will either be lld is selecting a different object,
>>>> or ld.bfd and ld.gold are resolving the R_AARCH64_PREL64 relocation in
>>>> this case and lld is not.
>>>
>>>
>>> Yes, both ld.bfd and ld.gold works with the same inputs. I will keep
>>> looking for the cause with your suggestions in mind.
>>
>>
>> If you can run the LLD link with `--reproduce repro.tar` and then
>> uploading repro.tar somewhere, it will be easier for us to take a look at it
>> (e.g. file a bug in llvm's bugzilla).
>>
>> -- Sean Silva
>>
>>>
>>>
>>> Thanks again, Peter.
>>>
>>> cheers,
>>> -- Min
>>>
>>>>
>>>> Peter
>>>>
>>>> On 23 March 2017 at 04:29, Minseong Kim via llvm-dev
>>>> <llvm-dev at lists.llvm.org> wrote:
>>>> > It would be great if anyone can share your thoughts about the cause
>>>> > and
>>>> > possibly fix of the error below ?
>>>> >
>>>> > I would like to know why it is caused and how it can be fixed (if
>>>> > possible)
>>>> > ?
>>>> >
>>>> > The error message is:
>>>> >
>>>> > ~/llvm/build/install_android/linux-x86/clang-3688880/bin/ld.lld:
>>>> > error:
>>>> > external/boringssl/linux-aarch64/crypto/sha/sha1-armv8.S:1202: can't
>>>> > create
>>>> > dynamic relocation R_AARCH64_PREL64 against symbol 'OPENSSL_armcap_P'
>>>> > defined in
>>>> >
>>>> > out/target/product/hikey/obj/STATIC_LIBRARIES/libcrypto_intermediates/libcrypto.a(sha1-armv8.o)
>>>> > clang-5.0: error: linker command failed with exit code 1 (use -v to
>>>> > see
>>>> > invocation)
>>>> >
>>>> > cheers,
>>>> > -- Min
>>>> >
>>>> >
>>>> > _______________________________________________
>>>> > LLVM Developers mailing list
>>>> > llvm-dev at lists.llvm.org
>>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>> >
>>>
>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>
>>
>


More information about the llvm-dev mailing list