]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/linker-script-test/linker-script-test.cpp
Vendor import of lld trunk r233088:
[FreeBSD/FreeBSD.git] / tools / linker-script-test / linker-script-test.cpp
1 //===- utils/linker-script-test/linker-script-test.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 /// \file
11 /// \brief Tool for testing linker script parsing.
12 ///
13 //===----------------------------------------------------------------------===//
14
15 #include "lld/ReaderWriter/LinkerScript.h"
16
17 #include "llvm/Support/PrettyStackTrace.h"
18 #include "llvm/Support/Signals.h"
19
20 using namespace llvm;
21 using namespace lld;
22 using namespace script;
23
24 int main(int argc, const char **argv) {
25   llvm::sys::PrintStackTraceOnErrorSignal();
26   llvm::PrettyStackTraceProgram X(argc, argv);
27
28   {
29     ErrorOr<std::unique_ptr<MemoryBuffer>> mb =
30         MemoryBuffer::getFileOrSTDIN(argv[1]);
31     if (std::error_code ec = mb.getError()) {
32       llvm::errs() << ec.message() << "\n";
33       return 1;
34     }
35     Lexer l(std::move(mb.get()));
36     Token tok;
37     while (true) {
38       l.lex(tok);
39       tok.dump(llvm::outs());
40       if (tok._kind == Token::eof || tok._kind == Token::unknown)
41         break;
42     }
43   }
44   {
45     ErrorOr<std::unique_ptr<MemoryBuffer>> mb =
46         MemoryBuffer::getFileOrSTDIN(argv[1]);
47     if (std::error_code ec = mb.getError()) {
48       llvm::errs() << ec.message() << "\n";
49       return 1;
50     }
51     Parser p(std::move(mb.get()));
52     if (!p.parse()) {
53       LinkerScript *ls = p.get();
54       ls->dump(llvm::outs());
55     }
56   }
57 }