Index: Support/Windows/Path.inc =================================================================== --- Support/Windows/Path.inc +++ Support/Windows/Path.inc @@ -63,7 +63,7 @@ namespace sys { namespace path { -// Convert a (likely) UTF-8 path to UTF-16. Also, if the absolute equivalent of the +// Convert a UTF-8 path to UTF-16. Also, if the absolute equivalent of the // path is longer than CreateDirectory can tolerate, make it absolute and // prefixed by '\\?\'. std::error_code widenPath(const Twine &Path8, @@ -72,7 +72,7 @@ // Several operations would convert Path8 to SmallString; more efficient to // do it once up front. - SmallString<2*MAX_PATH> Path8Str; + SmallString<128> Path8Str; Path8.toVector(Path8Str); // If we made this path absolute, how much longer would it get? @@ -112,17 +112,11 @@ else llvm::sys::path::append(FullPath, *I); } - Path8Str = FullPath; + return UTF8ToUTF16(FullPath, Path16); } - // Path8Str now contains the full path or the original path - // If the conversion from UTF8 to UTF16 fails because of ERROR_NO_UNICODE_TRANSLATION, - // we also try using the current code page before giving up - auto ec = UTF8ToUTF16(Path8Str, Path16); - if (ec == mapWindowsError(ERROR_NO_UNICODE_TRANSLATION)) { - ec = CurCPToUTF16(Path8Str, Path16); - } - return ec; + // Just use the caller's original path. + return UTF8ToUTF16(Path8Str, Path16); } } // end namespace path Index: llvm-mc/llvm-mc.cpp =================================================================== --- llvm-mc/llvm-mc.cpp +++ llvm-mc/llvm-mc.cpp @@ -34,6 +34,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Process.h" #include "llvm/Support/Signals.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/TargetRegistry.h" @@ -213,7 +214,7 @@ } static std::string DwarfDebugFlags; -static void setDwarfDebugFlags(int argc, char **argv) { +static void setDwarfDebugFlags(int argc, const char **argv) { if (!getenv("RC_DEBUG_OPTIONS")) return; for (int i = 0; i < argc; i++) { @@ -293,11 +294,21 @@ return Res; } -int main(int argc, char **argv) { +static ExitOnError ExitOnErr; + +int main(int argc_, const char **argv_) { // Print a stack trace if we signal out. - sys::PrintStackTraceOnErrorSignal(argv[0]); - PrettyStackTraceProgram X(argc, argv); - llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. + sys::PrintStackTraceOnErrorSignal(argv_[0]); + PrettyStackTraceProgram X(argc_, argv_); + + ExitOnErr.setBanner("llvm-mc: "); + + SmallVector argv; + SpecificBumpPtrAllocator ArgAllocator; + ExitOnErr(errorCodeToError(sys::Process::GetArgumentVector( + argv, makeArrayRef(argv_, argc_), ArgAllocator))); + + llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. // Initialize targets and assembly printers/parsers. llvm::InitializeAllTargetInfos(); @@ -308,10 +319,10 @@ // Register the target printer for --version. cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion); - cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n"); + cl::ParseCommandLineOptions(argv.size(), argv.data(), "llvm machine code playground\n"); MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); TripleName = Triple::normalize(TripleName); - setDwarfDebugFlags(argc, argv); + setDwarfDebugFlags(argv.size(), argv.data()); setDwarfDebugProducer(); Index: llvm-objdump/llvm-objdump.cpp =================================================================== --- llvm-objdump/llvm-objdump.cpp +++ llvm-objdump/llvm-objdump.cpp @@ -54,6 +54,7 @@ #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Process.h" #include "llvm/Support/Signals.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/TargetRegistry.h" @@ -2178,11 +2179,21 @@ report_error(file, object_error::invalid_file_type); } -int main(int argc, char **argv) { +static ExitOnError ExitOnErr; + +int main(int argc_, const char **argv_) { // Print a stack trace if we signal out. - sys::PrintStackTraceOnErrorSignal(argv[0]); - PrettyStackTraceProgram X(argc, argv); - llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. + sys::PrintStackTraceOnErrorSignal(argv_[0]); + PrettyStackTraceProgram X(argc_, argv_); + + ExitOnErr.setBanner("llvm-objdump: "); + + SmallVector argv; + SpecificBumpPtrAllocator ArgAllocator; + ExitOnErr(errorCodeToError(sys::Process::GetArgumentVector( + argv, makeArrayRef(argv_, argc_), ArgAllocator))); + + llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. // Initialize targets and assembly printers/parsers. llvm::InitializeAllTargetInfos(); @@ -2192,7 +2203,7 @@ // Register the target printer for --version. cl::AddExtraVersionPrinter(TargetRegistry::printRegisteredTargetsForVersion); - cl::ParseCommandLineOptions(argc, argv, "llvm object file dumper\n"); + cl::ParseCommandLineOptions(argv.size(), argv.data(), "llvm object file dumper\n"); TripleName = Triple::normalize(TripleName); ToolName = argv[0];