From f6358c75eb393ae579aace88a1152f39b2a924f4 Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Sun, 19 Dec 2004 18:00:56 +0000 Subject: [PATCH] For PR351: * Support changes in sys::Program::ExecuteAndWait interface git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19044 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/gccld/GenerateCode.cpp | 30 ++++++++++++++++-------------- tools/llvm-ld/llvm-ld.cpp | 30 ++++++++++++++++-------------- tools/llvmc/CompilerDriver.cpp | 21 +++++++++++++-------- tools/llvmc/CompilerDriver.h | 6 +++--- 4 files changed, 48 insertions(+), 39 deletions(-) diff --git a/tools/gccld/GenerateCode.cpp b/tools/gccld/GenerateCode.cpp index 773ef4962ec..b189d0654f5 100644 --- a/tools/gccld/GenerateCode.cpp +++ b/tools/gccld/GenerateCode.cpp @@ -242,13 +242,13 @@ int llvm::GenerateAssembly(const std::string &OutputFilename, const std::string &InputFilename, const sys::Path &llc) { // Run LLC to convert the bytecode file into assembly code. - std::vector args; + std::vector args; args.push_back("-f"); args.push_back("-o"); - args.push_back(OutputFilename); - args.push_back(InputFilename); + args.push_back(OutputFilename.c_str()); + args.push_back(InputFilename.c_str()); - return sys::Program::ExecuteAndWait(llc, args); + return sys::Program::ExecuteAndWait(llc, &args[0]); } /// GenerateAssembly - generates a native assembly language source file from the @@ -257,13 +257,13 @@ int llvm::GenerateCFile(const std::string &OutputFile, const std::string &InputFile, const sys::Path &llc ) { // Run LLC to convert the bytecode file into C. - std::vector args; + std::vector args; args.push_back("-march=c"); args.push_back("-f"); args.push_back("-o"); - args.push_back(OutputFile); - args.push_back(InputFile); - return sys::Program::ExecuteAndWait(llc, args); + args.push_back(OutputFile.c_str()); + args.push_back(InputFile.c_str()); + return sys::Program::ExecuteAndWait(llc, &args[0]); } /// GenerateNative - generates a native assembly language source file from the @@ -308,20 +308,22 @@ int llvm::GenerateNative(const std::string &OutputFilename, // We can't just assemble and link the file with the system assembler // and linker because we don't know where to put the _start symbol. // GCC mysteriously knows how to do it. - std::vector args; + std::vector args; args.push_back("-fno-strict-aliasing"); args.push_back("-O3"); args.push_back("-o"); - args.push_back(OutputFilename); - args.push_back(InputFilename); + args.push_back(OutputFilename.c_str()); + args.push_back(InputFilename.c_str()); // Add in the libraries to link. for (unsigned index = 0; index < Libraries.size(); index++) { - if (Libraries[index] != "crtend") - args.push_back("-l" + Libraries[index]); + if (Libraries[index] != "crtend") { + args.push_back("-l"); + args.push_back(Libraries[index].c_str()); + } } // Run the compiler to assembly and link together the program. - return sys::Program::ExecuteAndWait(gcc, args, (const char**)clean_env); + return sys::Program::ExecuteAndWait(gcc, &args[0], (const char**)clean_env); } diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp index 2a7b535cfa4..c85a6be0498 100644 --- a/tools/llvm-ld/llvm-ld.cpp +++ b/tools/llvm-ld/llvm-ld.cpp @@ -218,13 +218,13 @@ static int GenerateAssembly(const std::string &OutputFilename, const std::string &InputFilename, const sys::Path &llc) { // Run LLC to convert the bytecode file into assembly code. - std::vector args; + std::vector args; args.push_back( "-f"); args.push_back( "-o"); - args.push_back( OutputFilename); - args.push_back( InputFilename); + args.push_back( OutputFilename.c_str() ); + args.push_back( InputFilename.c_str() ); - return sys::Program::ExecuteAndWait(llc,args); + return sys::Program::ExecuteAndWait(llc,&args[0]); } /// GenerateAssembly - generates a native assembly language source file from the @@ -233,13 +233,13 @@ static int GenerateCFile(const std::string &OutputFile, const std::string &InputFile, const sys::Path &llc) { // Run LLC to convert the bytecode file into C. - std::vector args; + std::vector args; args.push_back( "-march=c"); args.push_back( "-f"); args.push_back( "-o"); - args.push_back( OutputFile); - args.push_back( InputFile); - return sys::Program::ExecuteAndWait(llc, args); + args.push_back( OutputFile.c_str() ); + args.push_back( InputFile.c_str() ); + return sys::Program::ExecuteAndWait(llc, &args[0]); } /// GenerateNative - generates a native assembly language source file from the @@ -285,20 +285,22 @@ static int GenerateNative(const std::string &OutputFilename, // We can't just assemble and link the file with the system assembler // and linker because we don't know where to put the _start symbol. // GCC mysteriously knows how to do it. - std::vector args; + std::vector args; args.push_back("-fno-strict-aliasing"); args.push_back("-O3"); args.push_back("-o"); - args.push_back(OutputFilename); - args.push_back(InputFilename); + args.push_back(OutputFilename.c_str()); + args.push_back(InputFilename.c_str()); // Add in the libraries to link. for (unsigned index = 0; index < Libraries.size(); index++) - if (Libraries[index] != "crtend") - args.push_back("-l" + Libraries[index]); + if (Libraries[index] != "crtend") { + args.push_back("-l"); + args.push_back(Libraries[index].c_str()); + } // Run the compiler to assembly and link together the program. - return sys::Program::ExecuteAndWait(gcc, args, (const char**)clean_env); + return sys::Program::ExecuteAndWait(gcc, &args[0], (const char**)clean_env); } /// EmitShellScript - Output the wrapper file that invokes the JIT on the LLVM diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp index 91402d4d0e7..f0f686886b8 100644 --- a/tools/llvmc/CompilerDriver.cpp +++ b/tools/llvmc/CompilerDriver.cpp @@ -28,9 +28,9 @@ namespace { void WriteAction(CompilerDriver::Action* action ) { std::cerr << action->program.c_str(); - std::vector::iterator I = action->args.begin(); + std::vector::const_iterator I = action->args.begin(); while (I != action->args.end()) { - std::cerr << " " + *I; + std::cerr << " " << *I; ++I; } std::cerr << "\n"; @@ -38,9 +38,9 @@ void WriteAction(CompilerDriver::Action* action ) { void DumpAction(CompilerDriver::Action* action) { std::cerr << "command = " << action->program.c_str(); - std::vector::iterator I = action->args.begin(); + std::vector::const_iterator I = action->args.begin(); while (I != action->args.end()) { - std::cerr << " " + *I; + std::cerr << " " << *I; ++I; } std::cerr << "\n"; @@ -392,18 +392,23 @@ private: "' is not executable."); // Invoke the program + const char** Args = (const char**) + alloca(sizeof(const char*)*action->args.size()); + for (unsigned i = 0; i != action->args.size(); ++i) { + Args[i] = action->args[i].c_str(); + } if (isSet(TIME_ACTIONS_FLAG)) { Timer timer(action->program.toString()); timer.startTimer(); int resultCode = - sys::Program::ExecuteAndWait(action->program,action->args); + sys::Program::ExecuteAndWait(action->program,Args); timer.stopTimer(); timer.print(timer,std::cerr); return resultCode == 0; } else return 0 == - sys::Program::ExecuteAndWait(action->program, action->args); + sys::Program::ExecuteAndWait(action->program, Args); } return true; } @@ -560,7 +565,7 @@ public: /// PRE-PROCESSING / TRANSLATION / OPTIMIZATION / ASSEMBLY phases // for each input item SetVector LinkageItems; - std::vector LibFiles; + StringVector LibFiles; InputList::const_iterator I = InpList.begin(); for (InputList::const_iterator I = InpList.begin(), E = InpList.end(); I != E; ++I ) { @@ -817,7 +822,7 @@ public: link->args.push_back(I->toString()); // Add in all the libraries we found. - for (std::vector::const_iterator I=LibFiles.begin(), + for (StringVector::const_iterator I=LibFiles.begin(), E=LibFiles.end(); I != E; ++I ) link->args.push_back(std::string("-l")+*I); diff --git a/tools/llvmc/CompilerDriver.h b/tools/llvmc/CompilerDriver.h index b748e772c87..bcd3a016d38 100644 --- a/tools/llvmc/CompilerDriver.h +++ b/tools/llvmc/CompilerDriver.h @@ -81,9 +81,9 @@ namespace llvm { /// language. struct Action { Action() : flags(0) {} - sys::Path program; ///< The program to execve - StringVector args; ///< Arguments to the program - unsigned flags; ///< Action specific flags + sys::Path program; ///< The program to execve + StringVector args; ///< Arguments to the program + unsigned flags; ///< Action specific flags void set(unsigned fl ) { flags |= fl; } void clear(unsigned fl) { flags &= (FLAGS_MASK ^ fl); } bool isSet(unsigned fl) { return (flags&fl) != 0; }