diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index dbe0dd870f6..2fca31104a8 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 84b558822da..98ef50b50f5 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 7ad13361b7e..ceb9486c302 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 01aeac664d6..cdef5e47393 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: