aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-09-21 09:40:33 +0100
committergingerBill <bill@gingerbill.org>2023-09-21 09:40:33 +0100
commit2160484b62ebde52ba6f486ad652f1a72cfe9143 (patch)
tree07faa7a8ece3962d504853c70400717dd04130d7 /src/llvm_backend.cpp
parentf0ab58dfbb4be6103fb7340ec570d218e2137a4b (diff)
Support `-sanitize:<string>` for `address`, `memory`, `thread` for LLVM 17
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 8ced9ccee..68223d8c9 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1478,12 +1478,28 @@ gb_internal WORKER_TASK_PROC(lb_llvm_module_pass_worker_proc) {
passes = gb_string_appendc(passes, "default<O0>");
break;
case 1:
- passes = gb_string_appendc(passes, "default<O1>");
+ passes = gb_string_appendc(passes, "default<Os>");
break;
case 2:
passes = gb_string_appendc(passes, "default<O2>");
break;
}
+
+ // asan - Linux, Darwin, Windows
+ // msan - linux
+ // tsan - Linux, Darwin
+ // ubsan - Linux, Darwin, Windows (NOT SUPPORTED WITH LLVM C-API)
+
+ if (build_context.sanitizer_flags & SanitizerFlag_Address) {
+ passes = gb_string_appendc(passes, ",asan");
+ }
+ if (build_context.sanitizer_flags & SanitizerFlag_Memory) {
+ passes = gb_string_appendc(passes, ",msan");
+ }
+ if (build_context.sanitizer_flags & SanitizerFlag_Thread) {
+ passes = gb_string_appendc(passes, ",tsan");
+ }
+
LLVMErrorRef llvm_err = LLVMRunPasses(wd->m->mod, passes, wd->target_machine, pb_options);
defer (LLVMConsumeError(llvm_err));
if (llvm_err != nullptr) {