[OpenMP] Remove -Wl,-fini=__kmp_internal_end_fini
authorAaron Puchert <aaronpuchert@alice-dsl.net>
Mon, 18 Nov 2019 23:54:02 +0000 (00:54 +0100)
committerAaron Puchert <aaronpuchert@alice-dsl.net>
Mon, 18 Nov 2019 23:54:58 +0000 (00:54 +0100)
commitb29c7fdb617cba4c83037840842a872e8bf2f6b1
tree89f2b3883e1134494c3aaa65c28dd5fb8b9fbb8d
parentf805c60a093325c16ce4200d2615ef48555d9cb8
[OpenMP] Remove -Wl,-fini=__kmp_internal_end_fini

Summary:
The termination function duplicated the functionality of the
__attribute((destructor))-annotated function __kmp_internal_end_fini,
and we have no indication that this doesn't work.

The function might cause issues with link-time optimization turned on:
until very recently, none of the usual linkers was reporting functions
named in -Wl,-fini as used to the LTO plugin, so it might be dropped.
If the function is dropped, -Wl,-fini=__kmp_internal_end_fini doesn't
do what we want: with ld.bfd and lld it drops the FINI attribute from
.dynamic and with gold we get FINI = 0x0, which leads to a crash on
cleanup. This can be reproduced by building with

    -DLLVM_ENABLE_PROJECTS="clang;openmp" \
    -DLLVM_ENABLE_LTO=Thin \
    -DLLVM_USE_LINKER=gold

The issue in lld has been fixed in f95273f75aa, but gold remains without
fix so far.

Fixes PR43927.

Reviewers: JonChesterfield, jdoerfert, AndreyChurbanov

Reviewed By: AndreyChurbanov

Differential Revision: https://reviews.llvm.org/D69927
openmp/runtime/cmake/LibompHandleFlags.cmake
openmp/runtime/cmake/config-ix.cmake
openmp/runtime/src/kmp.h
openmp/runtime/src/kmp_runtime.cpp