authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-03 14:01:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-03 14:01:32-07:00
log60954598e9de71defb9ab07cef35a17082151d36
tree2e1facc8fc7ecb506121d6b5cc6c6b10efc3db41
parent3479294b6e7cae323f2e2f05dbc173e2b1a4b9e1

apply zig patches to clang and llvm tools


2 files changed, 25 insertions(+), 11 deletions(-)

src/zig_clang_driver.cpp+15-9
...@@ -207,8 +207,6 @@ extern int cc1_main(ArrayRef<const char *> Argv, const char *Argv0,...@@ -207,8 +207,6 @@ extern int cc1_main(ArrayRef<const char *> Argv, const char *Argv0,
207 void *MainAddr);207 void *MainAddr);
208extern int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0,208extern int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0,
209 void *MainAddr);209 void *MainAddr);
210extern int cc1gen_reproducer_main(ArrayRef<const char *> Argv,
211 const char *Argv0, void *MainAddr);
212210
213static void insertTargetAndModeArgs(const ParsedClangName &NameParts,211static void insertTargetAndModeArgs(const ParsedClangName &NameParts,
214 SmallVectorImpl<const char *> &ArgVector,212 SmallVectorImpl<const char *> &ArgVector,
...@@ -318,22 +316,28 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV) {...@@ -318,22 +316,28 @@ static int ExecuteCC1Tool(SmallVectorImpl<const char *> &ArgV) {
318 if (Tool == "-cc1as")316 if (Tool == "-cc1as")
319 return cc1as_main(makeArrayRef(ArgV).slice(2), ArgV[0],317 return cc1as_main(makeArrayRef(ArgV).slice(2), ArgV[0],
320 GetExecutablePathVP);318 GetExecutablePathVP);
321 if (Tool == "-cc1gen-reproducer")
322 return cc1gen_reproducer_main(makeArrayRef(ArgV).slice(2), ArgV[0],
323 GetExecutablePathVP);
324 // Reject unknown tools.319 // Reject unknown tools.
325 llvm::errs() << "error: unknown integrated tool '" << Tool << "'. "320 llvm::errs() << "error: unknown integrated tool '" << Tool << "'. "
326 << "Valid tools include '-cc1' and '-cc1as'.\n";321 << "Valid tools include '-cc1' and '-cc1as'.\n";
327 return 1;322 return 1;
328}323}
329324
330int main(int Argc, const char **Argv) {325extern "C" int ZigClang_main(int Argc, const char **Argv);
326int ZigClang_main(int Argc, const char **Argv) {
331 noteBottomOfStack();327 noteBottomOfStack();
332 llvm::InitLLVM X(Argc, Argv);328 // ZIG PATCH: On Windows, InitLLVM calls GetCommandLineW(),
329 // and overwrites the args. We don't want it to do that,
330 // and we also don't need the signal handlers it installs
331 // (we have our own already), so we just use llvm_shutdown_obj
332 // instead.
333 // llvm::InitLLVM X(Argc, Argv);
334 llvm::llvm_shutdown_obj X;
335
333 llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL336 llvm::setBugReportMsg("PLEASE submit a bug report to " BUG_REPORT_URL
334 " and include the crash backtrace, preprocessed "337 " and include the crash backtrace, preprocessed "
335 "source, and associated run script.\n");338 "source, and associated run script.\n");
336 SmallVector<const char *, 256> Args(Argv, Argv + Argc);339 size_t argv_offset = (strcmp(Argv[1], "-cc1") == 0 || strcmp(Argv[1], "-cc1as") == 0) ? 0 : 1;
340 SmallVector<const char *, 256> Args(Argv + argv_offset, Argv + Argc);
337341
338 if (llvm::sys::Process::FixupStandardFileDescriptors())342 if (llvm::sys::Process::FixupStandardFileDescriptors())
339 return 1;343 return 1;
...@@ -432,7 +436,9 @@ int main(int Argc, const char **Argv) {...@@ -432,7 +436,9 @@ int main(int Argc, const char **Argv) {
432 ApplyQAOverride(Args, OverrideStr, SavedStrings);436 ApplyQAOverride(Args, OverrideStr, SavedStrings);
433 }437 }
434438
435 std::string Path = GetExecutablePath(Args[0], CanonicalPrefixes);439 // Pass local param `Argv[0]` as fallback.
440 // See https://github.com/ziglang/zig/pull/3292 .
441 std::string Path = GetExecutablePath(Argv[0], CanonicalPrefixes);
436442
437 // Whether the cc1 tool should be called inside the current process, or if we443 // Whether the cc1 tool should be called inside the current process, or if we
438 // should spawn a new clang subprocess (old behavior).444 // should spawn a new clang subprocess (old behavior).
src/zig_llvm-ar.cpp+10-2
...@@ -1274,8 +1274,16 @@ static int ranlib_main(int argc, char **argv) {...@@ -1274,8 +1274,16 @@ static int ranlib_main(int argc, char **argv) {
1274 return performOperation(CreateSymTab, nullptr);1274 return performOperation(CreateSymTab, nullptr);
1275}1275}
12761276
1277int main(int argc, char **argv) {1277extern "C" int ZigLlvmAr_main(int argc, char **argv);
1278 InitLLVM X(argc, argv);1278int ZigLlvmAr_main(int argc, char **argv) {
1279 // ZIG PATCH: On Windows, InitLLVM calls GetCommandLineW(),
1280 // and overwrites the args. We don't want it to do that,
1281 // and we also don't need the signal handlers it installs
1282 // (we have our own already), so we just use llvm_shutdown_obj
1283 // instead.
1284 // InitLLVM X(argc, argv);
1285 llvm::llvm_shutdown_obj X;
1286
1279 ToolName = argv[0];1287 ToolName = argv[0];
12801288
1281 llvm::InitializeAllTargetInfos();1289 llvm::InitializeAllTargetInfos();