From 0f43b223209708da38610631e4ce5239597bffce Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Sat, 3 Feb 2007 02:37:51 +0000 Subject: [PATCH] Moved MachORelocation to its own header file. Have a call through the TargetMachOInfo object to the GetTargetRelocation method. Pass into it non-Mach-O-specific parameters. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33813 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/MachOWriter.h | 47 +++++++++--------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/include/llvm/CodeGen/MachOWriter.h b/include/llvm/CodeGen/MachOWriter.h index 0de04c0407c..bff94b4b2f4 100644 --- a/include/llvm/CodeGen/MachOWriter.h +++ b/include/llvm/CodeGen/MachOWriter.h @@ -27,6 +27,7 @@ namespace llvm { class Mangler; class MachineCodeEmitter; class MachOCodeEmitter; + class OutputBuffer; /// MachOSym - This struct contains information about each symbol that is /// added to logical symbol table for the module. This is eventually @@ -298,37 +299,6 @@ namespace llvm { initprot(VM_PROT_ALL), nsects(0), flags(0) { } }; - /// MachORelocation - This struct contains information about each relocation - /// that needs to be emitted to the file. - /// see - struct MachORelocation { - uint32_t r_address; // offset in the section to what is being relocated - uint32_t r_symbolnum; // symbol index if r_extern == 1 else section index - bool r_pcrel; // was relocated pc-relative already - uint8_t r_length; // length = 2 ^ r_length - bool r_extern; // - uint8_t r_type; // if not 0, machine-specific relocation type. - bool r_scattered; // 1 = scattered, 0 = non-scattered - int32_t r_value; // the value the item to be relocated is referring - // to. - - uint32_t getPackedFields() { - if (r_scattered) - return (1 << 31) | (r_pcrel << 30) | ((r_length & 3) << 28) | - ((r_type & 15) << 24) | (r_address & 0x00FFFFFF); - else - return (r_symbolnum << 8) | (r_pcrel << 7) | ((r_length & 3) << 5) | - (r_extern << 4) | (r_type & 15); - } - uint32_t getAddress() { return r_scattered ? r_value : r_address; } - - MachORelocation(uint32_t addr, uint32_t index, bool pcrel, uint8_t len, - bool ext, uint8_t type, bool scattered = false, - int32_t value = 0) : - r_address(addr), r_symbolnum(index), r_pcrel(pcrel), r_length(len), - r_extern(ext), r_type(type), r_scattered(scattered), r_value(value) {} - }; - /// MachOSection - This struct contains information about each section in a /// particular segment that is emitted to the file. This is eventually /// turned into the SectionCommand in the load command for a particlar @@ -635,8 +605,19 @@ namespace llvm { MachineBasicBlock *MBB) const { return TM.getMachOWriterInfo()->GetJTRelocation(Offset, MBB); } - virtual void GetTargetRelocation(MachineRelocation &MR, MachOSection &From, - MachOSection &To, bool Scattered) = 0; + + /// GetTargetRelocation - Returns the number of relocations. + unsigned GetTargetRelocation(MachineRelocation &MR, + unsigned FromIdx, + unsigned ToAddr, + unsigned ToIndex, + OutputBuffer &RelocOut, + OutputBuffer &SecOut, + bool Scattered) { + return TM.getMachOWriterInfo()->GetTargetRelocation(MR, FromIdx, ToAddr, + ToIndex, RelocOut, + SecOut, Scattered); + } }; } -- 2.34.1