aboutsummaryrefslogtreecommitdiff
path: root/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h')
-rw-r--r--lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h62
1 files changed, 25 insertions, 37 deletions
diff --git a/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h b/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
index e2d3193045b7..84415b273f44 100644
--- a/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
+++ b/lib/ReaderWriter/ELF/Hexagon/HexagonDynamicLibraryWriter.h
@@ -10,67 +10,55 @@
#define HEXAGON_DYNAMIC_LIBRARY_WRITER_H
#include "DynamicLibraryWriter.h"
-#include "HexagonExecutableAtoms.h"
#include "HexagonLinkingContext.h"
namespace lld {
namespace elf {
-template <typename ELFT> class HexagonTargetLayout;
+class HexagonTargetLayout;
-template <class ELFT>
-class HexagonDynamicLibraryWriter : public DynamicLibraryWriter<ELFT>,
- public HexagonELFWriter<ELFT> {
+class HexagonDynamicLibraryWriter : public DynamicLibraryWriter<ELF32LE> {
public:
- HexagonDynamicLibraryWriter(HexagonLinkingContext &context,
- HexagonTargetLayout<ELFT> &layout);
+ HexagonDynamicLibraryWriter(HexagonLinkingContext &ctx,
+ HexagonTargetLayout &layout);
protected:
// Add any runtime files and their atoms to the output
- virtual bool createImplicitFiles(std::vector<std::unique_ptr<File>> &);
+ void createImplicitFiles(std::vector<std::unique_ptr<File>> &) override;
- virtual void finalizeDefaultAtomValues();
+ void finalizeDefaultAtomValues() override;
- virtual std::error_code setELFHeader() {
- DynamicLibraryWriter<ELFT>::setELFHeader();
- HexagonELFWriter<ELFT>::setELFHeader(*this->_elfHeader);
+ std::error_code setELFHeader() override {
+ DynamicLibraryWriter::setELFHeader();
+ setHexagonELFHeader(*_elfHeader);
return std::error_code();
}
private:
- void addDefaultAtoms() {
- _hexagonRuntimeFile->addAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");
- _hexagonRuntimeFile->addAbsoluteAtom("_DYNAMIC");
- }
-
- HexagonLinkingContext &_hexagonLinkingContext;
- HexagonTargetLayout<ELFT> &_hexagonTargetLayout;
- std::unique_ptr<HexagonRuntimeFile<ELFT>> _hexagonRuntimeFile;
+ HexagonLinkingContext &_ctx;
+ HexagonTargetLayout &_targetLayout;
};
-template <class ELFT>
-HexagonDynamicLibraryWriter<ELFT>::HexagonDynamicLibraryWriter(
- HexagonLinkingContext &context, HexagonTargetLayout<ELFT> &layout)
- : DynamicLibraryWriter<ELFT>(context, layout),
- HexagonELFWriter<ELFT>(context, layout), _hexagonLinkingContext(context),
- _hexagonTargetLayout(layout),
- _hexagonRuntimeFile(new HexagonRuntimeFile<ELFT>(context)) {}
+HexagonDynamicLibraryWriter::HexagonDynamicLibraryWriter(
+ HexagonLinkingContext &ctx, HexagonTargetLayout &layout)
+ : DynamicLibraryWriter(ctx, layout), _ctx(ctx), _targetLayout(layout) {}
-template <class ELFT>
-bool HexagonDynamicLibraryWriter<ELFT>::createImplicitFiles(
+void HexagonDynamicLibraryWriter::createImplicitFiles(
std::vector<std::unique_ptr<File>> &result) {
- DynamicLibraryWriter<ELFT>::createImplicitFiles(result);
+ DynamicLibraryWriter::createImplicitFiles(result);
// Add the default atoms as defined for hexagon
- addDefaultAtoms();
- result.push_back(std::move(_hexagonRuntimeFile));
- return true;
+ 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));
}
-template <class ELFT>
-void HexagonDynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues() {
+void HexagonDynamicLibraryWriter::finalizeDefaultAtomValues() {
// Finalize the atom values that are part of the parent.
- DynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues();
- HexagonELFWriter<ELFT>::finalizeHexagonRuntimeAtomValues();
+ DynamicLibraryWriter::finalizeDefaultAtomValues();
+ if (_ctx.isDynamic())
+ finalizeHexagonRuntimeAtomValues(_targetLayout);
}
} // namespace elf