Skip to content

Commit

Permalink
[ELF][HEXAGON] Let input determine e_flag.
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D53204

llvm-svn: 344518
  • Loading branch information
Sid Manning committed Oct 15, 2018
1 parent 81eb440 commit 6df0759
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
15 changes: 13 additions & 2 deletions lld/ELF/Arch/Hexagon.cpp
Expand Up @@ -55,8 +55,19 @@ Hexagon::Hexagon() {
NoneRel = R_HEX_NONE;
}

// Support V60 only at the moment.
uint32_t Hexagon::calcEFlags() const { return 0x60; }
uint32_t Hexagon::calcEFlags() const {
assert(!ObjectFiles.empty());

// The architecture revision must always be equal to or greater than
// greatest revision in the list of inputs.
uint32_t Ret = 0;
for (InputFile *F : ObjectFiles) {
uint32_t EFlags = cast<ObjFile<ELF32LE>>(F)->getObj().getHeader()->e_flags;
if (EFlags > Ret)
Ret = EFlags;
}
return Ret;
}

static uint32_t applyMask(uint32_t Mask, uint32_t Data) {
uint32_t Result = 0;
Expand Down
7 changes: 7 additions & 0 deletions lld/test/ELF/hexagon-eflag.s
@@ -0,0 +1,7 @@
# REQUIRES: hexagon
# RUN: llvm-mc -filetype=obj -mv62 -triple=hexagon-unknown-elf %s -o %t
# RUN: llvm-mc -filetype=obj -mv60 -triple=hexagon-unknown-elf %S/Inputs/hexagon.s -o %t2
# RUN: ld.lld %t2 %t -o %t3
# RUN: llvm-readelf -h %t3 | FileCheck %s
# Verify that the largest arch in the input list is selected.
# CHECK: Flags: 0x62

0 comments on commit 6df0759

Please sign in to comment.