[PATCH] Segfault in AArch64 backend with -g and -mbig-endian

Oliver Stannard oliver.stannard at arm.com
Tue Aug 26 09:26:59 PDT 2014


================
Comment at: lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp:538
@@ -537,3 +537,3 @@
     const MCSection *Sec = Fixup.getValue()->FindAssociatedSection();
-    const MCSectionELF *SecELF = static_cast<const MCSectionELF *>(Sec);
-    if (SecELF->getSectionName() == ".eh_frame")
+    const MCSectionELF *SecELF = dyn_cast_or_null<const MCSectionELF>(Sec);
+    if (SecELF && SecELF->getSectionName() == ".eh_frame")
----------------
rengolin wrote:
> olista01 wrote:
> > echristo wrote:
> > > Fixup to a null section? How's that happen?
> > This is the section associated with the value to put into the fixup location, not the section containing the fixup location. This can be null if:
> >  * It is a symbol which is not defined by this translation unit
> >  * It is the difference between two temporary symbols, for example to find the length of a debug data structure.
> Is this a null section or not an ELF section? Your check seems to imply the latter, while I believe it's the former.
> 
> In that case, this would be better fixed in the caller, since the result of a null section means you're applying a fixup to a null section and propagating the error.
MCExpr::FindAssociatedSection can return nullptr when the expression is a reference to a symbol not defined in this translation unit, so we do have to be able to handle nullptr here without it being an error.

http://reviews.llvm.org/D4870






More information about the llvm-commits mailing list