Index: ELF/Arch/Hexagon.cpp =================================================================== --- ELF/Arch/Hexagon.cpp +++ ELF/Arch/Hexagon.cpp @@ -55,8 +55,19 @@ 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>(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; Index: test/ELF/hexagon-eflag.s =================================================================== --- test/ELF/hexagon-eflag.s +++ 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