authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-08-10 17:33:51-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-09-19 09:37:30-07:00
logd123c70d5f18110420cd208a8a8891e41ecc2a94
tree529dc4c4acac804ec6a42985539274be4e4a6c5d
parent68a338cc1037531b4ba548a4c181afeb957fab9a

clang patch: update main function


1 files changed, 16 insertions(+), 9 deletions(-)

src/zig_clang_driver.cpp+16-9
...@@ -210,9 +210,6 @@ extern int cc1_main(ArrayRef<const char *> Argv, const char *Argv0,...@@ -210,9 +210,6 @@ extern int cc1_main(ArrayRef<const char *> Argv, const char *Argv0,
210 void *MainAddr);210 void *MainAddr);
211extern int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0,211extern int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0,
212 void *MainAddr);212 void *MainAddr);
213extern int cc1gen_reproducer_main(ArrayRef<const char *> Argv,
214 const char *Argv0, void *MainAddr,
215 const llvm::ToolContext &);
216213
217static void insertTargetAndModeArgs(const ParsedClangName &NameParts,214static void insertTargetAndModeArgs(const ParsedClangName &NameParts,
218 SmallVectorImpl<const char *> &ArgVector,215 SmallVectorImpl<const char *> &ArgVector,
...@@ -366,22 +363,27 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV,...@@ -366,22 +363,27 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV,
366 return cc1_main(ArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP);363 return cc1_main(ArrayRef(ArgV).slice(1), ArgV[0], GetExecutablePathVP);
367 if (Tool == "-cc1as")364 if (Tool == "-cc1as")
368 return cc1as_main(ArrayRef(ArgV).slice(2), ArgV[0], GetExecutablePathVP);365 return cc1as_main(ArrayRef(ArgV).slice(2), ArgV[0], GetExecutablePathVP);
369 if (Tool == "-cc1gen-reproducer")
370 return cc1gen_reproducer_main(ArrayRef(ArgV).slice(2), ArgV[0],
371 GetExecutablePathVP, ToolContext);
372 // Reject unknown tools.366 // Reject unknown tools.
373 llvm::errs() << "error: unknown integrated tool '" << Tool << "'. "367 llvm::errs() << "error: unknown integrated tool '" << Tool << "'. "
374 << "Valid tools include '-cc1' and '-cc1as'.\n";368 << "Valid tools include '-cc1' and '-cc1as'.\n";
375 return 1;369 return 1;
376}370}
377371
378int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {372static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {
379 noteBottomOfStack();373 noteBottomOfStack();
380 llvm::InitLLVM X(Argc, Argv);374 // ZIG PATCH: On Windows, InitLLVM calls GetCommandLineW(),
375 // and overwrites the args. We don't want it to do that,
376 // and we also don't need the signal handlers it installs
377 // (we have our own already), so we just use llvm_shutdown_obj
378 // instead.
379 // llvm::InitLLVM X(Argc, Argv);
380 llvm::llvm_shutdown_obj X;
381
381 llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL382 llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL
382 " and include the crash backtrace, preprocessed "383 " and include the crash backtrace, preprocessed "
383 "source, and associated run script.\n");384 "source, and associated run script.\n");
384 SmallVector<const char *, 256> Args(Argv, Argv + Argc);385 size_t argv_offset = (strcmp(Argv[1], "-cc1") == 0 || strcmp(Argv[1], "-cc1as") == 0) ? 0 : 1;
386 SmallVector<const char *, 256> Args(Argv + argv_offset, Argv + Argc);
385387
386 if (llvm::sys::Process::FixupStandardFileDescriptors())388 if (llvm::sys::Process::FixupStandardFileDescriptors())
387 return 1;389 return 1;
...@@ -603,3 +605,8 @@ int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {...@@ -603,3 +605,8 @@ int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContext) {
603 // failing command.605 // failing command.
604 return Res;606 return Res;
605}607}
608
609extern "C" int ZigClang_main(int, char **);
610int ZigClang_main(int argc, char **argv) {
611 return clang_main(argc, argv, {argv[0], nullptr, false});
612}