diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index eb8b9bfe0ca..7c2135b2487 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/lib/MC/ELFObjectWriter.cpp @@ -612,13 +612,15 @@ void ELFObjectWriter::WriteSymbol(SymbolTableWriter &Writer, ELFSymbolData &MSD, MCSymbolData &Data = Layout.getAssembler().getSymbolData(OrigData.getSymbol().AliasedSymbol()); - bool IsReserved = Data.isCommon() || Data.getSymbol().isAbsolute() || - Data.getSymbol().isVariable(); + const MCSymbol *Base = getBaseSymbol(Layout, OrigData.getSymbol()); + + // This has to be in sync with when computeSymbolTable uses SHN_ABS or + // SHN_COMMON. + bool IsReserved = !Base || OrigData.isCommon(); // Binding and Type share the same byte as upper and lower nibbles uint8_t Binding = MCELF::GetBinding(OrigData); uint8_t Type = MCELF::GetType(OrigData); - const MCSymbol *Base = getBaseSymbol(Layout, OrigData.getSymbol()); if (Base) { MCSymbolData BaseSD = Layout.getAssembler().getSymbolData(*Base); Type = mergeTypeForSet(Type, MCELF::GetType(BaseSD)); diff --git a/test/MC/ELF/many-sections-2.s b/test/MC/ELF/many-sections-2.s index 92772a39910..d1f9d008f54 100644 --- a/test/MC/ELF/many-sections-2.s +++ b/test/MC/ELF/many-sections-2.s @@ -10,8 +10,28 @@ // Test that we don't create a symbol for the symtab_shndx section. // SYMBOLS-NOT: symtab_shndx -// Test that this file has one section too many. +// Test that both a and b show up in the correct section. +// SYMBOLS: Name: a (1) +// SYMBOLS-NEXT: Value: 0x0 +// SYMBOLS-NEXT: Size: 0 +// SYMBOLS-NEXT: Binding: Local (0x0) +// SYMBOLS-NEXT: Type: None (0x0) +// SYMBOLS-NEXT: Other: 0 +// SYMBOLS-NEXT: Section: last (0xFF00) +// SYMBOLS-NEXT: } +// SYMBOLS-NEXT: Symbol { +// SYMBOLS-NEXT: Name: b (3) +// SYMBOLS-NEXT: Value: 0x1 +// SYMBOLS-NEXT: Size: 0 +// SYMBOLS-NEXT: Binding: Local (0x0) +// SYMBOLS-NEXT: Type: None (0x0) +// SYMBOLS-NEXT: Other: 0 +// SYMBOLS-NEXT: Section: last (0xFF00) +// SYMBOLS-NEXT: } + + +// Test that this file has one section too many. // SYMBOLS: Name: last (0) // SYMBOLS-NEXT: Value: 0x0 // SYMBOLS-NEXT: Size: 0 @@ -109,3 +129,5 @@ gen_sections8 l gen_sections4 m .section last +a: +b = a + 1