blob: 94bf1103256ceda3b89051c0d8022f6ba1d4532b [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 Ueyama9e568392013-05-28 18:13:31 +000011
Rui Ueyamad95a1552013-06-17 16:59:54 +000012#include "lld/Core/PassManager.h"
13#include "lld/Passes/LayoutPass.h"
Rui Ueyama991f42c2013-06-19 17:46:57 +000014#include "lld/ReaderWriter/PECOFFTargetInfo.h"
Rui Ueyama9e568392013-05-28 18:13:31 +000015#include "lld/ReaderWriter/Reader.h"
16#include "lld/ReaderWriter/Writer.h"
17
Rui Ueyama9e568392013-05-28 18:13:31 +000018namespace lld {
19
20error_code PECOFFTargetInfo::parseFile(
21 std::unique_ptr<MemoryBuffer> &mb,
22 std::vector<std::unique_ptr<File>> &result) const {
23 return _reader->parseFile(mb, result);
24}
25
Rafael Espindolac1b32682013-06-11 12:36:05 +000026bool PECOFFTargetInfo::validateImpl(raw_ostream &diagnostics) {
Rui Ueyamaeb0cc962013-06-08 03:59:00 +000027 if (_stackReserve < _stackCommit) {
28 diagnostics << "Invalid stack size: reserve size must be equal to or "
29 << "greater than commit size, but got "
30 << _stackCommit << " and " << _stackReserve << ".\n";
31 return true;
32 }
33
Rui Ueyama9dd08d92013-06-08 22:59:10 +000034 if (_heapReserve < _heapCommit) {
35 diagnostics << "Invalid heap size: reserve size must be equal to or "
36 << "greater than commit size, but got "
37 << _heapCommit << " and " << _heapReserve << ".\n";
38 return true;
39 }
40
Rui Ueyama9e568392013-05-28 18:13:31 +000041 _reader = createReaderPECOFF(*this);
42 _writer = createWriterPECOFF(*this);
43 return false;
44}
45
46Writer &PECOFFTargetInfo::writer() const {
47 return *_writer;
48}
49
50ErrorOr<Reference::Kind>
51PECOFFTargetInfo::relocKindFromString(StringRef str) const {
52 return make_error_code(yaml_reader_error::illegal_value);
53}
54
55ErrorOr<std::string>
56PECOFFTargetInfo::stringFromRelocKind(Reference::Kind kind) const {
57 return make_error_code(yaml_reader_error::illegal_value);
58}
59
Rui Ueyamad95a1552013-06-17 16:59:54 +000060void PECOFFTargetInfo::addPasses(PassManager &pm) const {
Rui Ueyama991f42c2013-06-19 17:46:57 +000061 pm.add(std::unique_ptr<Pass>(new pecoff::GroupedSectionsPass()));
Rui Ueyamad95a1552013-06-17 16:59:54 +000062 pm.add(std::unique_ptr<Pass>(new LayoutPass()));
63}
64
Rui Ueyama9e568392013-05-28 18:13:31 +000065} // end namespace lld