[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