Skip to content

Commit

Permalink
Revert 240130, it caused crashes (repro in PR23900).
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240193 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
nico committed Jun 19, 2015
1 parent 30c3b2a commit 7081f6f
Show file tree
Hide file tree
Showing 26 changed files with 134 additions and 127 deletions.
8 changes: 5 additions & 3 deletions include/llvm/MC/MCContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,8 @@ namespace llvm {

MCSymbol *createSymbolImpl(const StringMapEntry<bool> *Name,
bool CanBeUnnamed);
MCSymbol *createSymbol(StringRef Name, bool AlwaysAddSuffix);
MCSymbol *createSymbol(StringRef Name, bool AlwaysAddSuffix,
bool IsTemporary);

MCSymbol *getOrCreateDirectionalLocalSymbol(unsigned LocalLabelVal,
unsigned Instance);
Expand Down Expand Up @@ -248,9 +249,10 @@ namespace llvm {

/// Create and return a new assembler temporary symbol with a unique but
/// unspecified name.
MCSymbol *createTempSymbol();
MCSymbol *createTempSymbol(bool CanBeUnnamed = true);

MCSymbol *createTempSymbol(const Twine &Name, bool AlwaysAddSuffix);
MCSymbol *createTempSymbol(const Twine &Name, bool AlwaysAddSuffix,
bool CanBeUnnamed = true);

/// Create the definition of a directional local symbol for numbered label
/// (used for "1:" definitions).
Expand Down
13 changes: 3 additions & 10 deletions lib/MC/ELFObjectWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -786,15 +786,10 @@ void ELFObjectWriter::computeSymbolTable(
Renames.count(&Symbol)))
continue;

if (Symbol.isTemporary() && Symbol.isUndefined())
Ctx.reportFatalError(SMLoc(), "Undefined temporary");

ELFSymbolData MSD;
MSD.Symbol = cast<MCSymbolELF>(&Symbol);

bool Local = Symbol.getBinding() == ELF::STB_LOCAL;
assert(Local || !Symbol.isTemporary());

if (Symbol.isAbsolute()) {
MSD.SectionIndex = ELF::SHN_ABS;
} else if (Symbol.isCommon()) {
Expand Down Expand Up @@ -893,11 +888,9 @@ void ELFObjectWriter::computeSymbolTable(
unsigned Index = FileNames.size() + 1;

for (ELFSymbolData &MSD : LocalSymbolData) {
unsigned StringIndex;
if (MSD.Symbol->getType() == ELF::STT_SECTION || MSD.Name.empty())
StringIndex = 0;
else
StringIndex = StrTabBuilder.getOffset(MSD.Name);
unsigned StringIndex = MSD.Symbol->getType() == ELF::STT_SECTION
? 0
: StrTabBuilder.getOffset(MSD.Name);
MSD.Symbol->setIndex(Index++);
writeSymbol(Writer, StringIndex, MSD, Layout);
}
Expand Down
28 changes: 15 additions & 13 deletions lib/MC/MCContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ MCSymbol *MCContext::getOrCreateSymbol(const Twine &Name) {

MCSymbol *&Sym = Symbols[NameRef];
if (!Sym)
Sym = createSymbol(NameRef, false);
Sym = createSymbol(NameRef, false, false);

return Sym;
}
Expand Down Expand Up @@ -175,16 +175,17 @@ MCSymbol *MCContext::createSymbolImpl(const StringMapEntry<bool> *Name,
IsTemporary);
}

MCSymbol *MCContext::createSymbol(StringRef Name, bool AlwaysAddSuffix) {
MCSymbol *MCContext::createSymbol(StringRef Name, bool AlwaysAddSuffix,
bool CanBeUnnamed) {
if (CanBeUnnamed && !UseNamesOnTempLabels)
return createSymbolImpl(nullptr, true);

// Determine whether this is an user writter assembler temporary or normal
// label, if used.
bool IsTemporary = false;
if (AllowTemporaryLabels)
bool IsTemporary = CanBeUnnamed;
if (AllowTemporaryLabels && !IsTemporary)
IsTemporary = Name.startswith(MAI->getPrivateGlobalPrefix());

if (IsTemporary && !UseNamesOnTempLabels)
return createSymbolImpl(nullptr, true);

SmallString<128> NewName = Name;
bool AddSuffix = AlwaysAddSuffix;
unsigned &NextUniqueID = NextID[Name];
Expand All @@ -205,20 +206,21 @@ MCSymbol *MCContext::createSymbol(StringRef Name, bool AlwaysAddSuffix) {
llvm_unreachable("Infinite loop");
}

MCSymbol *MCContext::createTempSymbol(const Twine &Name, bool AlwaysAddSuffix) {
MCSymbol *MCContext::createTempSymbol(const Twine &Name, bool AlwaysAddSuffix,
bool CanBeUnnamed) {
SmallString<128> NameSV;
raw_svector_ostream(NameSV) << MAI->getPrivateGlobalPrefix() << Name;
return createSymbol(NameSV, AlwaysAddSuffix);
return createSymbol(NameSV, AlwaysAddSuffix, CanBeUnnamed);
}

MCSymbol *MCContext::createLinkerPrivateTempSymbol() {
SmallString<128> NameSV;
raw_svector_ostream(NameSV) << MAI->getLinkerPrivateGlobalPrefix() << "tmp";
return createSymbol(NameSV, true);
return createSymbol(NameSV, true, false);
}

MCSymbol *MCContext::createTempSymbol() {
return createTempSymbol("tmp", true);
MCSymbol *MCContext::createTempSymbol(bool CanBeUnnamed) {
return createTempSymbol("tmp", true, CanBeUnnamed);
}

unsigned MCContext::NextInstance(unsigned LocalLabelVal) {
Expand All @@ -239,7 +241,7 @@ MCSymbol *MCContext::getOrCreateDirectionalLocalSymbol(unsigned LocalLabelVal,
unsigned Instance) {
MCSymbol *&Sym = LocalSymbols[std::make_pair(LocalLabelVal, Instance)];
if (!Sym)
Sym = createTempSymbol();
Sym = createTempSymbol(false);
return Sym;
}

Expand Down
6 changes: 4 additions & 2 deletions lib/MC/MCParser/AsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1306,8 +1306,10 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,
MCSymbol *Sym;
if (LocalLabelVal == -1) {
if (ParsingInlineAsm && SI) {
StringRef RewrittenLabel = SI->LookupInlineAsmLabel(IDVal, getSourceManager(), IDLoc, true);
assert(RewrittenLabel.size() && "We should have an internal name here.");
StringRef RewrittenLabel =
SI->LookupInlineAsmLabel(IDVal, getSourceManager(), IDLoc, true);
assert(RewrittenLabel.size() &&
"We should have an internal name here.");
Info.AsmRewrites->push_back(AsmRewrite(AOK_Label, IDLoc,
IDVal.size(), RewrittenLabel));
IDVal = RewrittenLabel;
Expand Down
3 changes: 1 addition & 2 deletions lib/MC/MachObjectWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -565,8 +565,7 @@ void MachObjectWriter::computeSymbolTable(

MachSymbolData MSD;
MSD.Symbol = &Symbol;
StringRef Name = Symbol.getName();
MSD.StringIndex = Name.empty() ? 0 : StringTable.getOffset(Name);
MSD.StringIndex = StringTable.getOffset(Symbol.getName());

if (Symbol.isAbsolute()) {
MSD.SectionIndex = 0;
Expand Down
4 changes: 2 additions & 2 deletions test/CodeGen/SPARC/obj-relocs.ll
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_ 0x8
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT22 AGlobalVar 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT10 AGlobalVar 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT22 - 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT10 - 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT22 .L.mystr 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOT10 .L.mystr 0x0
; CHECK-PIC-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_WPLT30 bar 0x0
; CHECK-PIC: ]

Expand Down
2 changes: 1 addition & 1 deletion test/MC/ARM/elf-reloc-02.s
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@

// OBJ: Relocations [
// OBJ: Section {{.*}} .rel.text {
// OBJ-NEXT: 0x{{[0-9,A-F]+}} R_ARM_MOVW_ABS_NC -
// OBJ-NEXT: 0x{{[0-9,A-F]+}} R_ARM_MOVW_ABS_NC .L.str
// OBJ: }
// OBJ: ]
4 changes: 2 additions & 2 deletions test/MC/ELF/basic-elf-32.s
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ main: # @main

// CHECK: Relocations [
// CHECK: Section {{.*}} .rel.text {
// CHECK: 0x6 R_386_32 -
// CHECK: 0x6 R_386_32 .L.str1
// CHECK: 0xB R_386_PC32 puts
// CHECK: 0x12 R_386_32 -
// CHECK: 0x12 R_386_32 .L.str2
// CHECK: 0x17 R_386_PC32 puts
// CHECK: }
// CHECK: ]
Expand Down
21 changes: 3 additions & 18 deletions test/MC/ELF/compression.s
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,9 @@

// In x86 32 bit named symbols are used for temporary symbols in merge
// sections, so make sure we handle symbols inside compressed sections
// 386-SYMBOLS: Symbol {
// 386-SYMBOLS-NEXT: Name: (0)
// 386-SYMBOLS-NEXT: Value: 0x0
// 386-SYMBOLS-NEXT: Size: 0
// 386-SYMBOLS-NEXT: Binding: Local (0x0)
// 386-SYMBOLS-NEXT: Type: None (0x0)
// 386-SYMBOLS-NEXT: Other: 0
// 386-SYMBOLS-NEXT: Section: Undefined (0x0)
// 386-SYMBOLS-NEXT: }
// 386-SYMBOLS-NEXT: Symbol {
// 386-SYMBOLS-NEXT: Name: (0)
// 386-SYMBOLS-NEXT: Value: 0x0
// 386-SYMBOLS-NEXT: Size: 0
// 386-SYMBOLS-NEXT: Binding: Local (0x0)
// 386-SYMBOLS-NEXT: Type: None (0x0)
// 386-SYMBOLS-NEXT: Other: 0
// 386-SYMBOLS-NEXT: Section: .zdebug_str (0xA)
// 386-SYMBOLS-NEXT: }
// 386-SYMBOLS: Name: .Linfo_string0
// 386-SYMBOLS-NOT: }
// 386-SYMBOLS: Section: .zdebug_str

.section .debug_line,"",@progbits

Expand Down
6 changes: 3 additions & 3 deletions test/MC/ELF/discriminator.s
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ foo:
.long .L.debug_abbrev_begin # Offset Into Abbrev. Section
.byte 8 # Address Size (in bytes)
.byte 1 # Abbrev [1] 0xb:0x1b DW_TAG_compile_unit
.long info_string0 # DW_AT_producer
.long .Linfo_string0 # DW_AT_producer
.short 12 # DW_AT_language
.long info_string1 # DW_AT_name
.long .Linfo_string1 # DW_AT_name
.quad 0 # DW_AT_low_pc
.long 0 # DW_AT_stmt_list
.long info_string2 # DW_AT_comp_dir
.long .Linfo_string2 # DW_AT_comp_dir
# DW_AT_APPLE_optimized
.section .debug_abbrev,"",@progbits
.L.debug_abbrev_begin:
Expand Down
4 changes: 2 additions & 2 deletions test/MC/ELF/merge.s
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ foo:

// CHECK: Relocations [
// CHECK-NEXT: Section {{.*}} .rela.text {
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_PC32 - 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_PC32 .Lfoo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32 .sec1 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32 - 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32 .Lfoo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_PLT32 foo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_GOTPCREL foo 0x{{[^ ]+}}
// CHECK-NEXT: 0x{{[^ ]+}} R_X86_64_32S zed 0x{{[^ ]+}}
Expand Down
2 changes: 1 addition & 1 deletion test/MC/ELF/relocation-386.s
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

// CHECK: Relocations [
// CHECK-NEXT: Section {{.*}} .rel.text {
// CHECK-NEXT: 0x2 R_386_GOTOFF - 0x0
// CHECK-NEXT: 0x2 R_386_GOTOFF .Lfoo 0x0
// CHECK-NEXT: 0x{{[^ ]+}} R_386_PLT32 bar2 0x0
// CHECK-NEXT: 0x{{[^ ]+}} R_386_GOTPC _GLOBAL_OFFSET_TABLE_ 0x0
// Relocation 3 (bar3@GOTOFF) is done with symbol 7 (bss)
Expand Down
4 changes: 0 additions & 4 deletions test/MC/ELF/undef-temp.s

This file was deleted.

12 changes: 11 additions & 1 deletion test/MC/ELF/undef.s
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

// Test which symbols should be in the symbol table

.long .Lsym1
.Lsym2:
.Lsym3:
.Lsym4 = .Lsym2 - .Lsym3
Expand Down Expand Up @@ -32,7 +33,7 @@ test2_b = undef + 1
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: (0)
// CHECK-NEXT: Name: .Lsym8
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Local
Expand All @@ -41,6 +42,15 @@ test2_b = undef + 1
// CHECK-NEXT: Section: .rodata.str1.1
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: .Lsym1
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: Undefined
// CHECK-NEXT: }
// CHECK-NEXT: Symbol {
// CHECK-NEXT: Name: sym6
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0
Expand Down
18 changes: 18 additions & 0 deletions test/MC/ELF/undef2.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -t | FileCheck %s

// Test that this produces an undefined reference to .Lfoo

je .Lfoo

// CHECK: Section {
// CHECK: Name: .strtab

// CHECK: Symbol {
// CHECK: Name: .Lfoo
// CHECK-NEXT: Value:
// CHECK-NEXT: Size:
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type:
// CHECK-NEXT: Other:
// CHECK-NEXT: Section:
// CHECK-NEXT: }
2 changes: 1 addition & 1 deletion test/MC/MachO/AArch64/classrefs.s
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: Lbar
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down
2 changes: 1 addition & 1 deletion test/MC/MachO/AArch64/darwin-ARM64-reloc.s
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ L_.str:
; CHECK-NEXT: PCRel: 1
; CHECK-NEXT: Length: 2
; CHECK-NEXT: Type: ARM64_RELOC_PAGE21 (3)
; CHECK-NEXT: Symbol: -
; CHECK-NEXT: Symbol: L_.str
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Offset: 0x20
Expand Down
8 changes: 4 additions & 4 deletions test/MC/MachO/AArch64/ld64-workaround.s
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,28 @@
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: Llit16
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x10
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: Llit8
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x8
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: Llit4
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x0
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: Lcfstring
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down
8 changes: 4 additions & 4 deletions test/MC/MachO/AArch64/mergeable.s
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,28 @@ L1:
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: L1
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x10
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: L1
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x8
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: L0
// CHECK-NEXT: }
// CHECK-NEXT: Relocation {
// CHECK-NEXT: Offset: 0x0
// CHECK-NEXT: PCRel: 0
// CHECK-NEXT: Length: 3
// CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
// CHECK-NEXT: Symbol: -
// CHECK-NEXT: Symbol: L0
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: ]
2 changes: 1 addition & 1 deletion test/MC/MachO/AArch64/reloc-crash.s
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
; CHECK-NEXT: PCRel: 0
; CHECK-NEXT: Length: 3
; CHECK-NEXT: Type: ARM64_RELOC_UNSIGNED (0)
; CHECK-NEXT: Symbol: -
; CHECK-NEXT: Symbol: Lbar
; CHECK-NEXT: }
; CHECK-NEXT: }
; CHECK-NEXT: ]
Expand Down
Loading

0 comments on commit 7081f6f

Please sign in to comment.