summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/tools/lld-core/lld-core.cpp41
1 files changed, 39 insertions, 2 deletions
diff --git a/lld/tools/lld-core/lld-core.cpp b/lld/tools/lld-core/lld-core.cpp
index 37e69cdca47..8d390676db3 100644
--- a/lld/tools/lld-core/lld-core.cpp
+++ b/lld/tools/lld-core/lld-core.cpp
@@ -14,6 +14,9 @@
#include "lld/ReaderWriter/Reader.h"
#include "lld/ReaderWriter/ReaderNative.h"
#include "lld/ReaderWriter/ReaderYAML.h"
+#include "lld/ReaderWriter/ReaderELF.h"
+#include "lld/ReaderWriter/ReaderPECOFF.h"
+#include "lld/ReaderWriter/ReaderMachO.h"
#include "lld/ReaderWriter/Writer.h"
#include "lld/ReaderWriter/WriterELF.h"
#include "lld/ReaderWriter/WriterMachO.h"
@@ -97,6 +100,19 @@ writeSelected("writer",
clEnumValN(writePECOFF, "PECOFF", "link as windows would"),
clEnumValN(writeELF, "ELF", "link as linux would"),
clEnumValEnd));
+
+enum ReaderChoice {
+ readerYAML, readerMachO, readerPECOFF, readerELF
+};
+llvm::cl::opt<ReaderChoice>
+readerSelected("reader",
+ llvm::cl::desc("Select reader"),
+ llvm::cl::values(
+ clEnumValN(readerYAML, "YAML", "read assuming YAML format"),
+ clEnumValN(readerMachO, "mach-o", "read as darwin would"),
+ clEnumValN(readerPECOFF, "PECOFF", "read as windows would"),
+ clEnumValN(readerELF, "ELF", "read as linux would"),
+ clEnumValEnd));
@@ -156,15 +172,36 @@ int main(int argc, char *argv[]) {
InputFiles inputFiles;
// read input files into in-memory File objects
+
TestingReaderOptionsYAML readerOptionsYAML;
- Reader *reader = createReaderYAML(readerOptionsYAML);
+ Reader *reader = nullptr;
+ switch ( readerSelected ) {
+ case readerYAML:
+ reader = createReaderYAML(readerOptionsYAML);
+ break;
+#if 0
+ case readerMachO:
+ reader = createReaderMachO(lld::readerOptionsMachO);
+ break;
+#endif
+ case readerPECOFF:
+ reader = createReaderPECOFF(lld::ReaderOptionsPECOFF());
+ break;
+ case readerELF:
+ reader = createReaderELF(lld::ReaderOptionsELF());
+ break;
+ default:
+ reader = createReaderYAML(readerOptionsYAML);
+ break;
+ }
+
for (auto path : cmdLineInputFilePaths) {
std::vector<std::unique_ptr<File>> files;
if ( error(reader->readFile(path, files)) )
return 1;
inputFiles.appendFiles(files);
}
-
+
// given writer a chance to add files
writer->addFiles(inputFiles);
OpenPOWER on IntegriCloud