From 888d9e671fb5b44b74184e13beba2aa42133f4d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Storsj=C3=B6?= Date: Thu, 27 Oct 2022 22:48:24 +0300 Subject: [PATCH] [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 --- lld/COFF/Driver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index ead9e98..6dbda10 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -2415,7 +2415,8 @@ void LinkerDriver::linkerMain(ArrayRef 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(ctx.symtab.findUnderscore(n)); if (d && !d->isGCRoot) { d->isGCRoot = true; -- 2.7.4