68 lines
2.1 KiB
C++
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
|