diff options
| author | Jason Liu <jasonliu.development@gmail.com> | 2019-11-08 09:26:28 -0500 |
|---|---|---|
| committer | David Tenty <daltenty@ibm.com> | 2019-11-08 09:30:10 -0500 |
| commit | 0dc0572b48ed889e6f750fd65b876a0420805377 (patch) | |
| tree | 266c8f476b8d4b96db8ef9cea064169462ed9edd /llvm/lib/Target/PowerPC | |
| parent | e25bc5e0247141cb31093a370e22fe3249bdbb05 (diff) | |
| download | bcm5719-llvm-0dc0572b48ed889e6f750fd65b876a0420805377.tar.gz bcm5719-llvm-0dc0572b48ed889e6f750fd65b876a0420805377.zip | |
[XCOFF][AIX] Differentiate usage of label symbol and csect symbol
Summary:
We are using symbols to represent label and csect interchangeably before, and that could be a problem.
There are cases we would need to add storage mapping class to the symbol if that symbol is actually the name of a csect, but it's hard for us to figure out whether that symbol is a label or csect.
This patch intend to do the following:
1. Construct a QualName (A name include the storage mapping class)
MCSymbolXCOFF for every MCSectionXCOFF.
2. Keep a pointer to that QualName inside of MCSectionXCOFF.
3. Use that QualName whenever we need a symbol refers to that
MCSectionXCOFF.
4. Adapt the snowball effect from the above changes in
XCOFFObjectWriter.cpp.
Reviewers: xingxue, DiggerLin, sfertile, daltenty, hubert.reinterpretcast
Reviewed By: DiggerLin, daltenty
Subscribers: wuzish, nemanjai, mgorny, hiraditya, kbarton, jsji, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D69633
Diffstat (limited to 'llvm/lib/Target/PowerPC')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index 66236b72a1a..49365bcefa0 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -1752,15 +1752,15 @@ void PPCAIXAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { "not supported yet."); // Create the containing csect and switch to it. - MCSectionXCOFF *CSect = cast<MCSectionXCOFF>( + MCSectionXCOFF *Csect = cast<MCSectionXCOFF>( getObjFileLowering().SectionForGlobal(GV, GVKind, TM)); - OutStreamer->SwitchSection(CSect); + OutStreamer->SwitchSection(Csect); // Create the symbol, set its storage class, and emit it. MCSymbolXCOFF *GVSym = cast<MCSymbolXCOFF>(getSymbol(GV)); GVSym->setStorageClass( TargetLoweringObjectFileXCOFF::getStorageClassForGlobal(GV)); - GVSym->setContainingCsect(CSect); + GVSym->setContainingCsect(Csect); const DataLayout &DL = GV->getParent()->getDataLayout(); @@ -1771,9 +1771,10 @@ void PPCAIXAsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) { uint64_t Size = DL.getTypeAllocSize(GV->getType()->getElementType()); if (GVKind.isBSSLocal()) - OutStreamer->EmitXCOFFLocalCommonSymbol(GVSym, Size, Align); + OutStreamer->EmitXCOFFLocalCommonSymbol( + GVSym, Size, Csect->getQualNameSymbol(), Align); else - OutStreamer->EmitCommonSymbol(GVSym, Size, Align); + OutStreamer->EmitCommonSymbol(Csect->getQualNameSymbol(), Size, Align); return; } @@ -1813,11 +1814,9 @@ void PPCAIXAsmPrinter::EmitEndOfAsmFile(Module &M) { return; // Emit TOC base. - MCSymbol *TOCBaseSym = OutContext.getOrCreateSymbol(StringRef("TOC[TC0]")); MCSectionXCOFF *TOCBaseSection = OutStreamer->getContext().getXCOFFSection( StringRef("TOC"), XCOFF::XMC_TC0, XCOFF::XTY_SD, XCOFF::C_HIDEXT, SectionKind::getData()); - cast<MCSymbolXCOFF>(TOCBaseSym)->setContainingCsect(TOCBaseSection); // Switch to section to emit TOC base. OutStreamer->SwitchSection(TOCBaseSection); } |

