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

Renato Golin renato.golin at linaro.org
Thu Aug 21 07:25:07 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")
----------------
Eric Christopher wrote:
> Oliver Stannard wrote:
> > Eric Christopher 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.
> Ah right. Thanks.
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.

http://reviews.llvm.org/D4870






More information about the llvm-commits mailing list