From 18108f55f4d3533f6ca935f30a60ad7511991872 Mon Sep 17 00:00:00 2001 From: Krzysztof Parzyszek Date: Mon, 25 Apr 2016 12:49:47 +0000 Subject: [PATCH] [Hexagon] Correctly set "Flags" in ELF header llvm-svn: 267397 --- .../Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp | 10 +++++++--- test/MC/Hexagon/elf-flags.ll | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 test/MC/Hexagon/elf-flags.ll diff --git a/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp b/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp index 7997198c7ac..86d0f77d343 100644 --- a/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp +++ b/lib/Target/Hexagon/MCTargetDesc/HexagonMCTargetDesc.cpp @@ -157,10 +157,14 @@ public: HexagonTargetELFStreamer(MCStreamer &S, MCSubtargetInfo const &STI) : HexagonTargetStreamer(S) { auto Bits = STI.getFeatureBits(); - unsigned Flags; - if (Bits.to_ullong() & llvm::Hexagon::ArchV5) + unsigned Flags = 0; + if (Bits[Hexagon::ArchV60]) + Flags = ELF::EF_HEXAGON_MACH_V60; + else if (Bits[Hexagon::ArchV55]) + Flags = ELF::EF_HEXAGON_MACH_V55; + else if (Bits[Hexagon::ArchV5]) Flags = ELF::EF_HEXAGON_MACH_V5; - else + else if (Bits[Hexagon::ArchV4]) Flags = ELF::EF_HEXAGON_MACH_V4; getStreamer().getAssembler().setELFHeaderEFlags(Flags); } diff --git a/test/MC/Hexagon/elf-flags.ll b/test/MC/Hexagon/elf-flags.ll new file mode 100644 index 00000000000..ec1d22b38d7 --- /dev/null +++ b/test/MC/Hexagon/elf-flags.ll @@ -0,0 +1,9 @@ +; RUN: llc -march=hexagon -mcpu=hexagonv4 --filetype=obj %s -o - | llvm-readobj -file-headers -elf-output-style=GNU | FileCheck --check-prefix=CHECK-V4 %s +; RUN: llc -march=hexagon -mcpu=hexagonv5 --filetype=obj %s -o - | llvm-readobj -file-headers -elf-output-style=GNU | FileCheck --check-prefix=CHECK-V5 %s +; RUN: llc -march=hexagon -mcpu=hexagonv55 --filetype=obj %s -o - | llvm-readobj -file-headers -elf-output-style=GNU | FileCheck --check-prefix=CHECK-V55 %s +; RUN: llc -march=hexagon -mcpu=hexagonv60 --filetype=obj %s -o - | llvm-readobj -file-headers -elf-output-style=GNU | FileCheck --check-prefix=CHECK-V60 %s + +; CHECK-V4: Flags: 0x3 +; CHECK-V5: Flags: 0x4 +; CHECK-V55: Flags: 0x5 +; CHECK-V60: Flags: 0x60