[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