[PATCH] [AsmPrinter] Fix crash in handleIndirectSymViaGOTPCRel
Bruno Cardoso Lopes
bruno.cardoso at gmail.com
Wed Jun 24 14:06:55 PDT 2015
Hi rafael,
Check for symbols in MCValue before using them. Bail out early in case they are null. Fix for PR23779.
Rafael, the changes in this patch checks all the possibilities, but do you know if it's possible for evaluateAsRelocatable to return a MCValue with a null SymbolA?
Thanks,
REPOSITORY
rL LLVM
http://reviews.llvm.org/D10712
Files:
lib/CodeGen/AsmPrinter/AsmPrinter.cpp
test/MC/MachO/cstexpr-gotpcrel-64.ll
Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -2086,17 +2086,24 @@
MCValue MV;
if (!(*ME)->evaluateAsRelocatable(MV, nullptr, nullptr) || MV.isAbsolute())
return;
+ const MCSymbolRefExpr *SymA = MV.getSymA();
+ if (!SymA)
+ return;
- const MCSymbol *GOTEquivSym = &MV.getSymA()->getSymbol();
+ // Check that GOT equivalent symbol is cached.
+ const MCSymbol *GOTEquivSym = &SymA->getSymbol();
if (!AP.GlobalGOTEquivs.count(GOTEquivSym))
return;
const GlobalValue *BaseGV = dyn_cast<GlobalValue>(BaseCst);
if (!BaseGV)
return;
+ // Check for a valid base symbol
const MCSymbol *BaseSym = AP.getSymbol(BaseGV);
- if (BaseSym != &MV.getSymB()->getSymbol())
+ const MCSymbolRefExpr *SymB = MV.getSymB();
+
+ if (!SymB || BaseSym != &SymB->getSymbol())
return;
// Make sure to match:
Index: test/MC/MachO/cstexpr-gotpcrel-64.ll
===================================================================
--- test/MC/MachO/cstexpr-gotpcrel-64.ll
+++ test/MC/MachO/cstexpr-gotpcrel-64.ll
@@ -84,3 +84,12 @@
define i32** @t1() {
ret i32** @bargotequiv
}
+
+; Do not crash when a pattern cannot be matched as a GOT equivalent
+
+ at a = external global i8
+ at b = internal unnamed_addr constant i8* @a
+
+; X86-LABEL: _c:
+; X86: .quad _b
+ at c = global i8** @b
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D10712.28399.patch
Type: text/x-patch
Size: 1460 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150624/9b170ece/attachment.bin>
More information about the llvm-commits
mailing list