[LLD] [COFF] Include "rust_eh_personality" among the known personality functions
authorMartin Storsjö <martin@martin.st>
Thu, 27 Oct 2022 19:48:24 +0000 (22:48 +0300)
committerMartin Storsjö <martin@martin.st>
Fri, 28 Oct 2022 10:34:08 +0000 (13:34 +0300)
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

index ead9e98..6dbda10 100644 (file)
@@ -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;