Sfoglia il codice sorgente

Merge pull request #59782 from bruvzg/clang_ci_san

Rémi Verschelde 3 anni fa
parent
commit
916ec2b66e

+ 14 - 2
.github/workflows/linux_builds.yml

@@ -30,7 +30,7 @@ jobs:
             build-mono: true
             artifact: true
 
-          - name: Editor with doubles and sanitizers (target=debug, tools=yes, float=64, tests=yes, use_asan=yes, use_ubsan=yes)
+          - name: Editor with doubles and GCC sanitizers (target=debug, tools=yes, float=64, tests=yes, use_asan=yes, use_ubsan=yes)
             cache-name: linux-editor-double-sanitizers
             target: debug
             tools: true
@@ -45,6 +45,17 @@ jobs:
             # Skip 2GiB artifact speeding up action.
             artifact: false
 
+          - name: Editor with clang sanitizers (target=debug, tools=yes, use_asan=yes, use_ubsan=yes, use_llvm=yes)
+            cache-name: linux-editor-llvm-sanitizers
+            target: debug
+            tools: true
+            tests: true
+            sconsflags: use_asan=yes use_ubsan=yes use_llvm=yes
+            bin: "./bin/godot.linuxbsd.tools.64.llvm.san"
+            build-mono: false
+            # Skip 2GiB artifact speeding up action.
+            artifact: false
+
           - name: Template w/ Mono (target=release, tools=no)
             cache-name: linux-template-mono
             target: release
@@ -75,7 +86,8 @@ jobs:
           # The actual dependencies
           sudo apt-get install build-essential pkg-config libx11-dev libxcursor-dev \
               libxinerama-dev libgl1-mesa-dev libglu-dev libasound2-dev libpulse-dev \
-              libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip
+              libdbus-1-dev libudev-dev libxi-dev libxrandr-dev yasm xvfb wget unzip \
+              llvm
 
       - name: Setup Godot build cache
         uses: ./.github/actions/godot-cache

+ 1 - 0
platform/linuxbsd/detect.py

@@ -162,6 +162,7 @@ def configure(env):
 
     if env["use_ubsan"] or env["use_asan"] or env["use_lsan"] or env["use_tsan"] or env["use_msan"]:
         env.extra_suffix += ".san"
+        env.Append(CCFLAGS=["-DSANITIZERS_ENABLED"])
 
         if env["use_ubsan"]:
             env.Append(

+ 10 - 0
platform/linuxbsd/godot_linuxbsd.cpp

@@ -33,10 +33,20 @@
 #include <stdlib.h>
 #include <unistd.h>
 
+#if defined(SANITIZERS_ENABLED)
+#include <sys/resource.h>
+#endif
+
 #include "main/main.h"
 #include "os_linuxbsd.h"
 
 int main(int argc, char *argv[]) {
+#if defined(SANITIZERS_ENABLED)
+	// Note: Set stack size to be at least 30 MB (vs 8 MB default) to avoid overflow, address sanitizer can increase stack usage up to 3 times.
+	struct rlimit stack_lim = { 0x1E00000, 0x1E00000 };
+	setrlimit(RLIMIT_STACK, &stack_lim);
+#endif
+
 	OS_LinuxBSD os;
 
 	setlocale(LC_CTYPE, "");

+ 1 - 0
platform/osx/detect.py

@@ -127,6 +127,7 @@ def configure(env):
 
     if env["use_ubsan"] or env["use_asan"] or env["use_tsan"]:
         env.extra_suffix += ".san"
+        env.Append(CCFLAGS=["-DSANITIZERS_ENABLED"])
 
         if env["use_ubsan"]:
             env.Append(

+ 10 - 0
platform/osx/godot_main_osx.mm

@@ -35,12 +35,22 @@
 #include <string.h>
 #include <unistd.h>
 
+#if defined(SANITIZERS_ENABLED)
+#include <sys/resource.h>
+#endif
+
 int main(int argc, char **argv) {
 #if defined(VULKAN_ENABLED)
 	// MoltenVK - enable full component swizzling support.
 	setenv("MVK_CONFIG_FULL_IMAGE_VIEW_SWIZZLE", "1", 1);
 #endif
 
+#if defined(SANITIZERS_ENABLED)
+	// Note: Set stack size to be at least 30 MB (vs 8 MB default) to avoid overflow, address sanitizer can increase stack usage up to 3 times.
+	struct rlimit stack_lim = { 0x1E00000, 0x1E00000 };
+	setrlimit(RLIMIT_STACK, &stack_lim);
+#endif
+
 	int first_arg = 1;
 	const char *dbg_arg = "-NSDocumentRevisionsDebugMode";
 	printf("arguments\n");