LLVM API Documentation
00001 //===-- llvm/Target/TargetMachOWriterInfo.h - MachO Writer Info--*- C++ -*-===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file defines the TargetMachOWriterInfo class. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #ifndef LLVM_TARGET_TARGETMACHOWRITERINFO_H 00015 #define LLVM_TARGET_TARGETMACHOWRITERINFO_H 00016 00017 #include "llvm/CodeGen/MachineRelocation.h" 00018 00019 namespace llvm { 00020 00021 class MachineBasicBlock; 00022 class OutputBuffer; 00023 00024 //===--------------------------------------------------------------------===// 00025 // TargetMachOWriterInfo 00026 //===--------------------------------------------------------------------===// 00027 00028 class TargetMachOWriterInfo { 00029 uint32_t CPUType; // CPU specifier 00030 uint32_t CPUSubType; // Machine specifier 00031 public: 00032 // The various CPU_TYPE_* constants are already defined by at least one 00033 // system header file and create compilation errors if not respected. 00034 #if !defined(CPU_TYPE_I386) 00035 #define CPU_TYPE_I386 7 00036 #endif 00037 #if !defined(CPU_TYPE_X86_64) 00038 #define CPU_TYPE_X86_64 (CPU_TYPE_I386 | 0x1000000) 00039 #endif 00040 #if !defined(CPU_TYPE_ARM) 00041 #define CPU_TYPE_ARM 12 00042 #endif 00043 #if !defined(CPU_TYPE_SPARC) 00044 #define CPU_TYPE_SPARC 14 00045 #endif 00046 #if !defined(CPU_TYPE_POWERPC) 00047 #define CPU_TYPE_POWERPC 18 00048 #endif 00049 #if !defined(CPU_TYPE_POWERPC64) 00050 #define CPU_TYPE_POWERPC64 (CPU_TYPE_POWERPC | 0x1000000) 00051 #endif 00052 00053 // Constants for the cputype field 00054 // see <mach/machine.h> 00055 enum { 00056 HDR_CPU_TYPE_I386 = CPU_TYPE_I386, 00057 HDR_CPU_TYPE_X86_64 = CPU_TYPE_X86_64, 00058 HDR_CPU_TYPE_ARM = CPU_TYPE_ARM, 00059 HDR_CPU_TYPE_SPARC = CPU_TYPE_SPARC, 00060 HDR_CPU_TYPE_POWERPC = CPU_TYPE_POWERPC, 00061 HDR_CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC64 00062 }; 00063 00064 #if !defined(CPU_SUBTYPE_I386_ALL) 00065 #define CPU_SUBTYPE_I386_ALL 3 00066 #endif 00067 #if !defined(CPU_SUBTYPE_X86_64_ALL) 00068 #define CPU_SUBTYPE_X86_64_ALL 3 00069 #endif 00070 #if !defined(CPU_SUBTYPE_ARM_ALL) 00071 #define CPU_SUBTYPE_ARM_ALL 0 00072 #endif 00073 #if !defined(CPU_SUBTYPE_SPARC_ALL) 00074 #define CPU_SUBTYPE_SPARC_ALL 0 00075 #endif 00076 #if !defined(CPU_SUBTYPE_POWERPC_ALL) 00077 #define CPU_SUBTYPE_POWERPC_ALL 0 00078 #endif 00079 00080 // Constants for the cpusubtype field 00081 // see <mach/machine.h> 00082 enum { 00083 HDR_CPU_SUBTYPE_I386_ALL = CPU_SUBTYPE_I386_ALL, 00084 HDR_CPU_SUBTYPE_X86_64_ALL = CPU_SUBTYPE_X86_64_ALL, 00085 HDR_CPU_SUBTYPE_ARM_ALL = CPU_SUBTYPE_ARM_ALL, 00086 HDR_CPU_SUBTYPE_SPARC_ALL = CPU_SUBTYPE_SPARC_ALL, 00087 HDR_CPU_SUBTYPE_POWERPC_ALL = CPU_SUBTYPE_POWERPC_ALL 00088 }; 00089 00090 TargetMachOWriterInfo(uint32_t cputype, uint32_t cpusubtype) 00091 : CPUType(cputype), CPUSubType(cpusubtype) {} 00092 virtual ~TargetMachOWriterInfo(); 00093 00094 virtual MachineRelocation GetJTRelocation(unsigned Offset, 00095 MachineBasicBlock *MBB) const; 00096 00097 virtual unsigned GetTargetRelocation(MachineRelocation &MR, 00098 unsigned FromIdx, 00099 unsigned ToAddr, 00100 unsigned ToIdx, 00101 OutputBuffer &RelocOut, 00102 OutputBuffer &SecOut, 00103 bool Scattered, 00104 bool Extern) const { return 0; } 00105 00106 uint32_t getCPUType() const { return CPUType; } 00107 uint32_t getCPUSubType() const { return CPUSubType; } 00108 }; 00109 00110 } // end llvm namespace 00111 00112 #endif // LLVM_TARGET_TARGETMACHOWRITERINFO_H