diff options
author | Marco Castelluccio <mcastelluccio@mozilla.com> | 2018-01-03 11:21:30 +0000 |
---|---|---|
committer | Marco Castelluccio <mcastelluccio@mozilla.com> | 2018-01-03 11:21:30 +0000 |
commit | 860d7953a6f36980f406bfbff76f3c00f15eed57 (patch) | |
tree | 27d983193730bc6b98544e847b336a737eb26965 /test | |
parent | 767c0196489b75a48554c7429d7a3b68ab0180c3 (diff) |
Hide some symbols to avoid a crash on shutdown when using code coverage
Summary:
gcov / gcda-based profiling crashes when shared libraries are unloaded
Patch by Benoit Belley and test by Marco Castelluccio for Firefox
See https://bugs.llvm.org/show_bug.cgi?id=27224 & https://bugzilla.mozilla.org/show_bug.cgi?id=1401230
Reviewers: davidxl, rnk, void
Subscribers: jessicah, marco-c, belleyb, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D38124
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@321703 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/profile/Inputs/instrprof-dlopen-dlclose-main.c | 26 | ||||
-rw-r--r-- | test/profile/instrprof-dlopen-dlclose-gcov.test | 6 |
2 files changed, 32 insertions, 0 deletions
diff --git a/test/profile/Inputs/instrprof-dlopen-dlclose-main.c b/test/profile/Inputs/instrprof-dlopen-dlclose-main.c new file mode 100644 index 000000000..fe7eaf0b5 --- /dev/null +++ b/test/profile/Inputs/instrprof-dlopen-dlclose-main.c @@ -0,0 +1,26 @@ +#include <dlfcn.h> +#include <stdio.h> +#include <stdlib.h> + +int main(int argc, char *argv[]) { + dlerror(); + void *f1_handle = dlopen("func.shared", RTLD_LAZY | RTLD_GLOBAL); + if (f1_handle == NULL) { + fprintf(stderr, "unable to open 'func.shared': %s\n", dlerror()); + return EXIT_FAILURE; + } + + void *f2_handle = dlopen("func2.shared", RTLD_LAZY | RTLD_GLOBAL); + if (f2_handle == NULL) { + fprintf(stderr, "unable to open 'func2.shared': %s\n", dlerror()); + return EXIT_FAILURE; + } + + if (dlclose(f2_handle) != 0) { + fprintf(stderr, "unable to close 'func2.shared': %s\n", dlerror()); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + diff --git a/test/profile/instrprof-dlopen-dlclose-gcov.test b/test/profile/instrprof-dlopen-dlclose-gcov.test new file mode 100644 index 000000000..a785fe32d --- /dev/null +++ b/test/profile/instrprof-dlopen-dlclose-gcov.test @@ -0,0 +1,6 @@ +RUN: mkdir -p %t.d +RUN: %clang --coverage -o %t.d/func.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func.c +RUN: %clang --coverage -o %t.d/func2.shared -fPIC -shared %S/Inputs/instrprof-dlopen-func2.c +RUN: %clang --coverage -o %t -fPIC -rpath %t.d %S/Inputs/instrprof-dlopen-dlclose-main.c + +RUN: %run %t |