[lld] 888d9e6 - [LLD] [COFF] Include "rust_eh_personality" among the known personality functions
Martin Storsjö via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 28 03:34:19 PDT 2022
Author: Martin Storsjö
Date: 2022-10-28T13:34:08+03:00
New Revision: 888d9e671fb5b44b74184e13beba2aa42133f4d6
URL: https://github.com/llvm/llvm-project/commit/888d9e671fb5b44b74184e13beba2aa42133f4d6
DIFF: https://github.com/llvm/llvm-project/commit/888d9e671fb5b44b74184e13beba2aa42133f4d6.diff
LOG: [LLD] [COFF] Include "rust_eh_personality" among the known personality functions
These need to have special treatment wrt to .eh_frame sections
and GC - as long as we don't have a full parser of the .eh_frame
section in the COFF linker.
This fixes Rust unwind issues on i686 mingw as discussed in
https://github.com/msys2/MINGW-packages/issues/9091.
Differential Revision: https://reviews.llvm.org/D136879
Added:
Modified:
lld/COFF/Driver.cpp
Removed:
################################################################################
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index ead9e984604a9..6dbda1045152c 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -2415,7 +2415,8 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
// For now, just manually try to retain the known possible personality
// functions. This doesn't bring in more object files, but only marks
// functions that already have been included to be retained.
- for (const char *n : {"__gxx_personality_v0", "__gcc_personality_v0"}) {
+ for (const char *n : {"__gxx_personality_v0", "__gcc_personality_v0",
+ "rust_eh_personality"}) {
Defined *d = dyn_cast_or_null<Defined>(ctx.symtab.findUnderscore(n));
if (d && !d->isGCRoot) {
d->isGCRoot = true;
More information about the llvm-commits
mailing list