[PATCH] D48092: [COFF] Fix crash when emitting symbol tables with GC
Shoaib Meenai via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 12 13:31:36 PDT 2018
smeenai created this revision.
smeenai added reviewers: pcc, rnk, ruiu.
When running with linker GC (`-opt:ref`), defined imported symbols that
are referenced but then dropped by GC end up with their `Location`
member being nullptr, which means `getChunk()` returns nullptr for them
and attempting to call `getChunk()->getOutputSection()` causes a crash
from the nullptr dereference. Check for `getChunk()` being nullptr and
bail out early to avoid the crash.
Repository:
rLLD LLVM Linker
https://reviews.llvm.org/D48092
Files:
COFF/Writer.cpp
test/COFF/symtab-gc.s
Index: test/COFF/symtab-gc.s
===================================================================
--- /dev/null
+++ test/COFF/symtab-gc.s
@@ -0,0 +1,27 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc -o %tobject.obj %S/Inputs/object.s
+# RUN: lld-link -dll -entry:f -out:%t.dll -implib:%t.lib %tobject.obj
+# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc -o %tmain.obj %s
+# RUN: lld-link -entry:main -out:%t.exe -opt:ref -debug:dwarf %tmain.obj %t.lib
+# RUN: llvm-readobj -coff-imports %t.exe | FileCheck %s
+
+# CHECK-NOT: Symbol: f
+
+ .def main;
+ .scl 2;
+ .type 32;
+ .endef
+ .section .text,"xr",one_only,main
+ .globl main
+main:
+ retq
+
+ .def stripped;
+ .scl 3;
+ .type 32;
+ .endef
+ .section .text,"xr",one_only,stripped
+stripped:
+ callq __imp_f
+ retq
Index: COFF/Writer.cpp
===================================================================
--- COFF/Writer.cpp
+++ COFF/Writer.cpp
@@ -614,7 +614,10 @@
default: {
// Don't write symbols that won't be written to the output to the symbol
// table.
- OutputSection *OS = Def->getChunk()->getOutputSection();
+ Chunk *C = Def->getChunk();
+ if (!C)
+ return None;
+ OutputSection *OS = C->getOutputSection();
if (!OS)
return None;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48092.151012.patch
Type: text/x-patch
Size: 1283 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180612/5668f081/attachment.bin>
More information about the llvm-commits
mailing list