[llvm-commits] [llvm] r98068 - in /llvm/trunk/lib/Target/ARM: ARMISelLowering.cpp ARMTargetObjectFile.cpp ARMTargetObjectFile.h CMakeLists.txt

Jim Grosbach grosbach at apple.com
Tue Mar 9 11:10:55 PST 2010


Very nice! Thanks, Bill.

-jim

On Mar 9, 2010, at 10:31 AM, Bill Wendling wrote:

> Author: void
> Date: Tue Mar  9 12:31:07 2010
> New Revision: 98068
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=98068&view=rev
> Log:
> The ARM EH experiment worked!
> 
> Place the LSDA into the TEXT section for ARM platforms. This involves making the
> encoding indirect, pcrel, and sdata4 instead of an absolute pointer. The
> references to the type infos are then non-lazy pointers. Revision 98019 changed
> the encoding of non-lazy pointers to add the symbol to the non-lazy pointer
> definition if it's a local symbol (otherwise, it's external and set to '0' so
> that the loader can adjust it to the real value). This paved the way for this
> change to work on ARM.
> 
> Added:
>    llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp
> Modified:
>    llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
>    llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h
>    llvm/trunk/lib/Target/ARM/CMakeLists.txt
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp?rev=98068&r1=98067&r2=98068&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Tue Mar  9 12:31:07 2010
> @@ -40,17 +40,11 @@
> #include "llvm/MC/MCSectionMachO.h"
> #include "llvm/Target/TargetOptions.h"
> #include "llvm/ADT/VectorExtras.h"
> -#include "llvm/Support/CommandLine.h"
> -#include "llvm/Support/Dwarf.h"
> #include "llvm/Support/ErrorHandling.h"
> #include "llvm/Support/MathExtras.h"
> #include "llvm/Support/raw_ostream.h"
> #include <sstream>
> using namespace llvm;
> -using namespace dwarf;
> -
> -static cl::opt<bool> EnableARMEHTest("enable-arm-eh-test", cl::Hidden,
> -    cl::desc("Enable ARM EH Test"));
> 
> static bool CC_ARM_APCS_Custom_f64(unsigned &ValNo, EVT &ValVT, EVT &LocVT,
>                                    CCValAssign::LocInfo &LocInfo,
> @@ -134,32 +128,9 @@
>   addTypeForNEON(VT, MVT::v2f64, MVT::v4i32);
> }
> 
> -namespace llvm {
> -
> -  // FIXME: This is a test of <rdar://problem/6804645>.
> -  class ARMMachOTargetObjectFile : public TargetLoweringObjectFileMachO {
> -  public:
> -    virtual void Initialize(MCContext &Ctx, const TargetMachine &TM) {
> -      TargetLoweringObjectFileMachO::Initialize(Ctx, TM);
> -
> -      // Exception Handling.
> -      LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
> -                                    SectionKind::getReadOnlyWithRel());
> -    }
> -
> -    virtual unsigned getTTypeEncoding() const {
> -      return DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4;
> -    }
> -  };
> -
> -}
> -
> static TargetLoweringObjectFile *createTLOF(TargetMachine &TM) {
>   if (TM.getSubtarget<ARMSubtarget>().isTargetDarwin())
> -    if (EnableARMEHTest)
> -      return new ARMMachOTargetObjectFile();
> -    else
> -      return new TargetLoweringObjectFileMachO();
> +    return new ARMMachOTargetObjectFile();
> 
>   return new ARMElfTargetObjectFile();
> }
> 
> Added: llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp?rev=98068&view=auto
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp (added)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.cpp Tue Mar  9 12:31:07 2010
> @@ -0,0 +1,54 @@
> +//===-- llvm/Target/ARMTargetObjectFile.cpp - ARM Object Info Impl --------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "ARMTargetObjectFile.h"
> +#include "ARMSubtarget.h"
> +#include "llvm/MC/MCSectionELF.h"
> +#include "llvm/MC/MCSectionMachO.h"
> +#include "llvm/Support/Dwarf.h"
> +#include "llvm/Target/TargetMachine.h"
> +using namespace llvm;
> +using namespace dwarf;
> +
> +//===----------------------------------------------------------------------===//
> +//                               ELF Target
> +//===----------------------------------------------------------------------===//
> +
> +void ARMElfTargetObjectFile::Initialize(MCContext &Ctx,
> +                                        const TargetMachine &TM) {
> +  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
> +
> +  if (TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI()) {
> +    StaticCtorSection =
> +      getELFSection(".init_array", MCSectionELF::SHT_INIT_ARRAY,
> +                    MCSectionELF::SHF_WRITE | MCSectionELF::SHF_ALLOC,
> +                    SectionKind::getDataRel());
> +    StaticDtorSection =
> +      getELFSection(".fini_array", MCSectionELF::SHT_FINI_ARRAY,
> +                    MCSectionELF::SHF_WRITE | MCSectionELF::SHF_ALLOC,
> +                    SectionKind::getDataRel());
> +  }
> +}
> +
> +//===----------------------------------------------------------------------===//
> +//                              Mach-O Target
> +//===----------------------------------------------------------------------===//
> +
> +void ARMMachOTargetObjectFile::Initialize(MCContext &Ctx,
> +                                          const TargetMachine &TM) {
> +  TargetLoweringObjectFileMachO::Initialize(Ctx, TM);
> +
> +  // Exception Handling.
> +  LSDASection = getMachOSection("__TEXT", "__gcc_except_tab", 0,
> +                                SectionKind::getReadOnlyWithRel());
> +}
> +
> +unsigned ARMMachOTargetObjectFile::getTTypeEncoding() const {
> +  return DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4;
> +}
> 
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h?rev=98068&r1=98067&r2=98068&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetObjectFile.h Tue Mar  9 12:31:07 2010
> @@ -11,29 +11,31 @@
> #define LLVM_TARGET_ARM_TARGETOBJECTFILE_H
> 
> #include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
> -#include "llvm/MC/MCSectionELF.h"
> 
> namespace llvm {
> 
> -  class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF {
> -  public:
> -    ARMElfTargetObjectFile() : TargetLoweringObjectFileELF() {}
> -
> -    void Initialize(MCContext &Ctx, const TargetMachine &TM) {
> -      TargetLoweringObjectFileELF::Initialize(Ctx, TM);
> -
> -      if (TM.getSubtarget<ARMSubtarget>().isAAPCS_ABI()) {
> -        StaticCtorSection =
> -          getELFSection(".init_array", MCSectionELF::SHT_INIT_ARRAY,
> -                        MCSectionELF::SHF_WRITE | MCSectionELF::SHF_ALLOC,
> -                        SectionKind::getDataRel());
> -        StaticDtorSection =
> -          getELFSection(".fini_array", MCSectionELF::SHT_FINI_ARRAY,
> -                        MCSectionELF::SHF_WRITE | MCSectionELF::SHF_ALLOC,
> -                        SectionKind::getDataRel());
> -      }
> -    }
> -  };
> +class MCContext;
> +class TargetMachine;
> +
> +class ARMElfTargetObjectFile : public TargetLoweringObjectFileELF {
> +public:
> +  ARMElfTargetObjectFile() : TargetLoweringObjectFileELF() {}
> +
> +  virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
> +};
> +
> +// FIXME: This subclass isn't 100% necessary. It will become obsolete once we
> +//        can place all LSDAs into the TEXT section. See
> +//        <rdar://problem/6804645>.
> +class ARMMachOTargetObjectFile : public TargetLoweringObjectFileMachO {
> +public:
> +  ARMMachOTargetObjectFile() : TargetLoweringObjectFileMachO() {}
> +
> +  virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
> +
> +  virtual unsigned getTTypeEncoding() const;
> +};
> +
> } // end namespace llvm
> 
> #endif
> 
> Modified: llvm/trunk/lib/Target/ARM/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/CMakeLists.txt?rev=98068&r1=98067&r2=98068&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/ARM/CMakeLists.txt Tue Mar  9 12:31:07 2010
> @@ -27,6 +27,7 @@
>   ARMRegisterInfo.cpp
>   ARMSubtarget.cpp
>   ARMTargetMachine.cpp
> +  ARMTargetObjectFile.cpp
>   NEONMoveFix.cpp
>   NEONPreAllocPass.cpp
>   Thumb1InstrInfo.cpp
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list