diff options
author | Oliver Stannard <oliver.stannard@arm.com> | 2014-09-23 15:38:11 +0000 |
---|---|---|
committer | Oliver Stannard <oliver.stannard@arm.com> | 2014-09-23 15:38:11 +0000 |
commit | c546625c4f7071b721ad50dee2a04593b4e44c18 (patch) | |
tree | babf600ea502addaff26af52a8dfde53805eebce /llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp | |
parent | 39e40cccc62235af0d1c5eae7fb80852d2166aa8 (diff) | |
download | bcm5719-llvm-c546625c4f7071b721ad50dee2a04593b4e44c18.tar.gz bcm5719-llvm-c546625c4f7071b721ad50dee2a04593b4e44c18.zip |
Fix segfault in AArch64 backend with -g and -mbig-endian
Fix a null pointer dereference when trying to swap the endianness of
fixups in the .eh_frame section in the AArch64 backend.
llvm-svn: 218311
Diffstat (limited to 'llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp')
-rw-r--r-- | llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp index 260c7fd5c4f..0bc2f777d25 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp @@ -535,8 +535,8 @@ void ELFAArch64AsmBackend::applyFixup(const MCFixup &Fixup, char *Data, // store fixups in .eh_frame section in big endian order if (!IsLittleEndian && Fixup.getKind() == FK_Data_4) { 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") Value = ByteSwap_32(unsigned(Value)); } AArch64AsmBackend::applyFixup (Fixup, Data, DataSize, Value, IsPCRel); |