diff options
author | Keno Fischer <kfischer@college.harvard.edu> | 2016-12-08 01:56:23 +0000 |
---|---|---|
committer | Keno Fischer <kfischer@college.harvard.edu> | 2016-12-08 01:56:23 +0000 |
commit | d4ea4c18f13d670ded302dd3a592fc8df8a9938d (patch) | |
tree | b8a1b23031941634317fc201fc745ec6068f4b07 | |
parent | 460218fb7d13132e4ea3def3b75eb43aa505b2db (diff) | |
download | bcm5719-llvm-d4ea4c18f13d670ded302dd3a592fc8df8a9938d.tar.gz bcm5719-llvm-d4ea4c18f13d670ded302dd3a592fc8df8a9938d.zip |
Revert "[CodeGen] Fix invalid DWARF info on Win64"
Appears to break on build bots. Reverting pending investigation.
llvm-svn: 289014
-rw-r--r-- | llvm/docs/Extensions.rst | 2 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCStreamer.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCWinCOFFStreamer.h | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DIE.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/MC/MCAsmStreamer.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/MC/MCCodeView.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/COFFAsmParser.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/MC/WinCOFFStreamer.cpp | 15 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/ref_addr_relocation.ll | 48 |
13 files changed, 35 insertions, 72 deletions
diff --git a/llvm/docs/Extensions.rst b/llvm/docs/Extensions.rst index 850c4275091..6c50abf192f 100644 --- a/llvm/docs/Extensions.rst +++ b/llvm/docs/Extensions.rst @@ -67,7 +67,7 @@ the target. It corresponds to the COFF relocation types .long 4 .long 242 .long 40 - .secrel32 _function_name + 0 + .secrel32 _function_name .secidx _function_name ... diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h index 6954952bb1f..cc2e30e54de 100644 --- a/llvm/include/llvm/MC/MCStreamer.h +++ b/llvm/include/llvm/MC/MCStreamer.h @@ -471,7 +471,7 @@ public: /// \brief Emits a COFF section relative relocation. /// /// \param Symbol - Symbol the section relative relocation should point to. - virtual void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset); + virtual void EmitCOFFSecRel32(MCSymbol const *Symbol); /// \brief Emit an ELF .size directive. /// diff --git a/llvm/include/llvm/MC/MCWinCOFFStreamer.h b/llvm/include/llvm/MC/MCWinCOFFStreamer.h index 63e44f2e67d..fe1ada9b9e5 100644 --- a/llvm/include/llvm/MC/MCWinCOFFStreamer.h +++ b/llvm/include/llvm/MC/MCWinCOFFStreamer.h @@ -52,7 +52,7 @@ public: void EndCOFFSymbolDef() override; void EmitCOFFSafeSEH(MCSymbol const *Symbol) override; void EmitCOFFSectionIndex(MCSymbol const *Symbol) override; - void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override; + void EmitCOFFSecRel32(MCSymbol const *Symbol) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) override; void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 9eba56d808d..b43d73988f4 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1688,7 +1688,7 @@ void AsmPrinter::EmitLabelPlusOffset(const MCSymbol *Label, uint64_t Offset, unsigned Size, bool IsSectionRelative) const { if (MAI->needsDwarfSectionOffsetDirective() && IsSectionRelative) { - OutStreamer->EmitCOFFSecRel32(Label, Offset); + OutStreamer->EmitCOFFSecRel32(Label); return; } diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp index 0358a2554c8..c104c3cd948 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp @@ -149,7 +149,7 @@ void AsmPrinter::emitDwarfSymbolReference(const MCSymbol *Label, if (!ForceOffset) { // On COFF targets, we have to emit the special .secrel32 directive. if (MAI->needsDwarfSectionOffsetDirective()) { - OutStreamer->EmitCOFFSecRel32(Label, /*Offset=*/0); + OutStreamer->EmitCOFFSecRel32(Label); return; } diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index 23526f36f2e..8e170323e5e 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -801,7 +801,7 @@ void CodeViewDebug::emitDebugInfoForFunction(const Function *GV, OS.AddComment("Function type index"); OS.EmitIntValue(getFuncIdForSubprogram(GV->getSubprogram()).getIndex(), 4); OS.AddComment("Function section relative address"); - OS.EmitCOFFSecRel32(Fn, /*Offset=*/0); + OS.EmitCOFFSecRel32(Fn); OS.AddComment("Function section index"); OS.EmitCOFFSectionIndex(Fn); OS.AddComment("Flags"); @@ -2271,7 +2271,7 @@ void CodeViewDebug::emitDebugInfoForGlobal(const DIGlobalVariable *DIGV, OS.AddComment("Type"); OS.EmitIntValue(getCompleteTypeIndex(DIGV->getType()).getIndex(), 4); OS.AddComment("DataOffset"); - OS.EmitCOFFSecRel32(GVSym, /*Offset=*/0); + OS.EmitCOFFSecRel32(GVSym); OS.AddComment("Segment"); OS.EmitCOFFSectionIndex(GVSym); OS.AddComment("Name"); diff --git a/llvm/lib/CodeGen/AsmPrinter/DIE.cpp b/llvm/lib/CodeGen/AsmPrinter/DIE.cpp index a328851410f..3fbb52f1380 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DIE.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DIE.cpp @@ -642,7 +642,7 @@ void DIEEntry::EmitValue(const AsmPrinter *AP, dwarf::Form Form) const { MCSection *Section = Unit->getSection(); if (Section) { const MCSymbol *SectionSym = Section->getBeginSymbol(); - AP->EmitLabelPlusOffset(SectionSym, Addr, SizeOf(AP, Form), true); + AP->EmitLabelPlusOffset(SectionSym, Addr, SizeOf(AP, Form)); return; } } diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp index 7cff7b9b272..e36903e1fae 100644 --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -150,7 +150,7 @@ public: void EndCOFFSymbolDef() override; void EmitCOFFSafeSEH(MCSymbol const *Symbol) override; void EmitCOFFSectionIndex(MCSymbol const *Symbol) override; - void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override; + void EmitCOFFSecRel32(MCSymbol const *Symbol) override; void emitELFSize(MCSymbol *Symbol, const MCExpr *Value) override; void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, unsigned ByteAlignment) override; @@ -614,11 +614,9 @@ void MCAsmStreamer::EmitCOFFSectionIndex(MCSymbol const *Symbol) { EmitEOL(); } -void MCAsmStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) { +void MCAsmStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol) { OS << "\t.secrel32\t"; Symbol->print(OS, MAI); - if (Offset != 0) - OS << '+' << Offset; EmitEOL(); } diff --git a/llvm/lib/MC/MCCodeView.cpp b/llvm/lib/MC/MCCodeView.cpp index ae0e50a37d7..ac1acc08b0c 100644 --- a/llvm/lib/MC/MCCodeView.cpp +++ b/llvm/lib/MC/MCCodeView.cpp @@ -200,7 +200,7 @@ void CodeViewContext::emitLineTableForFunction(MCObjectStreamer &OS, OS.EmitIntValue(unsigned(ModuleSubstreamKind::Lines), 4); OS.emitAbsoluteSymbolDiff(LineEnd, LineBegin, 4); OS.EmitLabel(LineBegin); - OS.EmitCOFFSecRel32(FuncBegin, /*Offset=*/0); + OS.EmitCOFFSecRel32(FuncBegin); OS.EmitCOFFSectionIndex(FuncBegin); // Actual line info. diff --git a/llvm/lib/MC/MCParser/COFFAsmParser.cpp b/llvm/lib/MC/MCParser/COFFAsmParser.cpp index f4114795a92..2c9f9eb0cda 100644 --- a/llvm/lib/MC/MCParser/COFFAsmParser.cpp +++ b/llvm/lib/MC/MCParser/COFFAsmParser.cpp @@ -455,26 +455,13 @@ bool COFFAsmParser::ParseDirectiveSecRel32(StringRef, SMLoc) { if (getParser().parseIdentifier(SymbolID)) return TokError("expected identifier in directive"); - int64_t Offset = 0; - SMLoc OffsetLoc; - if (getLexer().is(AsmToken::Plus)) { - OffsetLoc = getLexer().getLoc(); - if (getParser().parseAbsoluteExpression(Offset)) - return true; - } - if (getLexer().isNot(AsmToken::EndOfStatement)) return TokError("unexpected token in directive"); - if (Offset < 0 || Offset > UINT32_MAX) - return Error(OffsetLoc, - "invalid '.secrel32' directive offset, can't be less " - "than zero or greater than UINT32_MAX"); - MCSymbol *Symbol = getContext().getOrCreateSymbol(SymbolID); Lex(); - getStreamer().EmitCOFFSecRel32(Symbol, Offset); + getStreamer().EmitCOFFSecRel32(Symbol); return false; } diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index 96fb566aa3a..ebbf8116fa3 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -125,7 +125,7 @@ void MCStreamer::EmitSymbolValue(const MCSymbol *Sym, unsigned Size, if (!IsSectionRelative) EmitValueImpl(MCSymbolRefExpr::create(Sym, getContext()), Size); else - EmitCOFFSecRel32(Sym, /*Offset=*/0); + EmitCOFFSecRel32(Sym); } void MCStreamer::EmitDTPRel64Value(const MCExpr *Value) { @@ -689,7 +689,8 @@ void MCStreamer::EmitCOFFSafeSEH(MCSymbol const *Symbol) { void MCStreamer::EmitCOFFSectionIndex(MCSymbol const *Symbol) { } -void MCStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) {} +void MCStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol) { +} /// EmitRawText - If this file is backed by an assembly streamer, this dumps /// the specified string in the output .s file. This capability is diff --git a/llvm/lib/MC/WinCOFFStreamer.cpp b/llvm/lib/MC/WinCOFFStreamer.cpp index 6383d879403..5c6407ef1e5 100644 --- a/llvm/lib/MC/WinCOFFStreamer.cpp +++ b/llvm/lib/MC/WinCOFFStreamer.cpp @@ -195,20 +195,11 @@ void MCWinCOFFStreamer::EmitCOFFSectionIndex(MCSymbol const *Symbol) { DF->getContents().resize(DF->getContents().size() + 2, 0); } -void MCWinCOFFStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol, - uint64_t Offset) { +void MCWinCOFFStreamer::EmitCOFFSecRel32(MCSymbol const *Symbol) { MCDataFragment *DF = getOrCreateDataFragment(); - // Create Symbol A for the relocation relative reference. - const MCExpr *MCE = MCSymbolRefExpr::create(Symbol, getContext()); - // Add the constant offset, if given. - if (Offset) - MCE = MCBinaryExpr::createAdd( - MCE, MCConstantExpr::create(Offset, getContext()), getContext()); - // Build the secrel32 relocation. - MCFixup Fixup = MCFixup::create(DF->getContents().size(), MCE, FK_SecRel_4); - // Record the relocation. + const MCSymbolRefExpr *SRE = MCSymbolRefExpr::create(Symbol, getContext()); + MCFixup Fixup = MCFixup::create(DF->getContents().size(), SRE, FK_SecRel_4); DF->getFixups().push_back(Fixup); - // Emit 4 bytes (zeros) to the object file. DF->getContents().resize(DF->getContents().size() + 4, 0); } diff --git a/llvm/test/DebugInfo/X86/ref_addr_relocation.ll b/llvm/test/DebugInfo/X86/ref_addr_relocation.ll index 81aedeeeaa0..167a154a3e3 100644 --- a/llvm/test/DebugInfo/X86/ref_addr_relocation.ll +++ b/llvm/test/DebugInfo/X86/ref_addr_relocation.ll @@ -1,22 +1,10 @@ -; RUN: llc -filetype=asm -O0 -mtriple=x86_64-linux-gnu < %s -dwarf-version 2 | FileCheck -check-prefixes=CHECK,ELF-ASM %s -; RUN: llc -filetype=obj -O0 %s -mtriple=x86_64-linux-gnu -o %t-2 -dwarf-version 2 -; RUN: llvm-dwarfdump %t-2 | FileCheck %s -check-prefix=CHECK-DWARF -; RUN: llc -filetype=obj -O0 %s -mtriple=x86_64-linux-gnu -o %t-4 -dwarf-version 2 -; RUN: llvm-dwarfdump %t-4 | FileCheck %s -check-prefix=CHECK-DWARF +; RUN: llc -filetype=asm -O0 -mtriple=x86_64-linux-gnu < %s | FileCheck %s +; RUN: llc -filetype=obj -O0 %s -mtriple=x86_64-linux-gnu -o %t +; RUN: llvm-dwarfdump %t | FileCheck %s -check-prefix=CHECK-DWARF -; RUN: llc -filetype=asm -O0 -mtriple=x86_64-apple-darwin < %s -dwarf-version 2 | FileCheck -check-prefixes=CHECK,DARWIN-ASM2 %s -; RUN: llc -filetype=asm -O0 -mtriple=x86_64-apple-darwin < %s -dwarf-version 4 | FileCheck -check-prefixes=CHECK,DARWIN-ASM4 %s -; RUN: llc -filetype=obj %s -mtriple=x86_64-apple-darwin -o %t2-2 -dwarf-version 2 -; RUN: llvm-dwarfdump %t2-2 | FileCheck %s -check-prefix=CHECK-DWARF -; RUN: llc -filetype=obj %s -mtriple=x86_64-apple-darwin -o %t2-4 -dwarf-version 4 -; RUN: llvm-dwarfdump %t2-4 | FileCheck %s -check-prefix=CHECK-DWARF - -; RUN: llc -filetype=asm -O0 -mtriple=x86_64-pc-win32 < %s -dwarf-version 2 | FileCheck -check-prefixes=CHECK,COFF-ASM %s -; RUN: llc -filetype=asm -O0 -mtriple=x86_64-pc-win32 < %s -dwarf-version 4 | FileCheck -check-prefixes=CHECK,COFF-ASM %s -; RUN: llc -filetype=obj -O0 %s -mtriple=x86_64-pc-win32 -o %t3-2 -dwarf-version 2 -; RUN: llvm-dwarfdump %t3-2 | FileCheck %s -check-prefix=CHECK-DWARF2 -; RUN: llc -filetype=obj -O0 %s -mtriple=x86_64-pc-win32 -o %t3-4 -dwarf-version 4 -; RUN: llvm-dwarfdump %t3-4 | FileCheck %s -check-prefix=CHECK-DWARF +; RUN: llc -filetype=asm -O0 -mtriple=x86_64-apple-darwin < %s | FileCheck --check-prefix=DARWIN-ASM %s +; RUN: llc -filetype=obj %s -mtriple=x86_64-apple-darwin -o %t2 +; RUN: llvm-dwarfdump %t2 | FileCheck %s -check-prefix=DARWIN-DWARF ; Testing case generated from: ; clang++ tu1.cpp tu2.cpp -g -emit-llvm -c @@ -34,10 +22,7 @@ ; Make sure we use relocation for ref_addr on non-darwin platforms. ; CHECK: DW_TAG_compile_unit ; CHECK: DW_TAG_variable -; ELF-ASM: .long [[TYPE:.*]] # DW_AT_type -; DARWIN-ASM2: .long [[TYPE:.*]] ## DW_AT_type -; DARWIN-ASM4: .long [[TYPE:.*]] ## DW_AT_type -; COFF-ASM: .long [[TYPE:.*]] # DW_AT_type +; CHECK: .long [[TYPE:.*]] # DW_AT_type ; CHECK: DW_TAG_structure_type ; CHECK: cu_begin1 ; CHECK: DW_TAG_compile_unit @@ -45,24 +30,25 @@ ; This variable's type is in the 1st CU. ; 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 -; COFF-ASM: .secrel32 .Lsection_info+[[TYPE]] # DW_AT_type -; DARWIN-ASM2: .quad [[TYPE]] ## DW_AT_type -; DARWIN-ASM4: .long [[TYPE]] ## DW_AT_type +; CHECK: .quad .Lsection_info+[[TYPE]] # DW_AT_type ; CHECK-NOT: DW_TAG_structure_type ; CHECK: .section +; test that we don't create useless labels +; DARWIN-ASM: .long [[TYPE:.*]] ## DW_AT_type +; DARWIN-ASM: .quad [[TYPE]] ## DW_AT_type + ; CHECK-DWARF: DW_TAG_compile_unit ; CHECK-DWARF: 0x[[ADDR:.*]]: DW_TAG_structure_type ; CHECK-DWARF: DW_TAG_compile_unit ; CHECK-DWARF: DW_TAG_variable ; CHECK-DWARF: DW_AT_type [DW_FORM_ref_addr] {{.*}}[[ADDR]]) -; CHECK-DWARF2: DW_TAG_compile_unit -; CHECK-DWARF2: DW_TAG_variable -; CHECK-DWARF2: DW_AT_type [DW_FORM_ref4] {{.*}} => {[[ADDR:.*]]}) -; CHECK-DWARF2: [[ADDR]]: DW_TAG_structure_type +; DARWIN-DWARF: DW_TAG_compile_unit +; DARWIN-DWARF: 0x[[ADDR:.*]]: DW_TAG_structure_type +; DARWIN-DWARF: DW_TAG_compile_unit +; DARWIN-DWARF: DW_TAG_variable +; DARWIN-DWARF: DW_AT_type [DW_FORM_ref_addr] {{.*}}[[ADDR]]) %struct.foo = type { i8 } |