[lld] r263366 - Cosmetic change to reduce repetitions. NFC.
Adhemerval Zanella via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 14 06:35:43 PDT 2016
I am getting linking failures after this patch trying to build lld:
[...]
../../../../lib/liblldELF.a(Target.cpp.o): In function `lld::elf::(anonymous namespace)::AArch64TargetInfo::relaxTls(unsigned char*, unsigned char*, unsigned int, unsigned long, unsigned long, lld::elf::SymbolBody const&) const':
Target.cpp:(.text._ZNK3lld3elf12_GLOBAL__N_117AArch64TargetInfo8relaxTlsEPhS3_jmmRKNS0_10SymbolBodyE+0x6c): undefined reference to `lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t lld::elf::SymbolBody::getVA<llvm::object::ELFType<(llvm::support::endianness)1, true> >(lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t) const'
Target.cpp:(.text._ZNK3lld3elf12_GLOBAL__N_117AArch64TargetInfo8relaxTlsEPhS3_jmmRKNS0_10SymbolBodyE+0xb0): undefined reference to `lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t lld::elf::SymbolBody::getVA<llvm::object::ELFType<(llvm::support::endianness)1, true> >(lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t) const'
[...]
It is because Symbols.cpp.o now provides:
[...]
.text._ZNK3lld3elf10SymbolBody5getVAIN4llvm6object7ELFTypeILNS3_7support10endiannessE1ELb1EEEEENS4_7ELFFileIT_E7uintX_tESC_ 0000000000000180 llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t lld::elf::SymbolBody::getVA<llvm::object::ELFType<(llvm::support::endianness)1, true> >(llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t) const
0000000000000000 w F .text._ZNK3lld3elf10SymbolBody5getVAIN4llvm6object7ELFTypeILNS3_7support10endiannessE0ELb1EEEEENS4_7ELFFileIT_E7uintX_tESC_ 00000000000001a0 llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)0, true> >::uintX_t lld::elf::SymbolBody::getVA<llvm::object::ELFType<(llvm::support::endianness)0, true> >(llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)0, true> >::uintX_t) const
[...]
And it translate to:
llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t lld::elf::SymbolBody::getVA<llvm::object::ELFType<(llvm::support::endianness)1, true> >(llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t) const
Where all the usage inside lld are expecting:
lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t lld::elf::SymbolBody::getVA<llvm::object::ELFType<(llvm::support::endianness)1, true> >(lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t) const
The different is the namespace binding, which with this patch changes the return
type from 'lld::elf::SymbolBody::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t'
to 'llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1, true> >::uintX_t'.
I think it would be better to just revert it.
On 13-03-2016 01:40, Rui Ueyama via llvm-commits wrote:
> Author: ruiu
> Date: Sat Mar 12 22:40:17 2016
> New Revision: 263366
>
> URL: http://llvm.org/viewvc/llvm-project?rev=263366&view=rev
> Log:
> Cosmetic change to reduce repetitions. NFC.
>
> Modified:
> lld/trunk/ELF/Symbols.h
>
> Modified: lld/trunk/ELF/Symbols.h
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.h?rev=263366&r1=263365&r2=263366&view=diff
> ==============================================================================
> --- lld/trunk/ELF/Symbols.h (original)
> +++ lld/trunk/ELF/Symbols.h Sat Mar 12 22:40:17 2016
> @@ -46,6 +46,8 @@ struct Symbol {
>
> // The base class for real symbol classes.
> class SymbolBody {
> + template <class ELFT> using ELFFile = llvm::object::ELFFile<ELFT>;
> +
> public:
> enum Kind {
> DefinedFirst,
> @@ -90,17 +92,13 @@ public:
> bool isInGot() const { return GotIndex != -1U; }
> bool isInPlt() const { return PltIndex != -1U; }
>
> - template <class ELFT>
> - typename llvm::object::ELFFile<ELFT>::uintX_t
> - getVA(typename llvm::object::ELFFile<ELFT>::uintX_t Addend = 0) const;
> - template <class ELFT>
> - typename llvm::object::ELFFile<ELFT>::uintX_t getGotVA() const;
> - template <class ELFT>
> - typename llvm::object::ELFFile<ELFT>::uintX_t getGotPltVA() const;
> - template <class ELFT>
> - typename llvm::object::ELFFile<ELFT>::uintX_t getPltVA() const;
> - template <class ELFT>
> - typename llvm::object::ELFFile<ELFT>::uintX_t getSize() const;
> + template <class ELFT> typename ELFFile<ELFT>::uintX_t
> + getVA(typename ELFFile<ELFT>::uintX_t Addend = 0) const;
> +
> + template <class ELFT> typename ELFFile<ELFT>::uintX_t getGotVA() const;
> + template <class ELFT> typename ELFFile<ELFT>::uintX_t getGotPltVA() const;
> + template <class ELFT> typename ELFFile<ELFT>::uintX_t getPltVA() const;
> + template <class ELFT> typename ELFFile<ELFT>::uintX_t getSize() const;
>
> // A SymbolBody has a backreference to a Symbol. Originally they are
> // doubly-linked. A backreference will never change. But the pointer
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list