| Index: src/llvm2ice.cpp
|
| diff --git a/src/llvm2ice.cpp b/src/llvm2ice.cpp
|
| index 935cb640aac642d280839d79a4f519d97cbadc58..af80ef9dc88fd52b3077b64fbbbc03cbca4e7e5a 100644
|
| --- a/src/llvm2ice.cpp
|
| +++ b/src/llvm2ice.cpp
|
| @@ -184,18 +184,13 @@ static cl::opt<bool> LLVMVerboseErrors(
|
| "building LLVM IR first"),
|
| cl::init(false));
|
|
|
| -static cl::opt<bool>
|
| - UseIntegratedAssembler("integrated-as",
|
| - cl::desc("Use integrated assembler (default yes)"),
|
| - cl::init(true));
|
| -
|
| -static cl::alias UseIas("ias", cl::desc("Alias for -integrated-as"),
|
| - cl::NotHidden, cl::aliasopt(UseIntegratedAssembler));
|
| -
|
| -static cl::opt<bool>
|
| - UseELFWriter("elf-writer",
|
| - cl::desc("Use ELF writer with the integrated assembler"),
|
| - cl::init(false));
|
| +static cl::opt<Ice::FileType> OutFileType(
|
| + "filetype", cl::desc("Output file type"), cl::init(Ice::FT_Iasm),
|
| + cl::values(clEnumValN(Ice::FT_Elf, "obj", "Native ELF object ('.o') file"),
|
| + clEnumValN(Ice::FT_Asm, "asm", "Assembly ('.s') file"),
|
| + clEnumValN(Ice::FT_Iasm, "iasm",
|
| + "Low-level integrated assembly ('.s') file"),
|
| + clEnumValEnd));
|
|
|
| static cl::opt<bool> AlwaysExitSuccess(
|
| "exit-success", cl::desc("Exit with success status, even if errors found"),
|
| @@ -317,10 +312,9 @@ int main(int argc, char **argv) {
|
| Flags.setTimeEachFunction(TimeEachFunction);
|
| Flags.setTimingFocusOn(TimingFocusOn);
|
| Flags.setTranslateOnly(TranslateOnly);
|
| - Flags.setUseELFWriter(UseELFWriter);
|
| - Flags.setUseIntegratedAssembler(UseIntegratedAssembler);
|
| Flags.setUseSandboxing(UseSandboxing);
|
| Flags.setVerboseFocusOn(VerboseFocusOn);
|
| + Flags.setOutFileType(OutFileType);
|
|
|
| // Force -build-on-read=0 for .ll files.
|
| const std::string LLSuffix = ".ll";
|
| @@ -334,7 +328,8 @@ int main(int argc, char **argv) {
|
| std::unique_ptr<Ice::Ostream> Os;
|
| std::unique_ptr<Ice::ELFStreamer> ELFStr;
|
| std::ofstream Ofs;
|
| - if (UseELFWriter) {
|
| + switch (OutFileType) {
|
| + case Ice::FT_Elf: {
|
| if (OutputFilename == "-") {
|
| *Ls << "Error: writing binary ELF to stdout is unsupported\n";
|
| return GetReturnValue(Ice::EC_Args);
|
| @@ -349,7 +344,9 @@ int main(int argc, char **argv) {
|
| return GetReturnValue(Ice::EC_Args);
|
| }
|
| ELFStr.reset(new Ice::ELFStreamer(*FdOs));
|
| - } else {
|
| + } break;
|
| + case Ice::FT_Asm:
|
| + case Ice::FT_Iasm: {
|
| if (OutputFilename != "-") {
|
| Ofs.open(OutputFilename.c_str(), std::ofstream::out);
|
| Os.reset(new raw_os_ostream(Ofs));
|
| @@ -357,6 +354,7 @@ int main(int argc, char **argv) {
|
| Os.reset(new raw_os_ostream(std::cout));
|
| }
|
| Os->SetUnbuffered();
|
| + } break;
|
| }
|
|
|
| Ice::GlobalContext Ctx(Ls.get(), Os.get(), ELFStr.get(), VMask, TargetArch,
|
| @@ -364,7 +362,7 @@ int main(int argc, char **argv) {
|
|
|
| Ice::TimerMarker T(Ice::TimerStack::TT_szmain, &Ctx);
|
|
|
| - if (UseELFWriter) {
|
| + if (OutFileType == Ice::FT_Elf) {
|
| Ice::TimerMarker T1(Ice::TimerStack::TT_emit, &Ctx);
|
| Ctx.getObjectWriter()->writeInitialELFHeader();
|
| }
|
| @@ -403,7 +401,7 @@ int main(int argc, char **argv) {
|
| Translator->transferErrorCode();
|
| Translator->emitConstants();
|
|
|
| - if (UseELFWriter) {
|
| + if (OutFileType == Ice::FT_Elf) {
|
| Ice::TimerMarker T1(Ice::TimerStack::TT_emit, &Ctx);
|
| Ctx.getObjectWriter()->setUndefinedSyms(Ctx.getConstantExternSyms());
|
| Ctx.getObjectWriter()->writeNonUserSections();
|
|
|