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>