aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/MC/ELFObjectWriter.cpp5
-rw-r--r--test/MC/ELF/alias.s1
-rw-r--r--test/MC/ELF/size.s3
-rw-r--r--test/MC/ELF/undef.s1
4 files changed, 8 insertions, 2 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index dbe0dd870f..2fca31104a 100644
--- a/lib/MC/ELFObjectWriter.cpp
+++ b/lib/MC/ELFObjectWriter.cpp
@@ -868,8 +868,11 @@ static bool isInSymtab(const MCAssembler &Asm, const MCSymbolData &Data,
const MCSymbol &Symbol = Data.getSymbol();
+ if (Symbol.getName() == "_GLOBAL_OFFSET_TABLE_")
+ return true;
+
const MCSymbol &A = AliasedSymbol(Symbol);
- if (&A != &Symbol && A.isUndefined())
+ if (!A.isVariable() && A.isUndefined() && !Data.isCommon())
return false;
if (!Asm.isSymbolLinkerVisible(Symbol) && !Symbol.isUndefined())
diff --git a/test/MC/ELF/alias.s b/test/MC/ELF/alias.s
index 84b558822d..98ef50b50f 100644
--- a/test/MC/ELF/alias.s
+++ b/test/MC/ELF/alias.s
@@ -15,6 +15,7 @@ bar3 = foo3
foo4:
bar4 = foo4
+ .long foo2
// CHECK: # Symbol 0x00000001
// CHECK-NEXT: (('st_name', 0x00000005) # 'bar'
// CHECK-NEXT: ('st_bind', 0x00000000)
diff --git a/test/MC/ELF/size.s b/test/MC/ELF/size.s
index 7ad13361b7..ceb9486c30 100644
--- a/test/MC/ELF/size.s
+++ b/test/MC/ELF/size.s
@@ -6,4 +6,5 @@
// CHECK-NEXT: (('st_name', 0x00000001) # 'foo'
// CHECK-NEXT: ('st_bind', 0x00000001)
- .size foo, .Lbar-foo
+ .size foo, .Lbar-foo
+ .long foo
diff --git a/test/MC/ELF/undef.s b/test/MC/ELF/undef.s
index 01aeac664d..cdef5e4739 100644
--- a/test/MC/ELF/undef.s
+++ b/test/MC/ELF/undef.s
@@ -10,6 +10,7 @@
.type .Lsym5,@object
.type sym6,@object
+ .long sym6
.section .rodata.str1.1,"aMS",@progbits,1
.Lsym7: