diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-05-16 00:48:58 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-05-16 00:48:58 +0000 |
commit | 09bfa58edd62af6ecbf1ea5177e27e55ab782160 (patch) | |
tree | 755ced1155cc5b92085dbe060e70e3e4ab2513dc /llvm/lib/Target | |
parent | f48de1cb7b1c3c59011f9d3d34e00bcf8ca29b01 (diff) | |
download | bcm5719-llvm-09bfa58edd62af6ecbf1ea5177e27e55ab782160.tar.gz bcm5719-llvm-09bfa58edd62af6ecbf1ea5177e27e55ab782160.zip |
MC: Change MCFragment::Atom to an MCSymbol, NFC
Change `MCFragment::Atom` from an `MCSymbolData` to an `MCSymbol`,
moving in the direction of removing the back-pointer.
llvm-svn: 237497
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp | 45 | ||||
-rw-r--r-- | llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp | 28 |
2 files changed, 41 insertions, 32 deletions
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp index 61649c44142..faaf33a9710 100644 --- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp +++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MachObjectWriter.cpp @@ -154,7 +154,7 @@ void AArch64MachObjectWriter::RecordRelocation( unsigned Index = 0; unsigned Type = 0; unsigned Kind = Fixup.getKind(); - const MCSymbolData *RelSymbol = nullptr; + const MCSymbol *RelSymbol = nullptr; FixupOffset += Fixup.getOffset(); @@ -211,11 +211,11 @@ void AArch64MachObjectWriter::RecordRelocation( } else if (Target.getSymB()) { // A - B + constant const MCSymbol *A = &Target.getSymA()->getSymbol(); const MCSymbolData &A_SD = Asm.getSymbolData(*A); - const MCSymbolData *A_Base = Asm.getAtom(&A_SD); + const MCSymbol *A_Base = Asm.getAtom(&A_SD); const MCSymbol *B = &Target.getSymB()->getSymbol(); const MCSymbolData &B_SD = Asm.getSymbolData(*B); - const MCSymbolData *B_Base = Asm.getAtom(&B_SD); + const MCSymbol *B_Base = Asm.getAtom(&B_SD); // Check for "_foo@got - .", which comes through here as: // Ltmp0: @@ -230,7 +230,8 @@ void AArch64MachObjectWriter::RecordRelocation( MachO::any_relocation_info MRE; MRE.r_word0 = FixupOffset; MRE.r_word1 = (IsPCRel << 24) | (Log2Size << 25) | (Type << 28); - Writer->addRelocation(A_Base, Fragment->getParent(), MRE); + Writer->addRelocation(A_Base ? &A_Base->getData() : nullptr, + Fragment->getParent(), MRE); return; } else if (Target.getSymA()->getKind() != MCSymbolRefExpr::VK_None || Target.getSymB()->getKind() != MCSymbolRefExpr::VK_None) @@ -265,23 +266,24 @@ void AArch64MachObjectWriter::RecordRelocation( Asm.getContext().FatalError(Fixup.getLoc(), "unsupported relocation with identical base"); - Value += (!A_SD.getFragment() ? 0 - : Writer->getSymbolAddress(&A_SD, Layout)) - - (!A_Base || !A_Base->getFragment() - ? 0 - : Writer->getSymbolAddress(A_Base, Layout)); - Value -= (!B_SD.getFragment() ? 0 - : Writer->getSymbolAddress(&B_SD, Layout)) - - (!B_Base || !B_Base->getFragment() - ? 0 - : Writer->getSymbolAddress(B_Base, Layout)); + Value += + (!A_SD.getFragment() ? 0 : Writer->getSymbolAddress(&A_SD, Layout)) - + (!A_Base || !A_Base->getData().getFragment() + ? 0 + : Writer->getSymbolAddress(&A_Base->getData(), Layout)); + Value -= + (!B_SD.getFragment() ? 0 : Writer->getSymbolAddress(&B_SD, Layout)) - + (!B_Base || !B_Base->getData().getFragment() + ? 0 + : Writer->getSymbolAddress(&B_Base->getData(), Layout)); Type = MachO::ARM64_RELOC_UNSIGNED; MachO::any_relocation_info MRE; MRE.r_word0 = FixupOffset; MRE.r_word1 = (IsPCRel << 24) | (Log2Size << 25) | (Type << 28); - Writer->addRelocation(A_Base, Fragment->getParent(), MRE); + Writer->addRelocation(A_Base ? &A_Base->getData() : nullptr, + Fragment->getParent(), MRE); RelSymbol = B_Base; Type = MachO::ARM64_RELOC_SUBTRACTOR; @@ -299,7 +301,7 @@ void AArch64MachObjectWriter::RecordRelocation( } const MCSymbolData &SD = Asm.getSymbolData(*Symbol); - const MCSymbolData *Base = Asm.getAtom(&SD); + const MCSymbol *Base = Asm.getAtom(&SD); // If the symbol is a variable and we weren't able to get a Base for it // (i.e., it's not in the symbol table associated with a section) resolve @@ -342,8 +344,9 @@ void AArch64MachObjectWriter::RecordRelocation( RelSymbol = Base; // Add the local offset, if needed. - if (Base != &SD) - Value += Layout.getSymbolOffset(&SD) - Layout.getSymbolOffset(Base); + if (&Base->getData() != &SD) + Value += Layout.getSymbolOffset(&SD) - + Layout.getSymbolOffset(&Base->getData()); } else if (Symbol->isInSection()) { if (!CanUseLocalRelocation) Asm.getContext().FatalError( @@ -389,7 +392,8 @@ void AArch64MachObjectWriter::RecordRelocation( MRE.r_word0 = FixupOffset; MRE.r_word1 = (Index << 0) | (IsPCRel << 24) | (Log2Size << 25) | (Type << 28); - Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE); + Writer->addRelocation(RelSymbol ? &RelSymbol->getData() : nullptr, + Fragment->getParent(), MRE); // Now set up the Addend relocation. Type = MachO::ARM64_RELOC_ADDEND; @@ -410,7 +414,8 @@ void AArch64MachObjectWriter::RecordRelocation( MRE.r_word0 = FixupOffset; MRE.r_word1 = (Index << 0) | (IsPCRel << 24) | (Log2Size << 25) | (Type << 28); - Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE); + Writer->addRelocation(RelSymbol ? &RelSymbol->getData() : nullptr, + Fragment->getParent(), MRE); } MCObjectWriter *llvm::createAArch64MachObjectWriter(raw_pwrite_stream &OS, diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp index b0ddd767459..a58c3a45bd2 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MachObjectWriter.cpp @@ -113,7 +113,7 @@ void X86MachObjectWriter::RecordX86_64Relocation( unsigned Index = 0; unsigned IsExtern = 0; unsigned Type = 0; - const MCSymbolData *RelSymbol = nullptr; + const MCSymbol *RelSymbol = nullptr; Value = Target.getConstant(); @@ -143,13 +143,13 @@ void X86MachObjectWriter::RecordX86_64Relocation( if (A->isTemporary()) A = &Writer->findAliasedSymbol(*A); const MCSymbolData &A_SD = Asm.getSymbolData(*A); - const MCSymbolData *A_Base = Asm.getAtom(&A_SD); + const MCSymbol *A_Base = Asm.getAtom(&A_SD); const MCSymbol *B = &Target.getSymB()->getSymbol(); if (B->isTemporary()) B = &Writer->findAliasedSymbol(*B); const MCSymbolData &B_SD = Asm.getSymbolData(*B); - const MCSymbolData *B_Base = Asm.getAtom(&B_SD); + const MCSymbol *B_Base = Asm.getAtom(&B_SD); // Neither symbol can be modified. if (Target.getSymA()->getKind() != MCSymbolRefExpr::VK_None || @@ -184,10 +184,12 @@ void X86MachObjectWriter::RecordX86_64Relocation( Name + "' can not be undefined in a subtraction expression"); } - Value += Writer->getSymbolAddress(&A_SD, Layout) - - (!A_Base ? 0 : Writer->getSymbolAddress(A_Base, Layout)); - Value -= Writer->getSymbolAddress(&B_SD, Layout) - - (!B_Base ? 0 : Writer->getSymbolAddress(B_Base, Layout)); + Value += + Writer->getSymbolAddress(&A_SD, Layout) - + (!A_Base ? 0 : Writer->getSymbolAddress(&A_Base->getData(), Layout)); + Value -= + Writer->getSymbolAddress(&B_SD, Layout) - + (!B_Base ? 0 : Writer->getSymbolAddress(&B_Base->getData(), Layout)); if (!A_Base) Index = A_SD.getFragment()->getParent()->getOrdinal() + 1; @@ -197,7 +199,8 @@ void X86MachObjectWriter::RecordX86_64Relocation( MRE.r_word0 = FixupOffset; MRE.r_word1 = (Index << 0) | (IsPCRel << 24) | (Log2Size << 25) | (Type << 28); - Writer->addRelocation(A_Base, Fragment->getParent(), MRE); + Writer->addRelocation(A_Base ? &A_Base->getData() : nullptr, + Fragment->getParent(), MRE); if (B_Base) RelSymbol = B_Base; @@ -230,9 +233,9 @@ void X86MachObjectWriter::RecordX86_64Relocation( // non-local symbol). if (RelSymbol) { // Add the local offset, if needed. - if (RelSymbol != &SD) - Value += - Layout.getSymbolOffset(&SD) - Layout.getSymbolOffset(RelSymbol); + if (&RelSymbol->getData() != &SD) + Value += Layout.getSymbolOffset(&SD) - + Layout.getSymbolOffset(&RelSymbol->getData()); } else if (Symbol->isInSection() && !Symbol->isVariable()) { // The index is the section ordinal (1-based). Index = SD.getFragment()->getParent()->getOrdinal() + 1; @@ -336,7 +339,8 @@ void X86MachObjectWriter::RecordX86_64Relocation( MRE.r_word0 = FixupOffset; MRE.r_word1 = (Index << 0) | (IsPCRel << 24) | (Log2Size << 25) | (IsExtern << 27) | (Type << 28); - Writer->addRelocation(RelSymbol, Fragment->getParent(), MRE); + Writer->addRelocation(RelSymbol ? &RelSymbol->getData() : nullptr, + Fragment->getParent(), MRE); } bool X86MachObjectWriter::RecordScatteredRelocation(MachObjectWriter *Writer, |