[llvm] r293936 - Change how we handle section symbols on ELF.
Mikael Holmén via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 3 03:55:28 PST 2017
Hi Rafael,
I have a question about this change.
On 02/02/2017 10:26 PM, Rafael Espindola via llvm-commits wrote:
> Author: rafael
> Date: Thu Feb 2 15:26:06 2017
> New Revision: 293936
>
> URL: http://llvm.org/viewvc/llvm-project?rev=293936&view=rev
> Log:
> Change how we handle section symbols on ELF.
>
> On ELF every section can have a corresponding section symbol. When in
> an assembly file we have
>
> .quad .text
>
> the '.text' refers to that symbol.
>
> The way we used to handle them is to leave .text an undefined symbol
> until the very end when the object writer would map them to the
> actual section symbol.
>
> The problem with that is that anything before the end would see an
> undefined symbol. This could result in bad diagnostics
> (test/MC/AArch64/label-arithmetic-diags-elf.s), or incorrect results
> when using the asm streamer (est/MC/Mips/expansion-jal-sym-pic.s).
>
> Fixing this will also allow using the section symbol earlier for
> setting sh_link of SHF_METADATA sections.
>
> This patch includes a few hacks to avoid changing our behaviour when
> handling conflicts between section symbols and other symbols. I
> reported pr31850 to track that.
For my out-of-tree backend, we output all code in a section called
exactly "code". With your patch we now run into the below problem if we
then also have a function called "code".
For foo.ll:
define void @code() {
ret void
}
If I do
build/bin/llc -O0 -mtriple phoenix foo.ll -o -
we get
.section code
__FILE_START:
.global code
llc: ../lib/MC/MCAsmStreamer.cpp:440: virtual void (anonymous
namespace)::MCAsmStreamer::EmitLabel(llvm::MCSymbol *): Assertion
`Symbol->isUndefined() && "Cannot define a symbol twice!"' failed.
So now we seem to get a clash between the section and function names,
and the assertion fails.
I suppose this was not intended or are we doing something stupid in our
backend?
Regards,
Mikael
>
> Modified:
> llvm/trunk/include/llvm/MC/MCContext.h
> llvm/trunk/lib/MC/ELFObjectWriter.cpp
> llvm/trunk/lib/MC/MCContext.cpp
> llvm/trunk/lib/MC/MCELFStreamer.cpp
> llvm/trunk/lib/MC/MCObjectFileInfo.cpp
> llvm/trunk/lib/MC/MCParser/AsmParser.cpp
> llvm/trunk/lib/MC/MCSymbolELF.cpp
> llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
> llvm/trunk/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll
> llvm/trunk/test/DebugInfo/Generic/array.ll
> llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll
> llvm/trunk/test/DebugInfo/PowerPC/tls-fission.ll
> llvm/trunk/test/DebugInfo/X86/ref_addr_relocation.ll
> llvm/trunk/test/DebugInfo/X86/tls.ll
> llvm/trunk/test/MC/AArch64/label-arithmetic-diags-elf.s
> llvm/trunk/test/MC/ELF/gen-dwarf.s
> llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s
> llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s
>
> Modified: llvm/trunk/include/llvm/MC/MCContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCContext.h (original)
> +++ llvm/trunk/include/llvm/MC/MCContext.h Thu Feb 2 15:26:06 2017
> @@ -83,10 +83,6 @@ namespace llvm {
> /// Bindings of names to symbols.
> SymbolTable Symbols;
>
> - /// Sections can have a corresponding symbol. This maps one to the
> - /// other.
> - DenseMap<const MCSection *, MCSymbol *> SectionSymbols;
> -
> /// A mapping from a local label number and an instance count to a symbol.
> /// For example, in the assembly
> /// 1:
> @@ -232,6 +228,13 @@ namespace llvm {
> MCSymbol *getOrCreateDirectionalLocalSymbol(unsigned LocalLabelVal,
> unsigned Instance);
>
> + MCSectionELF *createELFSectionImpl(StringRef Section, unsigned Type,
> + unsigned Flags, SectionKind K,
> + unsigned EntrySize,
> + const MCSymbolELF *Group,
> + unsigned UniqueID,
> + const MCSectionELF *Associated);
> +
> public:
> explicit MCContext(const MCAsmInfo *MAI, const MCRegisterInfo *MRI,
> const MCObjectFileInfo *MOFI,
> @@ -288,8 +291,6 @@ namespace llvm {
> /// \param Name - The symbol name, which must be unique across all symbols.
> MCSymbol *getOrCreateSymbol(const Twine &Name);
>
> - MCSymbolELF *getOrCreateSectionSymbol(const MCSectionELF &Section);
> -
> /// Gets a symbol that will be defined to the final stack offset of a local
> /// variable after codegen.
> ///
> @@ -340,43 +341,22 @@ namespace llvm {
>
> MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> unsigned Flags) {
> - return getELFSection(Section, Type, Flags, nullptr);
> - }
> -
> - MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> - unsigned Flags, const char *BeginSymName) {
> - return getELFSection(Section, Type, Flags, 0, "", BeginSymName);
> + return getELFSection(Section, Type, Flags, 0, "");
> }
>
> MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> unsigned Flags, unsigned EntrySize,
> const Twine &Group) {
> - return getELFSection(Section, Type, Flags, EntrySize, Group, nullptr);
> - }
> -
> - MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> - unsigned Flags, unsigned EntrySize,
> - const Twine &Group, const char *BeginSymName) {
> - return getELFSection(Section, Type, Flags, EntrySize, Group, ~0,
> - BeginSymName);
> - }
> -
> - MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> - unsigned Flags, unsigned EntrySize,
> - const Twine &Group, unsigned UniqueID) {
> - return getELFSection(Section, Type, Flags, EntrySize, Group, UniqueID,
> - nullptr);
> + return getELFSection(Section, Type, Flags, EntrySize, Group, ~0);
> }
>
> MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> unsigned Flags, unsigned EntrySize,
> - const Twine &Group, unsigned UniqueID,
> - const char *BeginSymName);
> + const Twine &Group, unsigned UniqueID);
>
> MCSectionELF *getELFSection(const Twine &Section, unsigned Type,
> unsigned Flags, unsigned EntrySize,
> const MCSymbolELF *Group, unsigned UniqueID,
> - const char *BeginSymName,
> const MCSectionELF *Associated);
>
> /// Get a section with the provided group identifier. This section is
>
> Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
> +++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Thu Feb 2 15:26:06 2017
> @@ -371,22 +371,6 @@ uint64_t ELFObjectWriter::SymbolValue(co
>
> void ELFObjectWriter::executePostLayoutBinding(MCAssembler &Asm,
> const MCAsmLayout &Layout) {
> - // Section symbols are used as definitions for undefined symbols with matching
> - // names. If there are multiple sections with the same name, the first one is
> - // used.
> - for (const MCSection &Sec : Asm) {
> - const MCSymbol *Begin = Sec.getBeginSymbol();
> - if (!Begin)
> - continue;
> -
> - const MCSymbol *Alias = Asm.getContext().lookupSymbol(Begin->getName());
> - if (!Alias || !Alias->isUndefined())
> - continue;
> -
> - Renames.insert(
> - std::make_pair(cast<MCSymbolELF>(Alias), cast<MCSymbolELF>(Begin)));
> - }
> -
> // The presence of symbol versions causes undefined symbols and
> // versions declared with @@@ to be renamed.
> for (const MCSymbol &A : Asm.symbols()) {
>
> Modified: llvm/trunk/lib/MC/MCContext.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCContext.cpp (original)
> +++ llvm/trunk/lib/MC/MCContext.cpp Thu Feb 2 15:26:06 2017
> @@ -80,7 +80,6 @@ void MCContext::reset() {
> MCSubtargetAllocator.DestroyAll();
> UsedNames.clear();
> Symbols.clear();
> - SectionSymbols.clear();
> Allocator.Reset();
> Instances.clear();
> CompilationDir.clear();
> @@ -124,18 +123,6 @@ MCSymbol *MCContext::getOrCreateSymbol(c
> return Sym;
> }
>
> -MCSymbolELF *MCContext::getOrCreateSectionSymbol(const MCSectionELF &Section) {
> - MCSymbol *&Sym = SectionSymbols[&Section];
> - if (Sym)
> - return cast<MCSymbolELF>(Sym);
> -
> - StringRef Name = Section.getSectionName();
> - auto NameIter = UsedNames.insert(std::make_pair(Name, false)).first;
> - Sym = new (&*NameIter, *this) MCSymbolELF(&*NameIter, /*isTemporary*/ false);
> -
> - return cast<MCSymbolELF>(Sym);
> -}
> -
> MCSymbol *MCContext::getOrCreateFrameAllocSymbol(StringRef FuncName,
> unsigned Idx) {
> return getOrCreateSymbol(Twine(MAI->getPrivateGlobalPrefix()) + FuncName +
> @@ -316,6 +303,38 @@ void MCContext::renameELFSection(MCSecti
> const_cast<MCSectionELF *>(Section)->setSectionName(CachedName);
> }
>
> +MCSectionELF *MCContext::createELFSectionImpl(StringRef Section, unsigned Type,
> + unsigned Flags, SectionKind K,
> + unsigned EntrySize,
> + const MCSymbolELF *Group,
> + unsigned UniqueID,
> + const MCSectionELF *Associated) {
> +
> + MCSymbolELF *R;
> + MCSymbol *&Sym = Symbols[Section];
> + if (Sym && Sym->isUndefined()) {
> + R = cast<MCSymbolELF>(Sym);
> + } else {
> + auto NameIter = UsedNames.insert(std::make_pair(Section, false)).first;
> + R = new (&*NameIter, *this) MCSymbolELF(&*NameIter, /*isTemporary*/ false);
> + if (!Sym)
> + Sym = R;
> + }
> + R->setBinding(ELF::STB_LOCAL);
> + R->setType(ELF::STT_SECTION);
> + R->setRedefinable(true);
> +
> + auto *Ret = new (ELFAllocator.Allocate()) MCSectionELF(
> + Section, Type, Flags, K, EntrySize, Group, UniqueID, R, Associated);
> +
> + auto *F = new MCDataFragment();
> + Ret->getFragmentList().insert(Ret->begin(), F);
> + F->setParent(Ret);
> + R->setFragment(F);
> +
> + return Ret;
> +}
> +
> MCSectionELF *MCContext::createELFRelSection(const Twine &Name, unsigned Type,
> unsigned Flags, unsigned EntrySize,
> const MCSymbolELF *Group,
> @@ -325,9 +344,9 @@ MCSectionELF *MCContext::createELFRelSec
> std::tie(I, Inserted) =
> ELFRelSecNames.insert(std::make_pair(Name.str(), true));
>
> - return new (ELFAllocator.Allocate())
> - MCSectionELF(I->getKey(), Type, Flags, SectionKind::getReadOnly(),
> - EntrySize, Group, true, nullptr, Associated);
> + return createELFSectionImpl(I->getKey(), Type, Flags,
> + SectionKind::getReadOnly(), EntrySize, Group,
> + true, Associated);
> }
>
> MCSectionELF *MCContext::getELFNamedSection(const Twine &Prefix,
> @@ -339,21 +358,19 @@ MCSectionELF *MCContext::getELFNamedSect
>
> MCSectionELF *MCContext::getELFSection(const Twine &Section, unsigned Type,
> unsigned Flags, unsigned EntrySize,
> - const Twine &Group, unsigned UniqueID,
> - const char *BeginSymName) {
> + const Twine &Group, unsigned UniqueID) {
> MCSymbolELF *GroupSym = nullptr;
> if (!Group.isTriviallyEmpty() && !Group.str().empty())
> GroupSym = cast<MCSymbolELF>(getOrCreateSymbol(Group));
>
> return getELFSection(Section, Type, Flags, EntrySize, GroupSym, UniqueID,
> - BeginSymName, nullptr);
> + nullptr);
> }
>
> MCSectionELF *MCContext::getELFSection(const Twine &Section, unsigned Type,
> unsigned Flags, unsigned EntrySize,
> const MCSymbolELF *GroupSym,
> unsigned UniqueID,
> - const char *BeginSymName,
> const MCSectionELF *Associated) {
> StringRef Group = "";
> if (GroupSym)
> @@ -375,22 +392,16 @@ MCSectionELF *MCContext::getELFSection(c
> else
> Kind = SectionKind::getReadOnly();
>
> - MCSymbol *Begin = nullptr;
> - if (BeginSymName)
> - Begin = createTempSymbol(BeginSymName, false);
> -
> - MCSectionELF *Result = new (ELFAllocator.Allocate())
> - MCSectionELF(CachedName, Type, Flags, Kind, EntrySize, GroupSym, UniqueID,
> - Begin, Associated);
> + MCSectionELF *Result = createELFSectionImpl(
> + CachedName, Type, Flags, Kind, EntrySize, GroupSym, UniqueID, Associated);
> Entry.second = Result;
> return Result;
> }
>
> MCSectionELF *MCContext::createELFGroupSection(const MCSymbolELF *Group) {
> - MCSectionELF *Result = new (ELFAllocator.Allocate())
> - MCSectionELF(".group", ELF::SHT_GROUP, 0, SectionKind::getReadOnly(), 4,
> - Group, ~0, nullptr, nullptr);
> - return Result;
> + return createELFSectionImpl(".group", ELF::SHT_GROUP, 0,
> + SectionKind::getReadOnly(), 4, Group, ~0,
> + nullptr);
> }
>
> MCSectionCOFF *MCContext::getCOFFSection(StringRef Section,
>
> Modified: llvm/trunk/lib/MC/MCELFStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCELFStreamer.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCELFStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCELFStreamer.cpp Thu Feb 2 15:26:06 2017
> @@ -148,16 +148,7 @@ void MCELFStreamer::ChangeSection(MCSect
> Asm.registerSymbol(*Grp);
>
> this->MCObjectStreamer::ChangeSection(Section, Subsection);
> - MCContext &Ctx = getContext();
> - auto *Begin = cast_or_null<MCSymbolELF>(Section->getBeginSymbol());
> - if (!Begin) {
> - Begin = Ctx.getOrCreateSectionSymbol(*SectionELF);
> - Section->setBeginSymbol(Begin);
> - }
> - if (Begin->isUndefined()) {
> - Asm.registerSymbol(*Begin);
> - Begin->setType(ELF::STT_SECTION);
> - }
> + Asm.registerSymbol(*Section->getBeginSymbol());
> }
>
> void MCELFStreamer::EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol) {
>
> Modified: llvm/trunk/lib/MC/MCObjectFileInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCObjectFileInfo.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCObjectFileInfo.cpp (original)
> +++ llvm/trunk/lib/MC/MCObjectFileInfo.cpp Thu Feb 2 15:26:06 2017
> @@ -506,10 +506,9 @@ void MCObjectFileInfo::initELFMCObjectFi
> COFFDebugTypesSection = nullptr;
>
> // Debug Info Sections.
> - DwarfAbbrevSection = Ctx->getELFSection(".debug_abbrev", ELF::SHT_PROGBITS, 0,
> - "section_abbrev");
> - DwarfInfoSection =
> - Ctx->getELFSection(".debug_info", ELF::SHT_PROGBITS, 0, "section_info");
> + DwarfAbbrevSection =
> + Ctx->getELFSection(".debug_abbrev", ELF::SHT_PROGBITS, 0);
> + DwarfInfoSection = Ctx->getELFSection(".debug_info", ELF::SHT_PROGBITS, 0);
> DwarfLineSection = Ctx->getELFSection(".debug_line", ELF::SHT_PROGBITS, 0);
> DwarfFrameSection = Ctx->getELFSection(".debug_frame", ELF::SHT_PROGBITS, 0);
> DwarfPubNamesSection =
> @@ -527,21 +526,21 @@ void MCObjectFileInfo::initELFMCObjectFi
> DwarfARangesSection =
> Ctx->getELFSection(".debug_aranges", ELF::SHT_PROGBITS, 0);
> DwarfRangesSection =
> - Ctx->getELFSection(".debug_ranges", ELF::SHT_PROGBITS, 0, "debug_range");
> - DwarfMacinfoSection = Ctx->getELFSection(".debug_macinfo", ELF::SHT_PROGBITS,
> - 0, "debug_macinfo");
> + Ctx->getELFSection(".debug_ranges", ELF::SHT_PROGBITS, 0);
> + DwarfMacinfoSection =
> + Ctx->getELFSection(".debug_macinfo", ELF::SHT_PROGBITS, 0);
>
> // DWARF5 Experimental Debug Info
>
> // Accelerator Tables
> DwarfAccelNamesSection =
> - Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0, "names_begin");
> + Ctx->getELFSection(".apple_names", ELF::SHT_PROGBITS, 0);
> DwarfAccelObjCSection =
> - Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0, "objc_begin");
> - DwarfAccelNamespaceSection = Ctx->getELFSection(
> - ".apple_namespaces", ELF::SHT_PROGBITS, 0, "namespac_begin");
> + Ctx->getELFSection(".apple_objc", ELF::SHT_PROGBITS, 0);
> + DwarfAccelNamespaceSection =
> + Ctx->getELFSection(".apple_namespaces", ELF::SHT_PROGBITS, 0);
> DwarfAccelTypesSection =
> - Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0, "types_begin");
> + Ctx->getELFSection(".apple_types", ELF::SHT_PROGBITS, 0);
>
> // Fission Sections
> DwarfInfoDWOSection =
> @@ -556,11 +555,10 @@ void MCObjectFileInfo::initELFMCObjectFi
> DwarfLineDWOSection =
> Ctx->getELFSection(".debug_line.dwo", ELF::SHT_PROGBITS, 0);
> DwarfLocDWOSection =
> - Ctx->getELFSection(".debug_loc.dwo", ELF::SHT_PROGBITS, 0, "skel_loc");
> + Ctx->getELFSection(".debug_loc.dwo", ELF::SHT_PROGBITS, 0);
> DwarfStrOffDWOSection =
> Ctx->getELFSection(".debug_str_offsets.dwo", ELF::SHT_PROGBITS, 0);
> - DwarfAddrSection =
> - Ctx->getELFSection(".debug_addr", ELF::SHT_PROGBITS, 0, "addr_sec");
> + DwarfAddrSection = Ctx->getELFSection(".debug_addr", ELF::SHT_PROGBITS, 0);
>
> // DWP Sections
> DwarfCUIndexSection =
>
> Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
> +++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Thu Feb 2 15:26:06 2017
> @@ -4417,6 +4417,7 @@ bool AsmParser::parseDirectiveComm(bool
> return Error(Pow2AlignmentLoc, "invalid '.comm' or '.lcomm' directive "
> "alignment, can't be less than zero");
>
> + Sym->redefineIfPossible();
> if (!Sym->isUndefined())
> return Error(IDLoc, "invalid symbol redefinition");
>
>
> Modified: llvm/trunk/lib/MC/MCSymbolELF.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSymbolELF.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCSymbolELF.cpp (original)
> +++ llvm/trunk/lib/MC/MCSymbolELF.cpp Thu Feb 2 15:26:06 2017
> @@ -42,6 +42,8 @@ enum {
>
> void MCSymbolELF::setBinding(unsigned Binding) const {
> setIsBindingSet();
> + if (getType() == ELF::STT_SECTION && Binding != ELF::STB_LOCAL)
> + setType(ELF::STT_NOTYPE);
> unsigned Val;
> switch (Binding) {
> default:
> @@ -93,6 +95,8 @@ unsigned MCSymbolELF::getBinding() const
>
> void MCSymbolELF::setType(unsigned Type) const {
> unsigned Val;
> + if (Type == ELF::STT_SECTION && getBinding() != ELF::STB_LOCAL)
> + return;
> switch (Type) {
> default:
> llvm_unreachable("Unsupported Binding");
>
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp Thu Feb 2 15:26:06 2017
> @@ -1138,9 +1138,8 @@ inline void ARMELFStreamer::SwitchToEHSe
> const MCSymbolELF *Group = FnSection.getGroup();
> if (Group)
> Flags |= ELF::SHF_GROUP;
> - MCSectionELF *EHSection =
> - getContext().getELFSection(EHSecName, Type, Flags, 0, Group,
> - FnSection.getUniqueID(), nullptr, &FnSection);
> + MCSectionELF *EHSection = getContext().getELFSection(
> + EHSecName, Type, Flags, 0, Group, FnSection.getUniqueID(), &FnSection);
>
> assert(EHSection && "Failed to get the required EH section");
>
>
> Modified: llvm/trunk/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll (original)
> +++ llvm/trunk/test/DebugInfo/Generic/2010-06-29-InlinedFnLocalVar.ll Thu Feb 2 15:26:06 2017
> @@ -1,7 +1,7 @@
> ; RUN: %llc_dwarf -O2 %s -o - | FileCheck %s
> ; Check struct X for dead variable xyz from inlined function foo.
>
> -; CHECK: section_info
> +; CHECK: .section .debug_info,"", at progbits
> ; CHECK: DW_TAG_structure_type
> ; CHECK-NEXT: DW_AT_name
>
>
> Modified: llvm/trunk/test/DebugInfo/Generic/array.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/array.ll?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/Generic/array.ll (original)
> +++ llvm/trunk/test/DebugInfo/Generic/array.ll Thu Feb 2 15:26:06 2017
> @@ -25,7 +25,7 @@ declare void @llvm.dbg.declare(metadata,
> !7 = distinct !DILexicalBlock(line: 3, column: 12, file: !14, scope: !0)
> !8 = !DICompositeType(tag: DW_TAG_array_type, align: 32, file: !14, scope: !2, baseType: !5, elements: !9)
> !9 = !{!10}
> -;CHECK: section_info:
> +;CHECK: .section .debug_info,"", at progbits
> ;CHECK: DW_TAG_subrange_type
> ;CHECK-NEXT: DW_AT_type
> ;CHECK-NOT: DW_AT_lower_bound
>
> Modified: llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll (original)
> +++ llvm/trunk/test/DebugInfo/Mips/InlinedFnLocalVar.ll Thu Feb 2 15:26:06 2017
> @@ -1,7 +1,7 @@
> ; RUN: llc -mtriple mips-linux-gnu -O2 %s -o - | FileCheck %s
> ; Check struct X for dead variable xyz from inlined function foo.
>
> -; CHECK: section_info
> +; CHECK: .section .debug_info,"", at progbits
> ; CHECK: DW_TAG_structure_type
> ; CHECK-NEXT: info_string
>
>
> Modified: llvm/trunk/test/DebugInfo/PowerPC/tls-fission.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PowerPC/tls-fission.ll?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/PowerPC/tls-fission.ll (original)
> +++ llvm/trunk/test/DebugInfo/PowerPC/tls-fission.ll Thu Feb 2 15:26:06 2017
> @@ -13,8 +13,7 @@
> ; DW_OP_GNU_push_tls_address
> ; CHECK-NEXT: .byte 224
> ; check that the expected TLS address description is the first thing in the debug_addr section
> -; CHECK: debug_addr
> -; CHECK-NEXT: .Laddr_sec:
> +; CHECK: .section .debug_addr,"", at progbits
> ; CHECK-NEXT: .quad tls at DTPREL+32768
>
> source_filename = "test/DebugInfo/PowerPC/tls-fission.ll"
>
> Modified: llvm/trunk/test/DebugInfo/X86/ref_addr_relocation.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/ref_addr_relocation.ll?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/ref_addr_relocation.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/ref_addr_relocation.ll Thu Feb 2 15:26:06 2017
> @@ -46,7 +46,7 @@
> ; CHECK: DW_TAG_variable
> ; Make sure this is relocatable.
> ; and test that we don't create the labels to emit a correct COFF relocation
> -; ELF-ASM: .quad .Lsection_info+[[TYPE]] # DW_AT_type
> +; ELF-ASM: .quad .debug_info+[[TYPE]] # DW_AT_type
> ; COFF-ASM: .secrel32 .Lsection_info+[[TYPE]] # DW_AT_type
> ; DARWIN-ASM2: .quad [[TYPE]] ## DW_AT_type
> ; DARWIN-ASM4: .long [[TYPE]] ## DW_AT_type
>
> Modified: llvm/trunk/test/DebugInfo/X86/tls.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/tls.ll?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/DebugInfo/X86/tls.ll (original)
> +++ llvm/trunk/test/DebugInfo/X86/tls.ll Thu Feb 2 15:26:06 2017
> @@ -78,7 +78,6 @@
>
> ; check that the expected TLS address description is the first thing in the debug_addr section
> ; FISSION: .section .debug_addr
> -; FISSION: addr_sec:
> ; FISSION-NEXT: .quad tls at DTPOFF
> ; FISSION-NEXT: .quad glbl
> ; FISSION-NOT: .quad glbl
>
> Modified: llvm/trunk/test/MC/AArch64/label-arithmetic-diags-elf.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/label-arithmetic-diags-elf.s?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/AArch64/label-arithmetic-diags-elf.s (original)
> +++ llvm/trunk/test/MC/AArch64/label-arithmetic-diags-elf.s Thu Feb 2 15:26:06 2017
> @@ -63,9 +63,9 @@ end_across_sec:
>
> add w0, w1, #(sec_y - sec_x)
> cmp w0, #(sec_y - sec_x)
> - // CHECK: error: symbol 'sec_x' can not be undefined in a subtraction expression
> + // CHECK: error: Cannot represent a difference across sections
> // CHECK-NEXT: add w0, w1, #(sec_y - sec_x)
> // CHECK-NEXT: ^
> - // CHECK: error: symbol 'sec_x' can not be undefined in a subtraction expression
> + // CHECK: error: Cannot represent a difference across sections
> // CHECK-NEXT: cmp w0, #(sec_y - sec_x)
> // CHECK-NEXT: ^
>
> Modified: llvm/trunk/test/MC/ELF/gen-dwarf.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/gen-dwarf.s?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/ELF/gen-dwarf.s (original)
> +++ llvm/trunk/test/MC/ELF/gen-dwarf.s Thu Feb 2 15:26:06 2017
> @@ -34,7 +34,6 @@ foo:
> // ASM: .section .debug_info
>
> // ASM: .section .debug_abbrev
> -// ASM-NEXT: .Lsection_abbrev:
> // ASM-NEXT: [[ABBREV_LABEL:.Ltmp[0-9]+]]
>
> // Second instance of the section has the CU
>
> Modified: llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s (original)
> +++ llvm/trunk/test/MC/Mips/expansion-j-sym-pic.s Thu Feb 2 15:26:06 2017
> @@ -87,11 +87,11 @@ local_label:
> # MICRO: b .text # encoding: [0x94,0x00,A,A]
> # MICRO: # fixup A - offset: 0, value: .text, kind: fixup_MICROMIPS_PC16_S1
>
> -# ELF-O32: 10 00 ff ff b 0
> -# ELF-O32-NEXT: 00000018: R_MIPS_PC16 .text
> +# ELF-O32: 10 00 ff f9 b -24 <local_label>
> +# ELF-O32-NEXT: 00 00 00 00 nop
>
> -# ELF-NXX: 10 00 00 00 b 4
> -# ELF-NXX-NEXT: R_MIPS_PC16/R_MIPS_NONE/R_MIPS_NONE .text
> +# ELF-NXX: 10 00 ff f9 b -24 <local_label>
> +# ELF-NXX-NEXT: 00 00 00 00 nop
>
> j 1f
> nop
>
> Modified: llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s?rev=293936&r1=293935&r2=293936&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s (original)
> +++ llvm/trunk/test/MC/Mips/expansion-jal-sym-pic.s Thu Feb 2 15:26:06 2017
> @@ -151,37 +151,35 @@ local_label:
> jal .text
> nop
>
> -# FIXME: The .text section MCSymbol isn't created when printing assembly. However,
> -# it is created when generating an ELF object file.
> # Expanding "jal .text":
> -# O32-FIXME: lw $25, %call16(.text)($gp) # encoding: [0x8f,0x99,A,A]
> -# O32-FIXME: # fixup A - offset: 0, value: %got(.text), kind: fixup_Mips_GOT_CALL
> +# O32: lw $25, %got(.text)($gp) # encoding: [0x8f,0x99,A,A]
> +# O32-NEXT: # fixup A - offset: 0, value: %got(.text), kind: fixup_Mips_GOT
>
> # ELF-O32: 8f 99 00 00 lw $25, 0($gp)
> -# ELF-O32-NEXT: R_MIPS_CALL16 .text
> +# ELF-O32-NEXT: R_MIPS_GOT16 .text
>
> -# N32-FIXME: lw $25, %call16(.text)($gp) # encoding: [0x8f,0x99,A,A]
> -# N32-FIXME: # fixup A - offset: 0, value: %call16(.text), kind: fixup_Mips_GOT_DISP
> +# N32: lw $25, %got_disp(.text)($gp) # encoding: [0x8f,0x99,A,A]
> +# N32-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_Mips_GOT_DISP
>
> # ELF-N32: 8f 99 00 00 lw $25, 0($gp)
> -# ELF-N32-NEXT: R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE .text
> +# ELF-N32-NEXT: R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE .text
>
> -# N64-FIXME: ld $25, %call16(.text)($gp) # encoding: [0xdf,0x99,A,A]
> -# N64-FIXME: # fixup A - offset: 0, value: %call16(.text), kind: fixup_Mips_GOT_DISP
> +# N64: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
> +# N64-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_Mips_GOT_DISP
>
> # ELF-N64: df 99 00 00 ld $25, 0($gp)
> -# ELF-N64-NEXT: R_MIPS_CALL16/R_MIPS_NONE/R_MIPS_NONE .text
> +# ELF-N64-NEXT: R_MIPS_GOT_DISP/R_MIPS_NONE/R_MIPS_NONE .text
>
> -# O32-MM-FIXME: lw $25, %got(.text)($gp) # encoding: [0xff,0x3c,A,A]
> -# O32-MM-FIXME: # fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
> -# O32-MM-FIXME: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A]
> -# O32-MM-FIXME: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
> +# O32-MM: lw $25, %got(.text)($gp) # encoding: [0xff,0x3c,A,A]
> +# O32-MM-NEXT: # fixup A - offset: 0, value: %got(.text), kind: fixup_MICROMIPS_GOT16
> +# O32-MM-NEXT: addiu $25, $25, %lo(.text) # encoding: [0x33,0x39,A,A]
> +# O32-MM-NEXT: # fixup A - offset: 0, value: %lo(.text), kind: fixup_MICROMIPS_LO16
>
> -# N32-MM-FIXME: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
> -# N32-MM-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
> +# N32-MM: lw $25, %got_disp(.text)($gp) # encoding: [0xff,0x3c,A,A]
> +# N32-MM-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
>
> -# N64-MM-FIXME: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
> -# N64-MM-FIXME: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
> +# N64-MM: ld $25, %got_disp(.text)($gp) # encoding: [0xdf,0x99,A,A]
> +# N64-MM-NEXT: # fixup A - offset: 0, value: %got_disp(.text), kind: fixup_MICROMIPS_GOT_DISP
>
> # MIPS: jalr $25 # encoding: [0x03,0x20,0xf8,0x09]
> # MM: jalr $ra, $25 # encoding: [0x03,0xf9,0x0f,0x3c]
> @@ -199,7 +197,7 @@ local_label:
>
> # ELF-O32: 8f 99 00 00 lw $25, 0($gp)
> # ELF-O32-NEXT: R_MIPS_GOT16 .text
> -# ELF-O32-NEXT: 27 39 00 54 addiu $25, $25, 84
> +# ELF-O32-NEXT: 27 39 00 58 addiu $25, $25, 88
> # ELF-O32-NEXT: R_MIPS_LO16 .text
>
> # N32: lw $25, %got_disp($tmp0)($gp) # encoding: [0x8f,0x99,A,A]
> @@ -241,7 +239,7 @@ local_label:
>
> # ELF-O32: 8f 99 00 00 lw $25, 0($gp)
> # ELF-O32-NEXT: R_MIPS_GOT16 .text
> -# ELF-O32-NEXT: 27 39 00 60 addiu $25, $25, 96
> +# ELF-O32-NEXT: 27 39 00 64 addiu $25, $25, 100
> # ELF-O32-NEXT: R_MIPS_LO16 .text
>
> # N32-FIXME: lw $25, %got_disp(forward_local)($gp) # encoding: [0x8f,0x99,A,A]
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list