blob: 40ac53d068c21f83e24f38158a6ed9e1d9625504 [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
10#include "lld/ReaderWriter/PECOFFTargetInfo.h"
11
Rui Ueyamad95a1552013-06-17 16:59:54 +000012#include "lld/Core/PassManager.h"
13#include "lld/Passes/LayoutPass.h"
Rui Ueyama9e568392013-05-28 18:13:31 +000014#include "lld/ReaderWriter/Reader.h"
15#include "lld/ReaderWriter/Writer.h"
16
17#include "llvm/Support/Debug.h"
18
19namespace 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 {
62 pm.add(std::unique_ptr<Pass>(new LayoutPass()));
63}
64
Rui Ueyama9e568392013-05-28 18:13:31 +000065} // end namespace lld