//===--------- lib/ReaderWriter/ELF/ARM/ARMSymbolTable.h ------------------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLD_READER_WRITER_ELF_ARM_ARM_SYMBOL_TABLE_H #define LLD_READER_WRITER_ELF_ARM_ARM_SYMBOL_TABLE_H namespace lld { namespace elf { /// \brief The SymbolTable class represents the symbol table in a ELF file template class ARMSymbolTable : public SymbolTable { public: typedef llvm::object::Elf_Sym_Impl Elf_Sym; ARMSymbolTable(const ELFLinkingContext &context); void addDefinedAtom(Elf_Sym &sym, const DefinedAtom *da, int64_t addr) override; }; template ARMSymbolTable::ARMSymbolTable(const ELFLinkingContext &context) : SymbolTable(context, ".symtab", DefaultLayout::ORDER_SYMBOL_TABLE) {} template void ARMSymbolTable::addDefinedAtom(Elf_Sym &sym, const DefinedAtom *da, int64_t addr) { SymbolTable::addDefinedAtom(sym, da, addr); // Set zero bit to distinguish symbols addressing Thumb instructions if (DefinedAtom::codeARMThumb == da->codeModel()) sym.st_value = static_cast(sym.st_value) | 0x1; } } // elf } // lld #endif // LLD_READER_WRITER_ELF_ARM_ARM_SYMBOL_TABLE_H