From edbe2b3f025a293403f45657e440b01bb9b7b6c2 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski Date: Sat, 22 Dec 2018 06:56:19 +0000 Subject: [PATCH] Add support for LLVM profile for NetBSD Summary: NetBSD uses typical UNIX interfaces. All tests pass except instrprof-dlopen-dlclose-gcov.test, as there is not supported semantics of atexit(3) in dlopen(3)ed+dlclose(3)d DSO. NetBSD also ships an older version of LLVM profile (ABI v.2 predating ABI v.4 in upstream version) inside libc. That copy has been manually removed during the porting and testing process of the upstream version to NetBSD. Otherwise there were conflicts between them two. Reviewers: joerg, vitalybuka, vsk Subscribers: srhines, fedor.sergeev, llvm-commits, mgorny, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D55997 llvm-svn: 349994 --- compiler-rt/cmake/config-ix.cmake | 2 +- compiler-rt/lib/profile/InstrProfilingPlatformLinux.c | 2 +- compiler-rt/lib/profile/InstrProfilingPlatformOther.c | 2 +- compiler-rt/test/profile/instrprof-dlopen-dlclose-gcov.test | 3 +++ compiler-rt/test/profile/lit.cfg | 2 +- 5 files changed, 7 insertions(+), 4 deletions(-) diff --git a/compiler-rt/cmake/config-ix.cmake b/compiler-rt/cmake/config-ix.cmake index 7e9ad63556af..db5c4645dc0a 100644 --- a/compiler-rt/cmake/config-ix.cmake +++ b/compiler-rt/cmake/config-ix.cmake @@ -586,7 +586,7 @@ else() endif() if (PROFILE_SUPPORTED_ARCH AND NOT LLVM_USE_SANITIZER AND - OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android|Fuchsia|SunOS") + OS_NAME MATCHES "Darwin|Linux|FreeBSD|Windows|Android|Fuchsia|SunOS|NetBSD") 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 a517821a2fbd..3764df1d8079 100644 --- a/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c +++ b/compiler-rt/lib/profile/InstrProfilingPlatformLinux.c @@ -8,7 +8,7 @@ \*===----------------------------------------------------------------------===*/ #if defined(__linux__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \ - (defined(__sun__) && defined(__svr4__)) + (defined(__sun__) && defined(__svr4__)) || defined(__NetBSD__) #include diff --git a/compiler-rt/lib/profile/InstrProfilingPlatformOther.c b/compiler-rt/lib/profile/InstrProfilingPlatformOther.c index a339abc7f883..7c2f14cfce16 100644 --- a/compiler-rt/lib/profile/InstrProfilingPlatformOther.c +++ b/compiler-rt/lib/profile/InstrProfilingPlatformOther.c @@ -8,7 +8,7 @@ \*===----------------------------------------------------------------------===*/ #if !defined(__APPLE__) && !defined(__linux__) && !defined(__FreeBSD__) && \ - !(defined(__sun__) && defined(__svr4__)) + !(defined(__sun__) && defined(__svr4__)) && !defined(__NetBSD__) #include diff --git a/compiler-rt/test/profile/instrprof-dlopen-dlclose-gcov.test b/compiler-rt/test/profile/instrprof-dlopen-dlclose-gcov.test index 8b1b2e29474c..36b5dbd262df 100644 --- a/compiler-rt/test/profile/instrprof-dlopen-dlclose-gcov.test +++ b/compiler-rt/test/profile/instrprof-dlopen-dlclose-gcov.test @@ -1,3 +1,6 @@ +# atexit(3) not supported in dlopen(3)ed+dlclose(3)d DSO +XFAIL: netbsd + RUN: mkdir -p %t.d RUN: cd %t.d diff --git a/compiler-rt/test/profile/lit.cfg b/compiler-rt/test/profile/lit.cfg index 1cd2509672fd..7449650a623c 100644 --- a/compiler-rt/test/profile/lit.cfg +++ b/compiler-rt/test/profile/lit.cfg @@ -67,7 +67,7 @@ config.substitutions.append( ("%clangxx_profuse=", build_invocation(clang_cxxfla config.substitutions.append( ("%clang_lto_profgen=", build_invocation(clang_cflags, True) + " -fprofile-instr-generate=") ) -if config.host_os not in ['Darwin', 'FreeBSD', 'Linux', 'SunOS']: +if config.host_os not in ['Darwin', 'FreeBSD', 'Linux', 'NetBSD', 'SunOS']: config.unsupported = True if config.target_arch in ['armv7l']: