<div dir="ltr">Rafael, can I ask you to roll it back? I'll be offline until late night.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 16, 2014 at 5:34 PM, Bill Schmidt <span dir="ltr"><<a href="mailto:wschmidt@linux.vnet.ibm.com" target="_blank">wschmidt@linux.vnet.ibm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Rafael,<br>
<br>
We've had two tests failing on the clang-ppc64-elf-linux buildbot since<br>
this patch went in.<br>
<br>
******************** TEST (simple) 'fftbench' FAILED! ********************<br>
******************** TEST (simple) 'tramp3d-v4' FAILED! ********************<br>
<br>
Both appear to be segfaulting at run time.<br>
<br>
Thanks,<br>
Bill<br>
<div class="HOEnZb"><div class="h5"><br>
On Wed, 2014-10-15 at 18:55 +0000, Rafael Espindola wrote:<br>
> Author: rafael<br>
> Date: Wed Oct 15 13:55:30 2014<br>
> New Revision: 219829<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=219829&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=219829&view=rev</a><br>
> Log:<br>
> Correctly handle references to section symbols.<br>
><br>
> When processing assembly like<br>
><br>
> .long .text<br>
><br>
> we were creating a new undefined symbol .text. GAS on the other hand would<br>
> handle that as a reference to the .text section.<br>
><br>
> This patch implements that by creating the section symbols earlier so that<br>
> they are visible during asm parsing.<br>
><br>
> The patch also updates llvm-readobj to print the symbol number in the relocation<br>
> dump so that the test can differentiate between two sections with the same name.<br>
><br>
> Added:<br>
> llvm/trunk/test/MC/ELF/section-sym-err.s<br>
> llvm/trunk/test/MC/ELF/section-sym.s<br>
> Modified:<br>
> llvm/trunk/include/llvm/MC/MCContext.h<br>
> llvm/trunk/lib/MC/ELFObjectWriter.cpp<br>
> llvm/trunk/lib/MC/MCContext.cpp<br>
> llvm/trunk/lib/MC/MCELFStreamer.cpp<br>
> llvm/trunk/test/MC/ELF/comdat.s<br>
> llvm/trunk/tools/llvm-readobj/ELFDumper.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/MC/MCContext.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=219829&r1=219828&r2=219829&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=219829&r1=219828&r2=219829&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/MC/MCContext.h (original)<br>
> +++ llvm/trunk/include/llvm/MC/MCContext.h Wed Oct 15 13:55:30 2014<br>
> @@ -73,6 +73,10 @@ namespace llvm {<br>
> /// Symbols - Bindings of names to symbols.<br>
> SymbolTable Symbols;<br>
><br>
> + /// ELF sections can have a corresponding symbol. This maps one to the<br>
> + /// other.<br>
> + DenseMap<const MCSectionELF*, MCSymbol*> SectionSymbols;<br>
> +<br>
> /// A maping from a local label number and an instance count to a symbol.<br>
> /// For example, in the assembly<br>
> /// 1:<br>
> @@ -231,6 +235,8 @@ namespace llvm {<br>
> MCSymbol *GetOrCreateSymbol(StringRef Name);<br>
> MCSymbol *GetOrCreateSymbol(const Twine &Name);<br>
><br>
> + MCSymbol *getOrCreateSectionSymbol(const MCSectionELF &Section);<br>
> +<br>
> /// LookupSymbol - Get the symbol for \p Name, or null.<br>
> MCSymbol *LookupSymbol(StringRef Name) const;<br>
> MCSymbol *LookupSymbol(const Twine &Name) const;<br>
><br>
> Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=219829&r1=219828&r2=219829&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=219829&r1=219828&r2=219829&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)<br>
> +++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Wed Oct 15 13:55:30 2014<br>
> @@ -81,23 +81,13 @@ public:<br>
><br>
> struct ELFRelocationEntry {<br>
> uint64_t Offset; // Where is the relocation.<br>
> - bool UseSymbol; // Relocate with a symbol, not the section.<br>
> - union {<br>
> - const MCSymbol *Symbol; // The symbol to relocate with.<br>
> - const MCSectionData *Section; // The section to relocate with.<br>
> - };<br>
> + const MCSymbol *Symbol; // The symbol to relocate with.<br>
> unsigned Type; // The type of the relocation.<br>
> uint64_t Addend; // The addend to use.<br>
><br>
> ELFRelocationEntry(uint64_t Offset, const MCSymbol *Symbol, unsigned Type,<br>
> uint64_t Addend)<br>
> - : Offset(Offset), UseSymbol(true), Symbol(Symbol), Type(Type),<br>
> - Addend(Addend) {}<br>
> -<br>
> - ELFRelocationEntry(uint64_t Offset, const MCSectionData *Section,<br>
> - unsigned Type, uint64_t Addend)<br>
> - : Offset(Offset), UseSymbol(false), Section(Section), Type(Type),<br>
> - Addend(Addend) {}<br>
> + : Offset(Offset), Symbol(Symbol), Type(Type), Addend(Addend) {}<br>
> };<br>
><br>
> class ELFObjectWriter : public MCObjectWriter {<br>
> @@ -137,6 +127,14 @@ class ELFObjectWriter : public MCObjectW<br>
><br>
> // Support lexicographic sorting.<br>
> bool operator<(const ELFSymbolData &RHS) const {<br>
> + unsigned LHSType = MCELF::GetType(*SymbolData);<br>
> + unsigned RHSType = MCELF::GetType(*RHS.SymbolData);<br>
> + if (LHSType == ELF::STT_SECTION && RHSType != ELF::STT_SECTION)<br>
> + return false;<br>
> + if (LHSType != ELF::STT_SECTION && RHSType == ELF::STT_SECTION)<br>
> + return true;<br>
> + if (LHSType == ELF::STT_SECTION && RHSType == ELF::STT_SECTION)<br>
> + return SectionIndex < RHS.SectionIndex;<br>
> return Name < RHS.Name;<br>
> }<br>
> };<br>
> @@ -651,22 +649,6 @@ void ELFObjectWriter::WriteSymbolTable(M<br>
> WriteSymbol(Writer, MSD, Layout);<br>
> }<br>
><br>
> - // Write out a symbol table entry for each regular section.<br>
> - for (MCAssembler::const_iterator i = Asm.begin(), e = Asm.end(); i != e;<br>
> - ++i) {<br>
> - const MCSectionELF &Section =<br>
> - static_cast<const MCSectionELF&>(i->getSection());<br>
> - if (Section.getType() == ELF::SHT_RELA ||<br>
> - Section.getType() == ELF::SHT_REL ||<br>
> - Section.getType() == ELF::SHT_STRTAB ||<br>
> - Section.getType() == ELF::SHT_SYMTAB ||<br>
> - Section.getType() == ELF::SHT_SYMTAB_SHNDX)<br>
> - continue;<br>
> - Writer.writeSymbol(0, ELF::STT_SECTION, 0, 0, ELF::STV_DEFAULT,<br>
> - SectionIndexMap.lookup(&Section), false);<br>
> - LastLocalSymbolIndex++;<br>
> - }<br>
> -<br>
> for (unsigned i = 0, e = ExternalSymbolData.size(); i != e; ++i) {<br>
> ELFSymbolData &MSD = ExternalSymbolData[i];<br>
> MCSymbolData &Data = *MSD.SymbolData;<br>
> @@ -882,8 +864,11 @@ void ELFObjectWriter::RecordRelocation(c<br>
> if (!RelocateWithSymbol) {<br>
> const MCSection *SecA =<br>
> (SymA && !SymA->isUndefined()) ? &SymA->getSection() : nullptr;<br>
> - const MCSectionData *SecAD = SecA ? &Asm.getSectionData(*SecA) : nullptr;<br>
> - ELFRelocationEntry Rec(FixupOffset, SecAD, Type, Addend);<br>
> + auto *ELFSec = cast_or_null<MCSectionELF>(SecA);<br>
> + MCSymbol *SectionSymbol =<br>
> + ELFSec ? Asm.getContext().GetOrCreateSymbol(ELFSec->getSectionName())<br>
> + : nullptr;<br>
> + ELFRelocationEntry Rec(FixupOffset, SectionSymbol, Type, Addend);<br>
> Relocations[FixupSection].push_back(Rec);<br>
> return;<br>
> }<br>
> @@ -1061,7 +1046,10 @@ ELFObjectWriter::computeSymbolTable(MCAs<br>
> Buf += Name.substr(Pos + Skip);<br>
> Name = Buf;<br>
> }<br>
> - MSD.Name = StrTabBuilder.add(Name);<br>
> +<br>
> + // Sections have their own string table<br>
> + if (MCELF::GetType(SD) != ELF::STT_SECTION)<br>
> + MSD.Name = StrTabBuilder.add(Name);<br>
><br>
> if (MSD.SectionIndex == ELF::SHN_UNDEF)<br>
> UndefinedSymbolData.push_back(MSD);<br>
> @@ -1079,9 +1067,11 @@ ELFObjectWriter::computeSymbolTable(MCAs<br>
> for (auto i = Asm.file_names_begin(), e = Asm.file_names_end(); i != e; ++i)<br>
> FileSymbolData.push_back(StrTabBuilder.getOffset(*i));<br>
><br>
> - for (ELFSymbolData& MSD : LocalSymbolData)<br>
> - MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);<br>
> - for (ELFSymbolData& MSD : ExternalSymbolData)<br>
> + for (ELFSymbolData &MSD : LocalSymbolData)<br>
> + MSD.StringIndex = MCELF::GetType(*MSD.SymbolData) == ELF::STT_SECTION<br>
> + ? 0<br>
> + : StrTabBuilder.getOffset(MSD.Name);<br>
> + for (ELFSymbolData &MSD : ExternalSymbolData)<br>
> MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);<br>
> for (ELFSymbolData& MSD : UndefinedSymbolData)<br>
> MSD.StringIndex = StrTabBuilder.getOffset(MSD.Name);<br>
> @@ -1097,8 +1087,6 @@ ELFObjectWriter::computeSymbolTable(MCAs<br>
> for (unsigned i = 0, e = LocalSymbolData.size(); i != e; ++i)<br>
> LocalSymbolData[i].SymbolData->setIndex(Index++);<br>
><br>
> - Index += NumRegularSections;<br>
> -<br>
> for (unsigned i = 0, e = ExternalSymbolData.size(); i != e; ++i)<br>
> ExternalSymbolData[i].SymbolData->setIndex(Index++);<br>
> for (unsigned i = 0, e = UndefinedSymbolData.size(); i != e; ++i)<br>
> @@ -1354,18 +1342,8 @@ void ELFObjectWriter::WriteRelocationsFr<br>
><br>
> for (unsigned i = 0, e = Relocs.size(); i != e; ++i) {<br>
> const ELFRelocationEntry &Entry = Relocs[e - i - 1];<br>
> -<br>
> - unsigned Index;<br>
> - if (Entry.UseSymbol) {<br>
> - Index = getSymbolIndexInSymbolTable(Asm, Entry.Symbol);<br>
> - } else {<br>
> - const MCSectionData *Sec = Entry.Section;<br>
> - if (Sec)<br>
> - Index = Sec->getOrdinal() + FileSymbolData.size() +<br>
> - LocalSymbolData.size() + 1;<br>
> - else<br>
> - Index = 0;<br>
> - }<br>
> + unsigned Index =<br>
> + Entry.Symbol ? getSymbolIndexInSymbolTable(Asm, Entry.Symbol) : 0;<br>
><br>
> if (is64Bit()) {<br>
> write(*F, Entry.Offset);<br>
><br>
> Modified: llvm/trunk/lib/MC/MCContext.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=219829&r1=219828&r2=219829&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=219829&r1=219828&r2=219829&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/MC/MCContext.cpp (original)<br>
> +++ llvm/trunk/lib/MC/MCContext.cpp Wed Oct 15 13:55:30 2014<br>
> @@ -113,6 +113,23 @@ MCSymbol *MCContext::GetOrCreateSymbol(S<br>
> return Sym;<br>
> }<br>
><br>
> +MCSymbol *MCContext::getOrCreateSectionSymbol(const MCSectionELF &Section) {<br>
> + MCSymbol *&Sym = SectionSymbols[&Section];<br>
> + if (Sym)<br>
> + return Sym;<br>
> +<br>
> + StringRef Name = Section.getSectionName();<br>
> + StringMapEntry<bool> *NameEntry = &UsedNames.GetOrCreateValue(Name);<br>
> + NameEntry->setValue(true);<br>
> + Sym = new (*this) MCSymbol(NameEntry->getKey(), /*isTemporary*/ false);<br>
> +<br>
> + StringMapEntry<MCSymbol*> &Entry = Symbols.GetOrCreateValue(Name);<br>
> + if (!Entry.getValue())<br>
> + Entry.setValue(Sym);<br>
> +<br>
> + return Sym;<br>
> +}<br>
> +<br>
> MCSymbol *MCContext::CreateSymbol(StringRef Name) {<br>
> // Determine whether this is an assembler temporary or normal label, if used.<br>
> bool isTemporary = false;<br>
><br>
> Modified: llvm/trunk/lib/MC/MCELFStreamer.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCELFStreamer.cpp?rev=219829&r1=219828&r2=219829&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCELFStreamer.cpp?rev=219829&r1=219828&r2=219829&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/MC/MCELFStreamer.cpp (original)<br>
> +++ llvm/trunk/lib/MC/MCELFStreamer.cpp Wed Oct 15 13:55:30 2014<br>
> @@ -92,10 +92,19 @@ void MCELFStreamer::ChangeSection(const<br>
> MCSectionData *CurSection = getCurrentSectionData();<br>
> if (CurSection && CurSection->isBundleLocked())<br>
> report_fatal_error("Unterminated .bundle_lock when changing a section");<br>
> - const MCSymbol *Grp = static_cast<const MCSectionELF *>(Section)->getGroup();<br>
> +<br>
> + MCAssembler &Asm = getAssembler();<br>
> + auto *SectionELF = static_cast<const MCSectionELF *>(Section);<br>
> + const MCSymbol *Grp = SectionELF->getGroup();<br>
> if (Grp)<br>
> - getAssembler().getOrCreateSymbolData(*Grp);<br>
> + Asm.getOrCreateSymbolData(*Grp);<br>
> +<br>
> this->MCObjectStreamer::ChangeSection(Section, Subsection);<br>
> + MCSymbol *SectionSymbol = getContext().getOrCreateSectionSymbol(*SectionELF);<br>
> + if (SectionSymbol->isUndefined()) {<br>
> + EmitLabel(SectionSymbol);<br>
> + MCELF::SetType(Asm.getSymbolData(*SectionSymbol), ELF::STT_SECTION);<br>
> + }<br>
> }<br>
><br>
> void MCELFStreamer::EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) {<br>
><br>
> Modified: llvm/trunk/test/MC/ELF/comdat.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/comdat.s?rev=219829&r1=219828&r2=219829&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/comdat.s?rev=219829&r1=219828&r2=219829&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/MC/ELF/comdat.s (original)<br>
> +++ llvm/trunk/test/MC/ELF/comdat.s Wed Oct 15 13:55:30 2014<br>
> @@ -41,7 +41,7 @@<br>
> // CHECK-NEXT: Offset: 0x54<br>
> // CHECK-NEXT: Size: 12<br>
> // CHECK-NEXT: Link: 13<br>
> -// CHECK-NEXT: Info: 13<br>
> +// CHECK-NEXT: Info: 10<br>
> // CHECK-NEXT: AddressAlignment: 4<br>
> // CHECK-NEXT: EntrySize: 4<br>
> // CHECK-NEXT: }<br>
><br>
> Added: llvm/trunk/test/MC/ELF/section-sym-err.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/section-sym-err.s?rev=219829&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/section-sym-err.s?rev=219829&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/MC/ELF/section-sym-err.s (added)<br>
> +++ llvm/trunk/test/MC/ELF/section-sym-err.s Wed Oct 15 13:55:30 2014<br>
> @@ -0,0 +1,6 @@<br>
> +// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t.o 2>&1 | FileCheck %s<br>
> +<br>
> +.section foo<br>
> +foo:<br>
> +<br>
> +// CHECK: error: invalid symbol redefinition<br>
><br>
> Added: llvm/trunk/test/MC/ELF/section-sym.s<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/section-sym.s?rev=219829&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/section-sym.s?rev=219829&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/MC/ELF/section-sym.s (added)<br>
> +++ llvm/trunk/test/MC/ELF/section-sym.s Wed Oct 15 13:55:30 2014<br>
> @@ -0,0 +1,91 @@<br>
> +// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -t -r --expand-relocs | FileCheck %s<br>
> +<br>
> +.section foo, "aG", @progbits, f1, comdat<br>
> +.section foo, "G", @progbits, f2, comdat<br>
> +.section bar<br>
> +.long foo<br>
> +<br>
> +// Test that the relocation points to the first section foo.<br>
> +<br>
> +// The first seciton foo has index 6<br>
> +// CHECK: Section {<br>
> +// CHECK: Index: 6<br>
> +// CHECK-NEXT: Name: foo (28)<br>
> +// CHECK-NEXT: Type: SHT_PROGBITS (0x1)<br>
> +// CHECK-NEXT: Flags [ (0x202)<br>
> +// CHECK-NEXT: SHF_ALLOC (0x2)<br>
> +// CHECK-NEXT: SHF_GROUP (0x200)<br>
> +// CHECK-NEXT: ]<br>
> +// CHECK-NEXT: Address: 0x0<br>
> +// CHECK-NEXT: Offset: 0x50<br>
> +// CHECK-NEXT: Size: 0<br>
> +// CHECK-NEXT: Link: 0<br>
> +// CHECK-NEXT: Info: 0<br>
> +// CHECK-NEXT: AddressAlignment: 1<br>
> +// CHECK-NEXT: EntrySize: 0<br>
> +// CHECK-NEXT: }<br>
> +// CHECK-NEXT: Section {<br>
> +// CHECK-NEXT: Index: 7<br>
> +// CHECK-NEXT: Name: foo (28)<br>
> +// CHECK-NEXT: Type: SHT_PROGBITS (0x1)<br>
> +// CHECK-NEXT: Flags [ (0x200)<br>
> +// CHECK-NEXT: SHF_GROUP (0x200)<br>
> +// CHECK-NEXT: ]<br>
> +// CHECK-NEXT: Address: 0x0<br>
> +// CHECK-NEXT: Offset: 0x50<br>
> +// CHECK-NEXT: Size: 0<br>
> +// CHECK-NEXT: Link: 0<br>
> +// CHECK-NEXT: Info: 0<br>
> +// CHECK-NEXT: AddressAlignment: 1<br>
> +// CHECK-NEXT: EntrySize: 0<br>
> +// CHECK-NEXT: }<br>
> +<br>
> +// The relocation points to symbol 6<br>
> +// CHECK: Relocations [<br>
> +// CHECK-NEXT: Section (9) .relabar {<br>
> +// CHECK-NEXT: Relocation {<br>
> +// CHECK-NEXT: Offset: 0x0<br>
> +// CHECK-NEXT: Type: R_X86_64_32 (10)<br>
> +// CHECK-NEXT: Symbol: foo (6)<br>
> +// CHECK-NEXT: Addend: 0x0<br>
> +// CHECK-NEXT: }<br>
> +// CHECK-NEXT: }<br>
> +// CHECK-NEXT: ]<br>
> +<br>
> +<br>
> +// The symbol 6 corresponds section 6<br>
> +// CHECK: Symbols [<br>
> +<br>
> +// symbol 0<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name:<br>
> +<br>
> +// symbol 1<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: f1<br>
> +<br>
> +// symbol 2<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: f2<br>
> +<br>
> +// symbol 3<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: .text<br>
> +<br>
> +// symbol 4<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: .data<br>
> +<br>
> +// symbol 5<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: .bss<br>
> +<br>
> +// symbol 6<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: foo<br>
> +// CHECK: Section: foo (0x6)<br>
> +<br>
> +// symbol 7<br>
> +// CHECK-NOT: Name<br>
> +// CHECK: Name: foo<br>
> +// CHECK: Section: foo (0x7)<br>
><br>
> Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=219829&r1=219828&r2=219829&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=219829&r1=219828&r2=219829&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Wed Oct 15 13:55:30 2014<br>
> @@ -676,7 +676,8 @@ void ELFDumper<ELFT>::printRelocation(co<br>
> DictScope Group(W, "Relocation");<br>
> W.printHex("Offset", Rel.r_offset);<br>
> W.printNumber("Type", RelocName, (int)Rel.getType(Obj->isMips64EL()));<br>
> - W.printString("Symbol", SymbolName.size() > 0 ? SymbolName : "-");<br>
> + W.printNumber("Symbol", SymbolName.size() > 0 ? SymbolName : "-",<br>
> + Rel.getSymbol(Obj->isMips64EL()));<br>
> W.printHex("Addend", Rel.r_addend);<br>
> } else {<br>
> raw_ostream& OS = W.startLine();<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
><br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>