[lld] [lld] select a default eflags for hexagon (PR #108431)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 12 10:48:13 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lld
@llvm/pr-subscribers-backend-hexagon
Author: Brian Cain (androm3da)
<details>
<summary>Changes</summary>
Empty archives are apparently routine in linux kernel builds, so instead of asserting, we should handle this case with a sane default value.
---
Full diff: https://github.com/llvm/llvm-project/pull/108431.diff
2 Files Affected:
- (modified) lld/ELF/Arch/Hexagon.cpp (+4-4)
- (modified) lld/test/ELF/hexagon-eflag.s (+5)
``````````diff
diff --git a/lld/ELF/Arch/Hexagon.cpp b/lld/ELF/Arch/Hexagon.cpp
index 54821c299bde9e..71169477230128 100644
--- a/lld/ELF/Arch/Hexagon.cpp
+++ b/lld/ELF/Arch/Hexagon.cpp
@@ -60,17 +60,17 @@ Hexagon::Hexagon() {
}
uint32_t Hexagon::calcEFlags() const {
- assert(!ctx.objectFiles.empty());
+ static uint32_t DEFAULT_ARCH_REV = 0x60;
// The architecture revision must always be equal to or greater than
// greatest revision in the list of inputs.
- uint32_t ret = 0;
+ std::optional<uint32_t> ret;
for (InputFile *f : ctx.objectFiles) {
uint32_t eflags = cast<ObjFile<ELF32LE>>(f)->getObj().getHeader().e_flags;
- if (eflags > ret)
+ if (!ret || eflags > *ret)
ret = eflags;
}
- return ret;
+ return ret.value_or(DEFAULT_ARCH_REV);
}
static uint32_t applyMask(uint32_t mask, uint32_t data) {
diff --git a/lld/test/ELF/hexagon-eflag.s b/lld/test/ELF/hexagon-eflag.s
index 01cb5e5b0f2935..dbe8604f69fda3 100644
--- a/lld/test/ELF/hexagon-eflag.s
+++ b/lld/test/ELF/hexagon-eflag.s
@@ -5,3 +5,8 @@
# RUN: llvm-readelf -h %t3 | FileCheck %s
# Verify that the largest arch in the input list is selected.
# CHECK: Flags: 0x62
+
+# RUN: llvm-ar rcsD %t4
+# RUN: ld.lld -m hexagonelf %t4 -o %t5
+# RUN: llvm-readelf -h %t5 | FileCheck --check-prefix=CHECK-EMPTYARCHIVE %s
+# CHECK-EMPTYARCHIVE: Flags: 0x60
``````````
</details>
https://github.com/llvm/llvm-project/pull/108431
More information about the llvm-commits
mailing list