From 504473e6ae1d25b8b25bb5846db7c955c4267447 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 26 May 2015 00:52:18 +0000 Subject: [PATCH] Stop using MCSectionData in MCExpr.h. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238163 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCExpr.h | 3 +-- include/llvm/MC/MCMachObjectWriter.h | 4 +-- lib/MC/MCExpr.cpp | 3 +-- lib/MC/MachObjectWriter.cpp | 18 ++++++------- .../ARM/MCTargetDesc/ARMMachObjectWriter.cpp | 25 ++++++++----------- .../MCTargetDesc/PPCMachObjectWriter.cpp | 13 ++++------ .../X86/MCTargetDesc/X86MachObjectWriter.cpp | 13 ++++------ 7 files changed, 33 insertions(+), 46 deletions(-) diff --git a/include/llvm/MC/MCExpr.h b/include/llvm/MC/MCExpr.h index bfa4fdf4958..b38ad7daee3 100644 --- a/include/llvm/MC/MCExpr.h +++ b/include/llvm/MC/MCExpr.h @@ -21,13 +21,12 @@ class MCAssembler; class MCContext; class MCFixup; class MCSection; -class MCSectionData; class MCStreamer; class MCSymbol; class MCValue; class raw_ostream; class StringRef; -typedef DenseMap SectionAddrMap; +typedef DenseMap SectionAddrMap; /// \brief Base class for the full range of assembler expressions which are /// needed for parsing. diff --git a/include/llvm/MC/MCMachObjectWriter.h b/include/llvm/MC/MCMachObjectWriter.h index cb73791eb22..a1a6986e95d 100644 --- a/include/llvm/MC/MCMachObjectWriter.h +++ b/include/llvm/MC/MCMachObjectWriter.h @@ -141,8 +141,8 @@ public: SectionAddrMap &getSectionAddressMap() { return SectionAddress; } - uint64_t getSectionAddress(const MCSectionData* SD) const { - return SectionAddress.lookup(SD); + uint64_t getSectionAddress(const MCSection *Sec) const { + return SectionAddress.lookup(Sec); } uint64_t getSymbolAddress(const MCSymbol &S, const MCAsmLayout &Layout) const; diff --git a/lib/MC/MCExpr.cpp b/lib/MC/MCExpr.cpp index 47a1efe28b6..bf7396ed3ad 100644 --- a/lib/MC/MCExpr.cpp +++ b/lib/MC/MCExpr.cpp @@ -501,8 +501,7 @@ static void AttemptToFoldSymbolOffsetDifference( Addend += Layout->getSymbolOffset(A->getSymbol()) - Layout->getSymbolOffset(B->getSymbol()); if (Addrs && (&SecA != &SecB)) - Addend += (Addrs->lookup(&SecA.getSectionData()) - - Addrs->lookup(&SecB.getSectionData())); + Addend += (Addrs->lookup(&SecA) - Addrs->lookup(&SecB)); // Pointers to Thumb symbols need to have their low-bit set to allow // for interworking. diff --git a/lib/MC/MachObjectWriter.cpp b/lib/MC/MachObjectWriter.cpp index 585b4f74773..040911191c6 100644 --- a/lib/MC/MachObjectWriter.cpp +++ b/lib/MC/MachObjectWriter.cpp @@ -67,7 +67,7 @@ bool MachObjectWriter::isFixupKindPCRel(const MCAssembler &Asm, unsigned Kind) { uint64_t MachObjectWriter::getFragmentAddress(const MCFragment *Fragment, const MCAsmLayout &Layout) const { - return getSectionAddress(&Fragment->getParent()->getSectionData()) + + return getSectionAddress(Fragment->getParent()) + Layout.getFragmentOffset(Fragment); } @@ -101,14 +101,14 @@ uint64_t MachObjectWriter::getSymbolAddress(const MCSymbol &S, return Address; } - return getSectionAddress( - &S.getData().getFragment()->getParent()->getSectionData()) + + return getSectionAddress(S.getData().getFragment()->getParent()) + Layout.getSymbolOffset(S); } uint64_t MachObjectWriter::getPaddingSize(const MCSectionData *SD, const MCAsmLayout &Layout) const { - uint64_t EndAddr = getSectionAddress(SD) + Layout.getSectionAddressSize(SD); + uint64_t EndAddr = + getSectionAddress(&SD->getSection()) + Layout.getSectionAddressSize(SD); unsigned Next = SD->getSection().getLayoutOrder() + 1; if (Next >= Layout.getSectionOrder().size()) return 0; @@ -217,10 +217,10 @@ void MachObjectWriter::WriteSection(const MCAssembler &Asm, WriteBytes(Section.getSectionName(), 16); WriteBytes(Section.getSegmentName(), 16); if (is64Bit()) { - Write64(getSectionAddress(&SD)); // address + Write64(getSectionAddress(&SD.getSection())); // address Write64(SectionSize); // size } else { - Write32(getSectionAddress(&SD)); // address + Write32(getSectionAddress(&SD.getSection())); // address Write32(SectionSize); // size } Write32(FileOffset); @@ -649,7 +649,7 @@ void MachObjectWriter::computeSectionAddresses(const MCAssembler &Asm, const MCSectionData *SD = Order[i]; StartAddress = RoundUpToAlignment(StartAddress, SD->getSection().getAlignment()); - SectionAddress[SD] = StartAddress; + SectionAddress[&SD->getSection()] = StartAddress; StartAddress += Layout.getSectionAddressSize(SD); // Explicitly pad the section to match the alignment requirements of the @@ -804,7 +804,7 @@ void MachObjectWriter::WriteObject(MCAssembler &Asm, for (MCAssembler::const_iterator it = Asm.begin(), ie = Asm.end(); it != ie; ++it) { const MCSectionData &SD = it->getSectionData(); - uint64_t Address = getSectionAddress(&SD); + uint64_t Address = getSectionAddress(&*it); uint64_t Size = Layout.getSectionAddressSize(&SD); uint64_t FileSize = Layout.getSectionFileSize(&SD); FileSize += getPaddingSize(&SD, Layout); @@ -837,7 +837,7 @@ void MachObjectWriter::WriteObject(MCAssembler &Asm, const MCSectionData &SD = it->getSectionData(); std::vector &Relocs = Relocations[&SD]; unsigned NumRelocs = Relocs.size(); - uint64_t SectionStart = SectionDataStart + getSectionAddress(&SD); + uint64_t SectionStart = SectionDataStart + getSectionAddress(&*it); WriteSection(Asm, Layout, SD, SectionStart, RelocTableEnd, NumRelocs); RelocTableEnd += NumRelocs * sizeof(MachO::any_relocation_info); } diff --git a/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp b/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp index 3199efb1935..3bf8f72a25d 100644 --- a/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp +++ b/lib/Target/ARM/MCTargetDesc/ARMMachObjectWriter.cpp @@ -161,8 +161,8 @@ RecordARMScatteredHalfRelocation(MachObjectWriter *Writer, uint32_t Value = Writer->getSymbolAddress(*A, Layout); uint32_t Value2 = 0; - uint64_t SecAddr = Writer->getSectionAddress( - &A_SD->getFragment()->getParent()->getSectionData()); + uint64_t SecAddr = + Writer->getSectionAddress(A_SD->getFragment()->getParent()); FixedValue += SecAddr; if (const MCSymbolRefExpr *B = Target.getSymB()) { @@ -176,8 +176,7 @@ RecordARMScatteredHalfRelocation(MachObjectWriter *Writer, // Select the appropriate difference relocation type. Type = MachO::ARM_RELOC_HALF_SECTDIFF; Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout); - FixedValue -= Writer->getSectionAddress( - &B_SD->getFragment()->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(B_SD->getFragment()->getParent()); } // Relocations are written out in reverse order, so the PAIR comes first. @@ -265,8 +264,8 @@ void ARMMachObjectWriter::RecordARMScatteredRelocation(MachObjectWriter *Writer, "' can not be undefined in a subtraction expression"); uint32_t Value = Writer->getSymbolAddress(*A, Layout); - uint64_t SecAddr = Writer->getSectionAddress( - &A_SD->getFragment()->getParent()->getSectionData()); + uint64_t SecAddr = + Writer->getSectionAddress(A_SD->getFragment()->getParent()); FixedValue += SecAddr; uint32_t Value2 = 0; @@ -282,8 +281,7 @@ void ARMMachObjectWriter::RecordARMScatteredRelocation(MachObjectWriter *Writer, // Select the appropriate difference relocation type. Type = MachO::ARM_RELOC_SECTDIFF; Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout); - FixedValue -= Writer->getSectionAddress( - &B_SD->getFragment()->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(B_SD->getFragment()->getParent()); } // Relocations are written out in reverse order, so the PAIR comes first. @@ -339,9 +337,8 @@ bool ARMMachObjectWriter::requiresExternRelocation(MachObjectWriter *Writer, // BL/BLX also use external relocations when an internal relocation // would result in the target being out of range. This gives the linker // enough information to generate a branch island. - const MCSectionData &SymSD = Asm.getSectionData(S.getSection()); - Value += Writer->getSectionAddress(&SymSD); - Value -= Writer->getSectionAddress(&Fragment.getParent()->getSectionData()); + Value += Writer->getSectionAddress(&S.getSection()); + Value -= Writer->getSectionAddress(Fragment.getParent()); // If the resultant value would be out of range for an internal relocation, // use an external instead. if (Value > Range || Value < -(Range + 1)) @@ -430,13 +427,11 @@ void ARMMachObjectWriter::RecordRelocation(MachObjectWriter *Writer, } else { // The index is the section ordinal (1-based). const MCSection &Sec = A->getSection(); - const MCSectionData &SymSD = Asm.getSectionData(Sec); Index = Sec.getOrdinal() + 1; - FixedValue += Writer->getSectionAddress(&SymSD); + FixedValue += Writer->getSectionAddress(&Sec); } if (IsPCRel) - FixedValue -= - Writer->getSectionAddress(&Fragment->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(Fragment->getParent()); // The type is determined by the fixup kind. Type = RelocType; diff --git a/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp b/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp index 6fec196909f..396487c69fa 100644 --- a/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp +++ b/lib/Target/PowerPC/MCTargetDesc/PPCMachObjectWriter.cpp @@ -213,8 +213,8 @@ bool PPCMachObjectWriter::RecordScatteredRelocation( "' can not be undefined in a subtraction expression"); uint32_t Value = Writer->getSymbolAddress(*A, Layout); - uint64_t SecAddr = Writer->getSectionAddress( - &A_SD->getFragment()->getParent()->getSectionData()); + uint64_t SecAddr = + Writer->getSectionAddress(A_SD->getFragment()->getParent()); FixedValue += SecAddr; uint32_t Value2 = 0; @@ -227,8 +227,7 @@ bool PPCMachObjectWriter::RecordScatteredRelocation( // FIXME: is Type correct? see include/llvm/Support/MachO.h Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout); - FixedValue -= Writer->getSectionAddress( - &B_SD->getFragment()->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(B_SD->getFragment()->getParent()); } // FIXME: does FixedValue get used?? @@ -366,13 +365,11 @@ void PPCMachObjectWriter::RecordPPCRelocation( } else { // The index is the section ordinal (1-based). const MCSection &Sec = A->getSection(); - const MCSectionData &SymSD = Asm.getSectionData(Sec); Index = Sec.getOrdinal() + 1; - FixedValue += Writer->getSectionAddress(&SymSD); + FixedValue += Writer->getSectionAddress(&Sec); } if (IsPCRel) - FixedValue -= - Writer->getSectionAddress(&Fragment->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(Fragment->getParent()); } // struct relocation_info (8 bytes) diff --git a/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp b/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp index 05b58866b27..0986b9428cd 100644 --- a/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp +++ b/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp @@ -364,8 +364,8 @@ bool X86MachObjectWriter::RecordScatteredRelocation(MachObjectWriter *Writer, false); uint32_t Value = Writer->getSymbolAddress(*A, Layout); - uint64_t SecAddr = Writer->getSectionAddress( - &A_SD->getFragment()->getParent()->getSectionData()); + uint64_t SecAddr = + Writer->getSectionAddress(A_SD->getFragment()->getParent()); FixedValue += SecAddr; uint32_t Value2 = 0; @@ -385,8 +385,7 @@ bool X86MachObjectWriter::RecordScatteredRelocation(MachObjectWriter *Writer, Type = A_SD->isExternal() ? (unsigned)MachO::GENERIC_RELOC_SECTDIFF : (unsigned)MachO::GENERIC_RELOC_LOCAL_SECTDIFF; Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout); - FixedValue -= Writer->getSectionAddress( - &B_SD->getFragment()->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(B_SD->getFragment()->getParent()); } // Relocations are written out in reverse order, so the PAIR comes first. @@ -560,13 +559,11 @@ void X86MachObjectWriter::RecordX86Relocation(MachObjectWriter *Writer, } else { // The index is the section ordinal (1-based). const MCSection &Sec = A->getSection(); - const MCSectionData &SymSD = Asm.getSectionData(Sec); Index = Sec.getOrdinal() + 1; - FixedValue += Writer->getSectionAddress(&SymSD); + FixedValue += Writer->getSectionAddress(&Sec); } if (IsPCRel) - FixedValue -= - Writer->getSectionAddress(&Fragment->getParent()->getSectionData()); + FixedValue -= Writer->getSectionAddress(Fragment->getParent()); Type = MachO::GENERIC_RELOC_VANILLA; }