llvm-project/lld/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
Rui Ueyama cfeb2512fd ELF: Remove ELFT template argument when referring the base class.
We don't need to repeat the template argument. They are not
ambiguous. MIPS is parameterized for ELFT, so we can't do this
for MIPS, though.

llvm-svn: 234913
2015-04-14 17:32:13 +00:00

68 lines
2.1 KiB
C++

//===- lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h ---------===//
//
// The LLVM Linker
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef HEXAGON_DYNAMIC_LIBRARY_WRITER_H
#define HEXAGON_DYNAMIC_LIBRARY_WRITER_H
#include "DynamicLibraryWriter.h"
#include "HexagonLinkingContext.h"
namespace lld {
namespace elf {
class HexagonTargetLayout;
class HexagonDynamicLibraryWriter : public DynamicLibraryWriter<ELF32LE> {
public:
HexagonDynamicLibraryWriter(HexagonLinkingContext &ctx,
HexagonTargetLayout &layout);
protected:
// Add any runtime files and their atoms to the output
void createImplicitFiles(std::vector<std::unique_ptr<File>> &) override;
void finalizeDefaultAtomValues() override;
std::error_code setELFHeader() override {
DynamicLibraryWriter::setELFHeader();
setHexagonELFHeader(*_elfHeader);
return std::error_code();
}
private:
HexagonLinkingContext &_ctx;
HexagonTargetLayout &_targetLayout;
};
HexagonDynamicLibraryWriter::HexagonDynamicLibraryWriter(
HexagonLinkingContext &ctx, HexagonTargetLayout &layout)
: DynamicLibraryWriter(ctx, layout), _ctx(ctx), _targetLayout(layout) {}
void HexagonDynamicLibraryWriter::createImplicitFiles(
std::vector<std::unique_ptr<File>> &result) {
DynamicLibraryWriter::createImplicitFiles(result);
// Add the default atoms as defined for hexagon
auto file =
llvm::make_unique<RuntimeFile<ELF32LE>>(_ctx, "Hexagon runtime file");
file->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
file->addAbsoluteAtom("_DYNAMIC");
result.push_back(std::move(file));
}
void HexagonDynamicLibraryWriter::finalizeDefaultAtomValues() {
// Finalize the atom values that are part of the parent.
DynamicLibraryWriter::finalizeDefaultAtomValues();
if (_ctx.isDynamic())
finalizeHexagonRuntimeAtomValues(_targetLayout);
}
} // namespace elf
} // namespace lld
#endif // HEXAGON_DYNAMIC_LIBRARY_WRITER_H