summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp5
-rw-r--r--llvm/test/MC/ELF/discriminator.s6
-rw-r--r--llvm/test/MC/ELF/undef-temp.s4
-rw-r--r--llvm/test/MC/ELF/undef.s10
-rw-r--r--llvm/test/MC/ELF/undef2.s18
5 files changed, 12 insertions, 31 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index db9c759f2b5..9252621bc93 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -787,10 +787,15 @@ 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()) {
diff --git a/llvm/test/MC/ELF/discriminator.s b/llvm/test/MC/ELF/discriminator.s
index 8a695b96ede..75e4e86cee0 100644
--- a/llvm/test/MC/ELF/discriminator.s
+++ b/llvm/test/MC/ELF/discriminator.s
@@ -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 .Linfo_string0 # DW_AT_producer
+ .long info_string0 # DW_AT_producer
.short 12 # DW_AT_language
- .long .Linfo_string1 # DW_AT_name
+ .long info_string1 # DW_AT_name
.quad 0 # DW_AT_low_pc
.long 0 # DW_AT_stmt_list
- .long .Linfo_string2 # DW_AT_comp_dir
+ .long info_string2 # DW_AT_comp_dir
# DW_AT_APPLE_optimized
.section .debug_abbrev,"",@progbits
.L.debug_abbrev_begin:
diff --git a/llvm/test/MC/ELF/undef-temp.s b/llvm/test/MC/ELF/undef-temp.s
new file mode 100644
index 00000000000..45537a998e7
--- /dev/null
+++ b/llvm/test/MC/ELF/undef-temp.s
@@ -0,0 +1,4 @@
+// RUN: not llvm-mc -filetype=obj -triple x86_64-pc-linux %s -o - 2>&1 | FileCheck %s
+
+// CHECK: Undefined temporary
+ .long .Lfoo
diff --git a/llvm/test/MC/ELF/undef.s b/llvm/test/MC/ELF/undef.s
index 9577ea22875..47cd85ab4a4 100644
--- a/llvm/test/MC/ELF/undef.s
+++ b/llvm/test/MC/ELF/undef.s
@@ -2,7 +2,6 @@
// Test which symbols should be in the symbol table
- .long .Lsym1
.Lsym2:
.Lsym3:
.Lsym4 = .Lsym2 - .Lsym3
@@ -42,15 +41,6 @@ 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
diff --git a/llvm/test/MC/ELF/undef2.s b/llvm/test/MC/ELF/undef2.s
deleted file mode 100644
index 6aa66c05c4b..00000000000
--- a/llvm/test/MC/ELF/undef2.s
+++ /dev/null
@@ -1,18 +0,0 @@
-// 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: }
OpenPOWER on IntegriCloud