summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/MC/ELFObjectWriter.cpp8
-rw-r--r--test/MC/ELF/many-sections-2.s24
2 files changed, 28 insertions, 4 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp
index eb8b9bfe0c..7c2135b248 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 92772a3991..d1f9d008f5 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