[lld] r363456 - [COFF] Handle .eh_frame$symbol as associative comdat for MinGW
Martin Storsjo via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 14 14:02:05 PDT 2019
Author: mstorsjo
Date: Fri Jun 14 14:02:04 2019
New Revision: 363456
URL: http://llvm.org/viewvc/llvm-project?rev=363456&view=rev
Log:
[COFF] Handle .eh_frame$symbol as associative comdat for MinGW
This matches how it is done for .xdata and .pdata already.
On i386, the symbol name in the section name suffix does not contain
the extra underscore prefix.
This is one part of a fix for PR42217.
Differential Revision: https://reviews.llvm.org/D63350
Added:
lld/trunk/test/COFF/associative-comdat-mingw-i386.s
Modified:
lld/trunk/COFF/InputFiles.cpp
Modified: lld/trunk/COFF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.cpp?rev=363456&r1=363455&r2=363456&view=diff
==============================================================================
--- lld/trunk/COFF/InputFiles.cpp (original)
+++ lld/trunk/COFF/InputFiles.cpp Fri Jun 14 14:02:04 2019
@@ -288,6 +288,8 @@ void ObjFile::recordPrevailingSymbolForM
if (SC && SC->getOutputCharacteristics() & IMAGE_SCN_MEM_EXECUTE) {
StringRef Name;
COFFObj->getSymbolName(Sym, Name);
+ if (getMachineType() == I386)
+ Name.consume_front("_");
PrevailingSectionMap[Name] = SectionNumber;
}
}
@@ -297,9 +299,10 @@ void ObjFile::maybeAssociateSEHForMingw(
const DenseMap<StringRef, uint32_t> &PrevailingSectionMap) {
StringRef Name;
COFFObj->getSymbolName(Sym, Name);
- if (Name.consume_front(".pdata$") || Name.consume_front(".xdata$")) {
- // For MinGW, treat .[px]data$<func> as implicitly associative to
- // the symbol <func>.
+ if (Name.consume_front(".pdata$") || Name.consume_front(".xdata$") ||
+ Name.consume_front(".eh_frame$")) {
+ // For MinGW, treat .[px]data$<func> and .eh_frame$<func> as implicitly
+ // associative to the symbol <func>.
auto ParentSym = PrevailingSectionMap.find(Name);
if (ParentSym != PrevailingSectionMap.end())
readAssociativeDefinition(Sym, Def, ParentSym->second);
Added: lld/trunk/test/COFF/associative-comdat-mingw-i386.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/associative-comdat-mingw-i386.s?rev=363456&view=auto
==============================================================================
--- lld/trunk/test/COFF/associative-comdat-mingw-i386.s (added)
+++ lld/trunk/test/COFF/associative-comdat-mingw-i386.s Fri Jun 14 14:02:04 2019
@@ -0,0 +1,37 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -triple=i686-windows-gnu %s -filetype=obj -o %t.obj
+
+# RUN: lld-link -lldmingw -entry:main %t.obj -out:%t.exe
+# RUN: llvm-objdump -s %t.exe | FileCheck %s
+
+# Check that the .eh_frame comdat was included, even if it had no symbols,
+# due to associativity with the symbol _foo.
+
+# CHECK: Contents of section .eh_fram:
+# CHECK: 403000 42
+
+ .text
+ .def _main;
+ .scl 2;
+ .type 32;
+ .endef
+ .globl _main
+ .p2align 4, 0x90
+_main:
+ call _foo
+ ret
+
+ .section .eh_frame$foo,"dr"
+ .linkonce discard
+ .byte 0x42
+
+ .def _foo;
+ .scl 2;
+ .type 32;
+ .endef
+ .section .text$foo,"xr",discard,foo
+ .globl _foo
+ .p2align 4
+_foo:
+ ret
More information about the llvm-commits
mailing list