blob: 4b182346d8a63dcb170ce674eabb9944a8bdfe07 [file] [log] [blame]
Rui Ueyama9e568392013-05-28 18:13:31 +00001//===- lib/ReaderWriter/PECOFF/PECOFFTargetInfo.cpp -----------------------===//
2//
3// The LLVM Linker
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Rui Ueyama991f42c2013-06-19 17:46:57 +000010#include "GroupedSectionsPass.h"
Rui Ueyamac8a53792013-07-11 08:46:21 +000011#include "IdataPass.h"
Rui Ueyama9e568392013-05-28 18:13:31 +000012
Rui Ueyamad95a1552013-06-17 16:59:54 +000013#include "lld/Core/PassManager.h"
14#include "lld/Passes/LayoutPass.h"
Rui Ueyama991f42c2013-06-19 17:46:57 +000015#include "lld/ReaderWriter/PECOFFTargetInfo.h"
Rui Ueyama9e568392013-05-28 18:13:31 +000016#include "lld/ReaderWriter/Reader.h"
17#include "lld/ReaderWriter/Writer.h"
18
Rui Ueyama9e568392013-05-28 18:13:31 +000019namespace lld {
20
21error_code PECOFFTargetInfo::parseFile(
22 std::unique_ptr<MemoryBuffer> &mb,
23 std::vector<std::unique_ptr<File>> &result) const {
24 return _reader->parseFile(mb, result);
25}
26
Rafael Espindolac1b32682013-06-11 12:36:05 +000027bool PECOFFTargetInfo::validateImpl(raw_ostream &diagnostics) {
Rui Ueyamaeb0cc962013-06-08 03:59:00 +000028 if (_stackReserve < _stackCommit) {
29 diagnostics << "Invalid stack size: reserve size must be equal to or "
30 << "greater than commit size, but got "
31 << _stackCommit << " and " << _stackReserve << ".\n";
32 return true;
33 }
34
Rui Ueyama9dd08d92013-06-08 22:59:10 +000035 if (_heapReserve < _heapCommit) {
36 diagnostics << "Invalid heap size: reserve size must be equal to or "
37 << "greater than commit size, but got "
38 << _heapCommit << " and " << _heapReserve << ".\n";
39 return true;
40 }
41
Rui Ueyama9e568392013-05-28 18:13:31 +000042 _reader = createReaderPECOFF(*this);
43 _writer = createWriterPECOFF(*this);
44 return false;
45}
46
47Writer &PECOFFTargetInfo::writer() const {
48 return *_writer;
49}
50
51ErrorOr<Reference::Kind>
52PECOFFTargetInfo::relocKindFromString(StringRef str) const {
53 return make_error_code(yaml_reader_error::illegal_value);
54}
55
56ErrorOr<std::string>
57PECOFFTargetInfo::stringFromRelocKind(Reference::Kind kind) const {
58 return make_error_code(yaml_reader_error::illegal_value);
59}
60
Rui Ueyamad95a1552013-06-17 16:59:54 +000061void PECOFFTargetInfo::addPasses(PassManager &pm) const {
Rui Ueyama991f42c2013-06-19 17:46:57 +000062 pm.add(std::unique_ptr<Pass>(new pecoff::GroupedSectionsPass()));
Rui Ueyamac8a53792013-07-11 08:46:21 +000063 pm.add(std::unique_ptr<Pass>(new pecoff::IdataPass()));
Rui Ueyamad95a1552013-06-17 16:59:54 +000064 pm.add(std::unique_ptr<Pass>(new LayoutPass()));
65}
66
Rui Ueyama9e568392013-05-28 18:13:31 +000067} // end namespace lld