|
@@ -3425,36 +3425,48 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
|
|
|
|
|
|
|
|
|
|
if (build_context.sanitizer_flags & SanitizerFlag_Address) {
|
|
if (build_context.sanitizer_flags & SanitizerFlag_Address) {
|
|
- if (build_context.metrics.os == TargetOs_windows) {
|
|
|
|
|
|
+ switch (build_context.metrics.os) {
|
|
|
|
+ case TargetOs_windows: {
|
|
auto paths = array_make<String>(heap_allocator(), 0, 1);
|
|
auto paths = array_make<String>(heap_allocator(), 0, 1);
|
|
String path = concatenate_strings(permanent_allocator(), build_context.ODIN_ROOT, str_lit("\\bin\\llvm\\windows\\clang_rt.asan-x86_64.lib"));
|
|
String path = concatenate_strings(permanent_allocator(), build_context.ODIN_ROOT, str_lit("\\bin\\llvm\\windows\\clang_rt.asan-x86_64.lib"));
|
|
array_add(&paths, path);
|
|
array_add(&paths, path);
|
|
Entity *lib = alloc_entity_library_name(nullptr, make_token_ident("asan_lib"), nullptr, slice_from_array(paths), str_lit("asan_lib"));
|
|
Entity *lib = alloc_entity_library_name(nullptr, make_token_ident("asan_lib"), nullptr, slice_from_array(paths), str_lit("asan_lib"));
|
|
array_add(&gen->foreign_libraries, lib);
|
|
array_add(&gen->foreign_libraries, lib);
|
|
- } else if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) {
|
|
|
|
|
|
+ } break;
|
|
|
|
+ case TargetOs_darwin:
|
|
|
|
+ case TargetOs_linux:
|
|
|
|
+ case TargetOs_freebsd:
|
|
if (!build_context.extra_linker_flags.text) {
|
|
if (!build_context.extra_linker_flags.text) {
|
|
build_context.extra_linker_flags = str_lit("-fsanitize=address");
|
|
build_context.extra_linker_flags = str_lit("-fsanitize=address");
|
|
} else {
|
|
} else {
|
|
build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=address"));
|
|
build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=address"));
|
|
}
|
|
}
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (build_context.sanitizer_flags & SanitizerFlag_Memory) {
|
|
if (build_context.sanitizer_flags & SanitizerFlag_Memory) {
|
|
- if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) {
|
|
|
|
|
|
+ switch (build_context.metrics.os) {
|
|
|
|
+ case TargetOs_linux:
|
|
|
|
+ case TargetOs_freebsd:
|
|
if (!build_context.extra_linker_flags.text) {
|
|
if (!build_context.extra_linker_flags.text) {
|
|
build_context.extra_linker_flags = str_lit("-fsanitize=memory");
|
|
build_context.extra_linker_flags = str_lit("-fsanitize=memory");
|
|
} else {
|
|
} else {
|
|
build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=memory"));
|
|
build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=memory"));
|
|
}
|
|
}
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (build_context.sanitizer_flags & SanitizerFlag_Thread) {
|
|
if (build_context.sanitizer_flags & SanitizerFlag_Thread) {
|
|
- if (build_context.metrics.os == TargetOs_darwin || build_context.metrics.os == TargetOs_linux) {
|
|
|
|
|
|
+ switch (build_context.metrics.os) {
|
|
|
|
+ case TargetOs_darwin:
|
|
|
|
+ case TargetOs_linux:
|
|
|
|
+ case TargetOs_freebsd:
|
|
if (!build_context.extra_linker_flags.text) {
|
|
if (!build_context.extra_linker_flags.text) {
|
|
build_context.extra_linker_flags = str_lit("-fsanitize=thread");
|
|
build_context.extra_linker_flags = str_lit("-fsanitize=thread");
|
|
} else {
|
|
} else {
|
|
build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=thread"));
|
|
build_context.extra_linker_flags = concatenate_strings(permanent_allocator(), build_context.extra_linker_flags, str_lit(" -fsanitize=thread"));
|
|
}
|
|
}
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|