[llvm] r306927 - Rewrite ARM execute only support to avoid the use of a command line flag and unqualified ARMSubtarget lookup.

Eric Christopher via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 9 13:35:59 PDT 2017


Hi Luke,

On Wed, Sep 27, 2017 at 5:29 AM Luke Cheeseman <Luke.Cheeseman2 at arm.com>
wrote:

> Hi Eric,
>
>
> Sorry for the delay in responding. I have looked into this more and have
> a few more topics for discussion. Initially, Prakhar had created a new
> default .text section with the PURECODE flag set that was used instead of
> the default .text section. This was in ARMElfTargetObjectFile::Initialize:
>
>
> +  // Make code section unreadable when in execute-only mode
> +  if (genExecuteOnly) {
> +    unsigned  Type = ELF::SHT_PROGBITS;
> +    unsigned Flags = ELF::SHF_EXECINSTR | ELF::SHF_ALLOC |
> ELF::SHF_ARM_PURECODE;
> +    // Since we cannot modify flags for an existing section, we create a
> new
> +    // section with the right flags, and use 0 as the unique ID for
> +    // execute-only text
> +    TextSection = Ctx.getELFSection(".text", Type, Flags, 0, "", 0U);
> +  }
>
>
>
Yes.

> This snippet was removed and so leads to the generation of two .text
> sections as the exectue-only functions can't live in the normal .text
> section (when compiling with -mexecute-only).
>
>
>
Right.


> I see what you mean about there being no clear decision against
> implementing the execute-only feature in this way, just alternatives that
> were suggested and selected. In particular using a backend option.
>
>
> Using a backend option in this way is definitely not correct.


> I have looked into your rewrite and can see that it should allow more
> flexibilty for LTO as the execute-only attribute is at a function level. I
> am perhaps not the correct person to speak about execute-only and LTO, I
> found previous discussions which mention marking each function with a
> function attribute that details whether it is execute-only. This seems like
> an interesting way of gaining the flexibilty.
>
>
>
It's less flexibility and more correctness. LTO is a valid compilation mode
and mechanism for the compiler and the implementation of execute-only
caused it to not work in the presence of LTO.


> For now I would like to discuss the empty .text section. A linker can
> remove the empty .text section (given the correct conditions) that mean it
> will not cause issues. However, I was thinking that it would perhaps be
> better not to generate it at all. I've noticed a similar effect when
> compiling with -ffunction-sections, each function gets emitted into its own
> section and there is a left over unused .text section. Perhaps it would be
> useful to have some option to control whether empty sections are emitted to
> the object file ot not. Another solution is to be able to set the flags on
> the default .text sections, this would only help with the -mexecute-only
> case; this way the default .text section would be used and we would avoid
> generating a second .text section with the correct flags.
>
>
>
I don't have anything in particular. If you find that we're creating an
unused text section with no contents I'm reasonably certain that deleting
that should be fine.

-eric


> Do you have any thoughts or alternatives?
>
>
> Thanks,
>
> Luke
>
>
> ------------------------------
> *From:* Eric Christopher <echristo at gmail.com>
> *Sent:* 14 July 2017 18:00:32
> *To:* Luke Cheeseman; llvm-commits at lists.llvm.org; Christof Douma
> *Cc:* nd
> *Subject:* Re: [llvm] r306927 - Rewrite ARM execute only support to avoid
> the use of a command line flag and unqualified ARMSubtarget lookup.
>
> Hi Luke,
>
> On Fri, Jul 14, 2017 at 7:57 AM Luke Cheeseman <Luke.Cheeseman2 at arm.com>
> wrote:
>
>>
>> Hi Eric,
>>
>>
>>
>> You recently commited:
>>
>> [llvm] r306927 - Rewrite ARM execute only support to avoid the use of a
>> command line flag and unqualified ARMSubtarget lookup.
>>
>>
>>
>> This is breaking some of our testing as it changes the attributes of the
>> default .text section, namely the section is no longer execute only. This
>> causes two .text sections to be created (one that is execute only and one
>> that is not); some tools may have issues with this. For example, a linker
>> may merge the two .text sections into one segment and remove the PURECODE
>> flag in conformance with section 4.3.3 of
>> http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044f/IHI0044F_aaelf.pdf
>>  .
>>
>>
>>
>
> Fascinating. I'm not seeing in here where it allows removing of the flag
> in there, but it's early and I might be missing it. Also, sounds like
> you're missing a compile time option on a few files in whatever build broke
> :)
>
>
>> Furthermore, in your patch you made similar changes that were initially
>> proposed by Prakhar (namely implementing execute only as a feature flag)
>> but were discussed and decided against. See
>> https://reviews.llvm.org/D27449?id=80748#inline-237468 .
>>
>>
>>
>
> Yeah, that wasn't the right thing to do.
>
> The original reviewer comment was correct and, unfortunately, this patch
> will need to be implemented in another way if this is the desired behavior.
> I did check the ABI but couldn't find anything that disallowed having
> sections that are both execute only and not.
>
> It's also not obvious on "decided against". Who decided? It definitely
> wasn't the original reviewer.
>
> I think the mechanics you want are to define a module flag and error out
> on linking where the module flags don't match. I'm not a huge fan of them,
> but it is an existing mechanism here. Alternately you can go with the
> original reviewer and use a code gen flag. This is easier to undo if we
> find some problem later, but does ignore state in the module that you might
> want to capture.
>
> Thoughts?
>
> -eric
>
>
>> Take the following example (part of the regression test suite):
>>
>>
>>
>> $ cat test/CodeGen/ARM/execute-only-section.ll
>>
>> ...
>>
>> ; CHECK:     .section .text,"axy",%progbits,unique,0
>>
>> ; CHECK-NOT: .section
>>
>> ; CHECK-NOT: .text
>>
>> ; CHECK:     .globl test_SectionForGlobal
>>
>> ; CHECK:     .type test_SectionForGlobal,%function
>>
>> define void @test_SectionForGlobal() {
>>
>> entry:
>>
>>   ret void
>>
>> }
>>
>> ...
>>
>> $ llc test/CodeGen/ARM/execute-only-section.ll -mtriple=thumbv7m
>> -mattr=+execute-only  -o -
>>
>> .text
>>
>> .syntax unified
>>
>> .eabi_attribute
>>
>> 67, "2.09" @ Tag_conformance
>>
>> ....
>>
>> "test/CodeGen/ARM/execute-only-section.ll"
>>
>> .section
>>
>> .text,"axy",%progbits,unique,0
>>
>> .globl
>>
>> test_SectionForGlobal   @ -- Begin function test_SectionForGlobal
>>
>> .p2align
>>
>> 2
>>
>> .type
>>
>> test_SectionForGlobal,%function
>>
>> .code
>>
>> 16                      @ @test_SectionForGlobal
>>
>> .thumb_func
>>
>> test_SectionForGlobal:
>>
>> .fnstart
>>
>> @ BB#0:                                 @ %entry
>>
>> ...
>>
>>
>>
>> There are now two .text sections, one which is execute only and one which
>> is not. This test still passes however as file check finds the execute only
>> .text section.
>>
>>
>>
>> This is due to this part of the commit:
>>
>> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp (original)
>> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp Fri Jun 30 19:55:22
>> 2017
>> @@ -32,7 +32,7 @@ void ARMElfTargetObjectFile::Initialize(
>>                                          const TargetMachine &TM) {
>>    const ARMBaseTargetMachine &ARM_TM = static_cast<const
>> ARMBaseTargetMachine &>(TM);
>>    bool isAAPCS_ABI = ARM_TM.TargetABI ==
>> ARMBaseTargetMachine::ARMABI::ARM_ABI_AAPCS;
>> -  genExecuteOnly = ARM_TM.getSubtargetImpl()->genExecuteOnly();
>> +  //  genExecuteOnly = ARM_TM.getSubtargetImpl()->genExecuteOnly();
>>
>>    TargetLoweringObjectFileELF::Initialize(Ctx, TM);
>>    InitializeELF(isAAPCS_ABI);
>> @@ -43,16 +43,6 @@ void ARMElfTargetObjectFile::Initialize(
>>
>>    AttributesSection =
>>        getContext().getELFSection(".ARM.attributes",
>> ELF::SHT_ARM_ATTRIBUTES, 0);
>> -
>> -  // Make code section unreadable when in execute-only mode
>> -  if (genExecuteOnly) {
>> -    unsigned  Type = ELF::SHT_PROGBITS;
>> -    unsigned Flags = ELF::SHF_EXECINSTR | ELF::SHF_ALLOC |
>> ELF::SHF_ARM_PURECODE;
>> -    // Since we cannot modify flags for an existing section, we create a
>> new
>> -    // section with the right flags, and use 0 as the unique ID for
>> -    // execute-only text
>> -    TextSection = Ctx.getELFSection(".text", Type, Flags, 0, "", 0U);
>> -  }
>>  }
>>
>>
>>
>> Kind Regards,
>>
>> Luke
>>
>> ------------------------------
>> *From:* llvm-commits <llvm-commits-bounces at lists.llvm.org> on behalf of
>> Eric Christopher via llvm-commits <llvm-commits at lists.llvm.org>
>> *Sent:* 01 July 2017 03:55:22
>> *To:* llvm-commits at lists.llvm.org
>> *Subject:* [llvm] r306927 - Rewrite ARM execute only support to avoid
>> the use of a command line flag and unqualified ARMSubtarget lookup.
>>
>> Author: echristo
>> Date: Fri Jun 30 19:55:22 2017
>> New Revision: 306927
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=306927&view=rev
>> Log:
>> Rewrite ARM execute only support to avoid the use of a command line flag
>> and unqualified ARMSubtarget lookup.
>>
>> Paired with a clang commit to use the new behavior.
>>
>> Modified:
>>     llvm/trunk/lib/Target/ARM/ARM.td
>>     llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp
>>     llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp
>>     llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h
>>     llvm/trunk/test/CodeGen/ARM/constantfp.ll
>>     llvm/trunk/test/CodeGen/ARM/execute-only-big-stack-frame.ll
>>     llvm/trunk/test/CodeGen/ARM/execute-only-section.ll
>>     llvm/trunk/test/CodeGen/ARM/execute-only.ll
>>
>> Modified: llvm/trunk/lib/Target/ARM/ARM.td
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARM.td?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/ARM/ARM.td (original)
>> +++ llvm/trunk/lib/Target/ARM/ARM.td Fri Jun 30 19:55:22 2017
>> @@ -269,6 +269,10 @@ def FeatureLongCalls : SubtargetFeature<
>>                                          "Generate calls via indirect
>> call "
>>                                          "instructions">;
>>
>> +def FeatureExecuteOnly
>> +    : SubtargetFeature<"execute-only", "GenExecuteOnly", "true",
>> +                       "Enable the generation of execute only code.">;
>> +
>>  def FeatureReserveR9 : SubtargetFeature<"reserve-r9", "ReserveR9",
>> "true",
>>                                          "Reserve R9, making it
>> unavailable as "
>>                                          "GPR">;
>>
>> Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp (original)
>> +++ llvm/trunk/lib/Target/ARM/ARMSubtarget.cpp Fri Jun 30 19:55:22 2017
>> @@ -92,11 +92,6 @@ ARMSubtarget &ARMSubtarget::initializeSu
>>    return *this;
>>  }
>>
>> -/// EnableExecuteOnly - Enables the generation of execute-only code on
>> supported
>> -/// targets
>> -static cl::opt<bool>
>> -EnableExecuteOnly("arm-execute-only");
>> -
>>  ARMFrameLowering *ARMSubtarget::initializeFrameLowering(StringRef CPU,
>>                                                          StringRef FS) {
>>    ARMSubtarget &STI = initializeSubtargetDependencies(CPU, FS);
>> @@ -139,9 +134,8 @@ ARMSubtarget::ARMSubtarget(const Triple
>>                             const std::string &FS,
>>                             const ARMBaseTargetMachine &TM, bool IsLittle)
>>      : ARMGenSubtargetInfo(TT, CPU, FS), UseMulOps(UseFusedMulOps),
>> -      GenExecuteOnly(EnableExecuteOnly), CPUString(CPU),
>> IsLittle(IsLittle),
>> -      TargetTriple(TT), Options(TM.Options), TM(TM),
>> -      FrameLowering(initializeFrameLowering(CPU, FS)),
>> +      CPUString(CPU), IsLittle(IsLittle), TargetTriple(TT),
>> Options(TM.Options),
>> +      TM(TM), FrameLowering(initializeFrameLowering(CPU, FS)),
>>        // At this point initializeSubtargetDependencies has been called so
>>        // we can query directly.
>>        InstrInfo(isThumb1Only()
>>
>> Modified: llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp (original)
>> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp Fri Jun 30 19:55:22
>> 2017
>> @@ -32,7 +32,7 @@ void ARMElfTargetObjectFile::Initialize(
>>                                          const TargetMachine &TM) {
>>    const ARMBaseTargetMachine &ARM_TM = static_cast<const
>> ARMBaseTargetMachine &>(TM);
>>    bool isAAPCS_ABI = ARM_TM.TargetABI ==
>> ARMBaseTargetMachine::ARMABI::ARM_ABI_AAPCS;
>> -  genExecuteOnly = ARM_TM.getSubtargetImpl()->genExecuteOnly();
>> +  //  genExecuteOnly = ARM_TM.getSubtargetImpl()->genExecuteOnly();
>>
>>    TargetLoweringObjectFileELF::Initialize(Ctx, TM);
>>    InitializeELF(isAAPCS_ABI);
>> @@ -43,16 +43,6 @@ void ARMElfTargetObjectFile::Initialize(
>>
>>    AttributesSection =
>>        getContext().getELFSection(".ARM.attributes",
>> ELF::SHT_ARM_ATTRIBUTES, 0);
>> -
>> -  // Make code section unreadable when in execute-only mode
>> -  if (genExecuteOnly) {
>> -    unsigned  Type = ELF::SHT_PROGBITS;
>> -    unsigned Flags = ELF::SHF_EXECINSTR | ELF::SHF_ALLOC |
>> ELF::SHF_ARM_PURECODE;
>> -    // Since we cannot modify flags for an existing section, we create a
>> new
>> -    // section with the right flags, and use 0 as the unique ID for
>> -    // execute-only text
>> -    TextSection = Ctx.getELFSection(".text", Type, Flags, 0, "", 0U);
>> -  }
>>  }
>>
>>  const MCExpr *ARMElfTargetObjectFile::getTTypeGlobalReference(
>> @@ -74,21 +64,27 @@ getDebugThreadLocalSymbol(const MCSymbol
>>                                   getContext());
>>  }
>>
>> -MCSection *
>> -ARMElfTargetObjectFile::getExplicitSectionGlobal(const GlobalObject *GO,
>> -                                                 SectionKind SK, const
>> TargetMachine &TM) const {
>> +static bool isExecuteOnlyFunction(const GlobalObject *GO, SectionKind SK,
>> +                                  const TargetMachine &TM) {
>> +  if (const Function *F = dyn_cast<Function>(GO))
>> +    if (TM.getSubtarget<ARMSubtarget>(*F).genExecuteOnly() &&
>> SK.isText())
>> +      return true;
>> +  return false;
>> +}
>> +
>> +MCSection *ARMElfTargetObjectFile::getExplicitSectionGlobal(
>> +    const GlobalObject *GO, SectionKind SK, const TargetMachine &TM)
>> const {
>>    // Set execute-only access for the explicit section
>> -  if (genExecuteOnly && SK.isText())
>> +  if (isExecuteOnlyFunction(GO, SK, TM))
>>      SK = SectionKind::getExecuteOnly();
>>
>>    return TargetLoweringObjectFileELF::getExplicitSectionGlobal(GO, SK,
>> TM);
>>  }
>>
>> -MCSection *
>> -ARMElfTargetObjectFile::SelectSectionForGlobal(const GlobalObject *GO,
>> -                                               SectionKind SK, const
>> TargetMachine &TM) const {
>> +MCSection *ARMElfTargetObjectFile::SelectSectionForGlobal(
>> +    const GlobalObject *GO, SectionKind SK, const TargetMachine &TM)
>> const {
>>    // Place the global in the execute-only text section
>> -  if (genExecuteOnly && SK.isText())
>> +  if (isExecuteOnlyFunction(GO, SK, TM))
>>      SK = SectionKind::getExecuteOnly();
>>
>>    return TargetLoweringObjectFileELF::SelectSectionForGlobal(GO, SK, TM);
>>
>> Modified: llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h (original)
>> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h Fri Jun 30 19:55:22
>> 2017
>> @@ -16,8 +16,6 @@
>>  namespace llvm {
>>
>>  class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF {
>> -  mutable bool genExecuteOnly = false;
>> -
>>  protected:
>>    const MCSection *AttributesSection = nullptr;
>>
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/constantfp.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/constantfp.ll?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/constantfp.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/constantfp.ll Fri Jun 30 19:55:22 2017
>> @@ -5,25 +5,25 @@
>>  ; RUN: llc -mtriple=thumbv7m -mcpu=cortex-m4 %s -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-NO-XO %s
>>
>> -; RUN: llc -mtriple=thumbv7m -arm-execute-only -mcpu=cortex-m4 %s -o - \
>> +; RUN: llc -mtriple=thumbv7m -mattr=+execute-only -mcpu=cortex-m4 %s -o
>> - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-XO-FLOAT
>> --check-prefix=CHECK-XO-DOUBLE %s
>>
>> -; RUN: llc -mtriple=thumbv7meb -arm-execute-only -mcpu=cortex-m4 %s -o -
>> \
>> +; RUN: llc -mtriple=thumbv7meb -mattr=+execute-only -mcpu=cortex-m4 %s
>> -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-XO-FLOAT
>> --check-prefix=CHECK-XO-DOUBLE-BE %s
>>
>> -; RUN: llc -mtriple=thumbv7m -arm-execute-only -mcpu=cortex-m4
>> -relocation-model=ropi %s -o - \
>> +; RUN: llc -mtriple=thumbv7m -mattr=+execute-only -mcpu=cortex-m4
>> -relocation-model=ropi %s -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-XO-ROPI %s
>>
>>  ; RUN: llc -mtriple=thumbv8m.main -mattr=fp-armv8 %s -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-NO-XO %s
>>
>> -; RUN: llc -mtriple=thumbv8m.main -arm-execute-only -mattr=fp-armv8 %s
>> -o - \
>> +; RUN: llc -mtriple=thumbv8m.main -mattr=+execute-only -mattr=fp-armv8
>> %s -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-XO-FLOAT
>> --check-prefix=CHECK-XO-DOUBLE %s
>>
>> -; RUN: llc -mtriple=thumbv8m.maineb -arm-execute-only -mattr=fp-armv8 %s
>> -o - \
>> +; RUN: llc -mtriple=thumbv8m.maineb -mattr=+execute-only -mattr=fp-armv8
>> %s -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-XO-FLOAT
>> --check-prefix=CHECK-XO-DOUBLE-BE %s
>>
>> -; RUN: llc -mtriple=thumbv8m.main -arm-execute-only -mattr=fp-armv8
>> -relocation-model=ropi %s -o - \
>> +; RUN: llc -mtriple=thumbv8m.main -mattr=+execute-only -mattr=fp-armv8
>> -relocation-model=ropi %s -o - \
>>  ; RUN: | FileCheck --check-prefix=CHECK-XO-ROPI %s
>>
>>  define arm_aapcs_vfpcc float @test_vmov_f32() {
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/execute-only-big-stack-frame.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/execute-only-big-stack-frame.ll?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/execute-only-big-stack-frame.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/execute-only-big-stack-frame.ll Fri Jun
>> 30 19:55:22 2017
>> @@ -1,8 +1,8 @@
>> -; RUN: llc < %s -mtriple=thumbv7m -arm-execute-only -O0 %s -o - \
>> +; RUN: llc < %s -mtriple=thumbv7m -mattr=+execute-only -O0 %s -o - \
>>  ; RUN:  | FileCheck --check-prefix=CHECK-SUBW-ADDW %s
>> -; RUN: llc < %s -mtriple=thumbv8m.base -arm-execute-only -O0 %s -o - \
>> +; RUN: llc < %s -mtriple=thumbv8m.base -mattr=+execute-only -O0 %s -o - \
>>  ; RUN:  | FileCheck --check-prefix=CHECK-MOVW-MOVT-ADD %s
>> -; RUN: llc < %s -mtriple=thumbv8m.main -arm-execute-only -O0 %s -o - \
>> +; RUN: llc < %s -mtriple=thumbv8m.main -mattr=+execute-only -O0 %s -o - \
>>  ; RUN:  | FileCheck --check-prefix=CHECK-SUBW-ADDW %s
>>
>>  define i8 @test_big_stack_frame() {
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/execute-only-section.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/execute-only-section.ll?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/execute-only-section.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/execute-only-section.ll Fri Jun 30
>> 19:55:22 2017
>> @@ -1,6 +1,6 @@
>> -; RUN: llc < %s -mtriple=thumbv7m -arm-execute-only %s -o - | FileCheck
>> %s
>> -; RUN: llc < %s -mtriple=thumbv8m.base -arm-execute-only %s -o - |
>> FileCheck %s
>> -; RUN: llc < %s -mtriple=thumbv8m.main -arm-execute-only %s -o - |
>> FileCheck %s
>> +; RUN: llc < %s -mtriple=thumbv7m -mattr=+execute-only %s -o - |
>> FileCheck %s
>> +; RUN: llc < %s -mtriple=thumbv8m.base -mattr=+execute-only %s -o - |
>> FileCheck %s
>> +; RUN: llc < %s -mtriple=thumbv8m.main -mattr=+execute-only %s -o - |
>> FileCheck %s
>>
>>  ; CHECK:     .section .text,"axy",%progbits,unique,0
>>  ; CHECK-NOT: .section
>>
>> Modified: llvm/trunk/test/CodeGen/ARM/execute-only.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/execute-only.ll?rev=306927&r1=306926&r2=306927&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/ARM/execute-only.ll (original)
>> +++ llvm/trunk/test/CodeGen/ARM/execute-only.ll Fri Jun 30 19:55:22 2017
>> @@ -1,6 +1,6 @@
>> -; RUN: llc -mtriple=thumbv8m.base-eabi -arm-execute-only %s -o - |
>> FileCheck --check-prefix=CHECK --check-prefix=CHECK-T2BASE %s
>> -; RUN: llc -mtriple=thumbv7m-eabi      -arm-execute-only %s -o - |
>> FileCheck --check-prefix=CHECK --check-prefix=CHECK-T2 %s
>> -; RUN: llc -mtriple=thumbv8m.main-eabi -arm-execute-only %s -o - |
>> FileCheck --check-prefix=CHECK --check-prefix=CHECK-T2 %s
>> +; RUN: llc -mtriple=thumbv8m.base-eabi -mattr=+execute-only %s -o - |
>> FileCheck --check-prefix=CHECK --check-prefix=CHECK-T2BASE %s
>> +; RUN: llc -mtriple=thumbv7m-eabi      -mattr=+execute-only %s -o - |
>> FileCheck --check-prefix=CHECK --check-prefix=CHECK-T2 %s
>> +; RUN: llc -mtriple=thumbv8m.main-eabi -mattr=+execute-only %s -o - |
>> FileCheck --check-prefix=CHECK --check-prefix=CHECK-T2 %s
>>
>>  @var = global i32 0
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171009/a92965c0/attachment-0001.html>


More information about the llvm-commits mailing list