[PATCH] D52038: [LLD][ELF][AArch64] Guard --fix-cortex-a53-843419 against --just-syms
Peter Smith via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 13 07:59:17 PDT 2018
peter.smith created this revision.
peter.smith added reviewers: ruiu, grimar.
Herald added subscribers: kristof.beyls, arichardson, emaste.
Herald added a reviewer: javed.absar.
Herald added a reviewer: espindola.
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 (there is no section to search for errata).
I'm a little surprised that --just-syms imports local symbols, as they are in theory not accessible from other objects.
Fixes PR37971 (https://bugs.llvm.org/show_bug.cgi?id=37971)
https://reviews.llvm.org/D52038
Files:
ELF/AArch64ErrataFix.cpp
test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s
Index: test/ELF/aarch64-cortex-a53-843419-abs-mapsyms.s
===================================================================
--- /dev/null
+++ 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: }
Index: ELF/AArch64ErrataFix.cpp
===================================================================
--- ELF/AArch64ErrataFix.cpp
+++ ELF/AArch64ErrataFix.cpp
@@ -451,7 +451,7 @@
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);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D52038.165294.patch
Type: text/x-patch
Size: 1491 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180913/db7ae30d/attachment.bin>
More information about the llvm-commits
mailing list