commit: 8f49ee2a7f534503415b56cf67babc40598bf2ba Author: Michał Górny <mgorny <AT> gentoo <DOT> org> AuthorDate: Sun Oct 20 20:46:34 2019 +0000 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org> CommitDate: Sun Oct 20 21:10:28 2019 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8f49ee2a
sys-libs/compiler-rt: Backport crt*.o fix Closes: https://bugs.gentoo.org/698086 Signed-off-by: Michał Górny <mgorny <AT> gentoo.org> ...rt-9.0.0.ebuild => compiler-rt-9.0.0-r1.ebuild} | 6 ++++ ...-crt-make-test-case-nontrivial-in-check_c.patch | 41 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/sys-libs/compiler-rt/compiler-rt-9.0.0.ebuild b/sys-libs/compiler-rt/compiler-rt-9.0.0-r1.ebuild similarity index 94% rename from sys-libs/compiler-rt/compiler-rt-9.0.0.ebuild rename to sys-libs/compiler-rt/compiler-rt-9.0.0-r1.ebuild index bfb57a66738..d371193d71d 100644 --- a/sys-libs/compiler-rt/compiler-rt-9.0.0.ebuild +++ b/sys-libs/compiler-rt/compiler-rt-9.0.0-r1.ebuild @@ -37,6 +37,12 @@ BDEPEND=" # least intrusive of all CMAKE_BUILD_TYPE=RelWithDebInfo +PATCHES=( + # Fix building broken crtbegin/crtend + # https://bugs.gentoo.org/698086 + "${FILESDIR}"/9.0.0/0001-compiler-rt-crt-make-test-case-nontrivial-in-check_c.patch +) + pkg_pretend() { if ! use clang && ! tc-is-clang; then ewarn "Building using a compiler other than clang may result in broken atomics" diff --git a/sys-libs/compiler-rt/files/9.0.0/0001-compiler-rt-crt-make-test-case-nontrivial-in-check_c.patch b/sys-libs/compiler-rt/files/9.0.0/0001-compiler-rt-crt-make-test-case-nontrivial-in-check_c.patch new file mode 100644 index 00000000000..ccae96cad98 --- /dev/null +++ b/sys-libs/compiler-rt/files/9.0.0/0001-compiler-rt-crt-make-test-case-nontrivial-in-check_c.patch @@ -0,0 +1,41 @@ +From 155a43edb0c161bb5122ad4eeee991b43a0278bc Mon Sep 17 00:00:00 2001 +From: Jian Cai <caij2...@gmail.com> +Date: Mon, 16 Sep 2019 21:47:47 +0000 +Subject: [PATCH] [compiler-rt][crt] make test case nontrivial in + check_cxx_section_exists + +Summary: +.init_array gets optimized away when building with -O2 and as a result, +check_cxx_section_exists failed to pass -DCOMPILER_RT_HAS_INITFINI_ARRAY +when building crtbegin.o and crtend.o, which causes binaries linked with +them encounter segmentation fault. See https://crbug.com/855759 for +details. This change prevents .init_array section to be optimized away +even with -O2 or higher optimization level. + +Subscribers: dberris, mgorny, #sanitizers, llvm-commits + +Tags: #sanitizers, #llvm + +Differential Revision: https://reviews.llvm.org/D67628 + +llvm-svn: 372038 +--- + lib/crt/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/crt/CMakeLists.txt b/lib/crt/CMakeLists.txt +index 34c368f7ca4..90e94b93db4 100644 +--- a/lib/crt/CMakeLists.txt ++++ b/lib/crt/CMakeLists.txt +@@ -70,7 +70,7 @@ function(check_cxx_section_exists section output) + endfunction() + + check_cxx_section_exists(".init_array" COMPILER_RT_HAS_INITFINI_ARRAY +- SOURCE "__attribute__((constructor)) void f() {}\nint main() { return 0; }\n") ++ SOURCE "volatile int x;\n__attribute__((constructor)) void f() {x = 0;}\nint main() { return 0; }\n") + + append_list_if(COMPILER_RT_HAS_STD_C11_FLAG -std=c11 CRT_CFLAGS) + append_list_if(COMPILER_RT_HAS_INITFINI_ARRAY -DCRT_HAS_INITFINI_ARRAY CRT_CFLAGS) +-- +2.23.0 +