From 4aa9d34b3d8495404d91c18743438671be1a6168 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 21 Sep 2023 11:20:13 +0100 Subject: [PATCH] Add attributes for sanitize_memory and sanitize_thread --- src/build_settings.cpp | 31 ++++++++++++++++++++++++++++++- src/llvm_backend_proc.cpp | 6 ++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 08e591a3a..8f495e3c4 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -1747,11 +1747,40 @@ gb_internal bool init_build_paths(String init_filename) { return false; } + if (build_context.sanitizer_flags & SanitizerFlag_Address) { + switch (build_context.metrics.os) { + case TargetOs_windows: + case TargetOs_linux: + case TargetOs_darwin: + break; + default: + gb_printf_err("-sanitize:memory is only supported on windows, linux, and darwin\n"); + return false; + } + } + if (build_context.sanitizer_flags & SanitizerFlag_Memory) { - if (build_context.metrics.os != TargetOs_linux) { + switch (build_context.metrics.os) { + case TargetOs_linux: + break; + default: gb_printf_err("-sanitize:memory is only supported on linux\n"); return false; } + if (build_context.metrics.os != TargetOs_linux) { + return false; + } + } + + if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + switch (build_context.metrics.os) { + case TargetOs_linux: + case TargetOs_darwin: + break; + default: + gb_printf_err("-sanitize:thread is only supported on linux and darwin\n"); + return false; + } } diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index f86e008a9..4be0ebf9b 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -321,6 +321,12 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i if (build_context.sanitizer_flags & SanitizerFlag_Address) { lb_add_attribute_to_proc(m, p->value, "sanitize_address"); } + if (build_context.sanitizer_flags & SanitizerFlag_Memory) { + lb_add_attribute_to_proc(m, p->value, "sanitize_memory"); + } + if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + lb_add_attribute_to_proc(m, p->value, "sanitize_thread"); + } } lbValue proc_value = {p->value, p->type};