Skip to content

Commit

Permalink
[lld] select a default eflags for hexagon (llvm#108431)
Browse files Browse the repository at this point in the history
Empty archives are apparently routine in linux kernel builds, so instead
of asserting, we should handle this case with a sane default value.

(cherry picked from commit d1ba432)
  • Loading branch information
androm3da authored and tru committed Sep 16, 2024
1 parent 82f3a4a commit 82e85b6
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
8 changes: 3 additions & 5 deletions lld/ELF/Arch/Hexagon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,15 @@ Hexagon::Hexagon() {
}

uint32_t Hexagon::calcEFlags() const {
assert(!ctx.objectFiles.empty());

// 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: */ 0x60);
}

static uint32_t applyMask(uint32_t mask, uint32_t data) {
Expand Down
5 changes: 5 additions & 0 deletions lld/test/ELF/hexagon-eflag.s
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 82e85b6

Please sign in to comment.