From f31f596152befc309a83f00f164b8145ca9485b3 Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Thu, 13 Sep 2018 15:49:13 +0000 Subject: [PATCH] [ELF] Guard --fix-cortex-a53-843419 against --just-syms If --just-syms is used the mapping symbols from the ELF file will be absolute symbols with no section. The code to process mapping symbols in --fix-cortex-a53-843419 assumes that these symbols have a defining section so a crash will result when --just-syms is used. The simple fix is to not process the symbol when it doesn't have a section. Fixes PR37971 Differential Revision: https://reviews.llvm.org/D52038 llvm-svn: 342146 --- lld/ELF/AArch64ErrataFix.cpp | 2 +- .../ELF/aarch64-cortex-a53-843419-abs-mapsyms.s | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 lld/test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s diff --git a/lld/ELF/AArch64ErrataFix.cpp b/lld/ELF/AArch64ErrataFix.cpp index 8a54ddd..27d9726 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(Def->Section)) + if (auto *Sec = dyn_cast_or_null(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 0000000..608b1ac --- /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: } -- 2.7.4