diff options
-rw-r--r-- | lld/ELF/AArch64ErrataFix.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/lld/ELF/AArch64ErrataFix.cpp b/lld/ELF/AArch64ErrataFix.cpp index 8a54ddd616b..27d97266f2f 100644 --- a/lld/ELF/AArch64ErrataFix.cpp +++ b/lld/ELF/AArch64ErrataFix.cpp @@ -451,7 +451,7 @@ void AArch64Err843419Patcher::init() { continue; if (!IsCodeMapSymbol(Def) && !IsDataMapSymbol(Def)) continue; - if (auto *Sec = dyn_cast<InputSection>(Def->Section)) + if (auto *Sec = dyn_cast_or_null<InputSection>(Def->Section)) if (Sec->Flags & SHF_EXECINSTR) SectionMap[Sec].push_back(Def); } diff --git a/lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s b/lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s new file mode 100644 index 00000000000..608b1aceb0a --- /dev/null +++ b/lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s @@ -0,0 +1,22 @@ +// REQUIRES: aarch64 +// RUN: llvm-mc -filetype=obj -triple=aarch64-linux-gnu %s -o %t +// RUN: ld.lld --just-symbols %t -fix-cortex-a53-843419 -o %t.axf +// RUN: llvm-readobj --symbols %t.axf | FileCheck %s + +// Check that we can gracefully handle --just-symbols, which gives a local +// absolute mapping symbol (with no Section). Previously we assumed that all +// mapping symbols were defined relative to a section and assert failed. + + .text + .global _start + .type _start, %function +_start: ret + +// CHECK: Name: $x.0 +// CHECK-NEXT: Value: 0x0 +// CHECK-NEXT: Size: 0 +// CHECK-NEXT: Binding: Local (0x0) +// CHECK-NEXT: Type: None (0x0) +// CHECK-NEXT: Other: 0 +// CHECK-NEXT: Section: Absolute (0xFFF1) +// CHECK-NEXT: } |