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
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.
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.
Peter
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.
Thanks again, Peter.
cheers,
-- Min
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
Thank you~
I filed a bug report following your suggestion:
https://bugs.llvm.org/show_bug.cgi?id=32518
cheers,
– Min
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