aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Lex/ModuleMap.cpp
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2021-09-07 14:56:43 +0300
committerMartin Storsjö <martin@martin.st>2021-09-14 11:05:37 +0300
commitac3edc4c97ae9de62cdaec5d1acfa627a9a4b6ca (patch)
treede6fcc46f9e3eac22d1d7dffa467503f84bc712b /clang/lib/Lex/ModuleMap.cpp
parent63784b9a75eb959a65c8cf644af9565764d8322c (diff)
downloadllvm-ac3edc4c97ae9de62cdaec5d1acfa627a9a4b6ca.zip
llvm-ac3edc4c97ae9de62cdaec5d1acfa627a9a4b6ca.tar.gz
llvm-ac3edc4c97ae9de62cdaec5d1acfa627a9a4b6ca.tar.bz2
[Win64EH] Write .pdata symbol relocations relative to the temporary begin symbol
Previously the relocations pointed at the public user facing, possibly external symbol. When the function itself is weak, that symbol may be overridden at link time, pointing at another strong implementation of the same function instead. In that case, there's two conflicting pdata entries pointing at the same address, and the wrong unwind info might end up used. Both GCC/binutils and MSVC produce pdata pointing at internal static symbols. (GCC/binutils point at the .text section just as LLVM does after this change, MSVC points at special label type symbols with the type IMAGE_SYM_CLASS_LABEL and names like '$LN4'.) This fixes unwinding through an overridden "operator new" with a statically linked C++ library in MinGW mode. (Building libc++ with -ffunction-sections and linking with --gc-sections might avoid the issue too.) This makes the produced object files a little less user friendly to debug, but with other recent improvements for llvm-readobj, the unwind info debugging experience should be pretty much the same. Differential Revision: https://reviews.llvm.org/D109651
Diffstat (limited to 'clang/lib/Lex/ModuleMap.cpp')
0 files changed, 0 insertions, 0 deletions