Newer
Older
minerva / Toolchain / Patches / llvm / 0004-compiler-rt-Enable-profile-instrumentation-for-Seren.patch
@minerva minerva on 13 Jul 5 KB Initial commit
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Andrew Kaster <akaster@serenityos.org>
Date: Fri, 4 Mar 2022 15:13:42 -0700
Subject: [PATCH] [compiler-rt] Enable profile instrumentation for Minerva

Treat Minerva the same as other *NIX platforms that behave close
enough to linux to use the pre-canned InstrProfiling implementation.
---
 clang/lib/Driver/ToolChains/Minerva.cpp      |  3 +++
 clang/test/Driver/instrprof-ld.c              | 20 +++++++++++++++++++
 compiler-rt/cmake/config-ix.cmake             |  2 +-
 .../lib/profile/InstrProfilingPlatformLinux.c |  3 ++-
 .../lib/profile/InstrProfilingPlatformOther.c |  2 +-
 5 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Minerva.cpp b/clang/lib/Driver/ToolChains/Minerva.cpp
index 7d95fe55a0fde623720e5974a860826753f4bf1f..a5660cbf9e5220bdcc3bc1b3daeaa04df1395e38 100644
--- a/clang/lib/Driver/ToolChains/Minerva.cpp
+++ b/clang/lib/Driver/ToolChains/Minerva.cpp
@@ -172,6 +172,9 @@ void tools::minerva::Linker::ConstructJob(Compilation &C, const JobAction &JA,
     CmdArgs.push_back(Args.MakeArgString(crtend_path));
   }
 
+  if (ShouldLinkCompilerRuntime)
+    TC.addProfileRTLibs(Args, CmdArgs);
+
   const char *Exec = Args.MakeArgString(TC.GetLinkerPath());
   C.addCommand(std::make_unique<Command>(JA, *this,
                                          ResponseFileSupport::AtFileCurCP(),
diff --git a/clang/test/Driver/instrprof-ld.c b/clang/test/Driver/instrprof-ld.c
index a96bba4a1e763ce4a8ca1ef11f29bcf49ccff10a..4b099da9e2d2f0986636976a05443c943c481304 100644
--- a/clang/test/Driver/instrprof-ld.c
+++ b/clang/test/Driver/instrprof-ld.c
@@ -54,6 +54,15 @@
 // CHECK-OPENBSD-X86-64: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
 // CHECK-OPENBSD-X86-64: "{{.*}}/Inputs/resource_dir{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-openbsd{{/|\\\\}}libclang_rt.profile.a"
 
+// RUN: %clang -### %s 2>&1 \
+// RUN:     --target=x86_64-pc-minerva -fprofile-instr-generate -fuse-ld=ld \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/minerva_x86_64_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-MINERVA-X86-64 %s
+
+// CHECK-MINERVA-X86-64: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
+// CHECK-MINERVA-X86-64: "{{.*}}/Inputs/resource_dir{{/|\\\\}}lib{{/|\\\\}}x86_64-pc-minerva{{/|\\\\}}libclang_rt.profile.a"
+
 // RUN: %clang -### %s 2>&1 \
 // RUN:     -shared \
 // RUN:     --target=i386-unknown-linux -fprofile-instr-generate -fuse-ld=ld \
@@ -104,6 +113,17 @@
 // CHECK-OPENBSD-X86-64-SHARED: "{{(.*[^-.0-9A-Z_a-z])?}}ld{{(.exe)?}}"
 // CHECK-OPENBSD-X86-64-SHARED: "{{.*}}/Inputs/resource_dir{{/|\\\\}}lib{{/|\\\\}}x86_64-unknown-openbsd{{/|\\\\}}libclang_rt.profile.a"
 
+// RUN: %clang -### %s 2>&1 \
+// RUN:     -shared \
+// RUN:     --target=x86_64-pc-minerva -fprofile-instr-generate -fuse-ld=ld \
+// RUN:     -resource-dir=%S/Inputs/resource_dir \
+// RUN:     --sysroot=%S/Inputs/minerva_x86_64_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-MINERVA-X86-64-SHARED %s
+
+// CHECK-MINERVA-X86-64-SHARED: "{{(.*[^-.0-9A-Z_a-z])?}}ld.lld{{(.exe)?}}"
+// CHECK-MINERVA-X86-64-SHARED: "{{.*}}/Inputs/resource_dir{{/|\\\\}}lib{{/|\\\\}}x86_64-pc-minerva{{/|\\\\}}libclang_rt.profile.a"
+
+
 // RUN: %clang -### %s 2>&1 \
 // RUN:     --target=x86_64-apple-darwin14 -fprofile-instr-generate -fuse-ld=ld \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake
index cf729c3adb1f5f52df18b672f93788284d41f308..76d42499daf02eab55eff96bda4228d09d0e26fb 100644
--- a/compiler-rt/cmake/config-ix.cmake
+++ b/compiler-rt/cmake/config-ix.cmake
@@ -836,7 +836,7 @@ else()
 endif()
 
 if (PROFILE_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND
-    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android|Fuchsia|SunOS|NetBSD|AIX|WASI|Haiku")
+    OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android|Fuchsia|SunOS|NetBSD|AIX|WASI|Haiku|Minerva")
   set(COMPILER_RT_HAS_PROFILE TRUE)
 else()
   set(COMPILER_RT_HAS_PROFILE FALSE)
diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
index 5b230c1b2006237735a6caf2fe1a9e30bc47ff96..3641479114d6edad968a9f30252a1b9d3535ac89 100644
--- a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
+++ b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
@@ -8,7 +8,8 @@
 
 #if defined(__linux__) || defined(__FreeBSD__) || defined(__Fuchsia__) ||      \
     (defined(__sun__) && defined(__svr4__)) || defined(__NetBSD__) ||          \
-    defined(_AIX) || defined(__wasm__) || defined(__HAIKU__)
+    defined(_AIX) || defined(__wasm__) || defined(__HAIKU__) ||                \
+    defined(__minerva__)
 
 #if !defined(_AIX) && !defined(__wasm__)
 #include <elf.h>
diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformOther.c b/compiler-rt/lib/profile/InstrProfilingPlatformOther.c
index 29e570b9fba920a0f8085c7d636c52133a7a2200..483b836b0a55a5ea87f9263d3363960dd689be4c 100644
--- a/compiler-rt/lib/profile/InstrProfilingPlatformOther.c
+++ b/compiler-rt/lib/profile/InstrProfilingPlatformOther.c
@@ -9,7 +9,7 @@
 #if !defined(__APPLE__) && !defined(__linux__) && !defined(__FreeBSD__) &&     \
     !defined(__Fuchsia__) && !(defined(__sun__) && defined(__svr4__)) &&       \
     !defined(__NetBSD__) && !defined(_WIN32) && !defined(_AIX) &&              \
-    !defined(__wasm__) && !defined(__HAIKU__)
+    !defined(__wasm__) && !defined(__HAIKU__) && !defined(__minerva__)
 
 #include <stdlib.h>
 #include <stdio.h>