From 90e799705c1d9709d2ea1b18ef74f26576dd856c Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sun, 14 Nov 2010 21:11:16 +0000 Subject: [PATCH] Fix another case of a .comm directive without a corresponding .type directive. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119073 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCELFStreamer.cpp | 3 ++- test/MC/ELF/common.s | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/MC/MCELFStreamer.cpp b/lib/MC/MCELFStreamer.cpp index ba51f67f78..a2d94f5ba1 100644 --- a/lib/MC/MCELFStreamer.cpp +++ b/lib/MC/MCELFStreamer.cpp @@ -409,9 +409,10 @@ void MCELFStreamer::EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, if (!BindingExplicitlySet.count(Symbol)) { SetBinding(SD, ELF::STB_GLOBAL); SD.setExternal(true); - SetType(SD, ELF::STT_OBJECT); } + SetType(SD, ELF::STT_OBJECT); + if (GetBinding(SD) == ELF_STB_Local) { const MCSection *Section = getAssembler().getContext().getELFSection(".bss", MCSectionELF::SHT_NOBITS, diff --git a/test/MC/ELF/common.s b/test/MC/ELF/common.s index 96865befe3..0ffa6f4546 100644 --- a/test/MC/ELF/common.s +++ b/test/MC/ELF/common.s @@ -30,11 +30,24 @@ // CHECK-NEXT: ('st_value', 0x00000001) // CHECK-NEXT: ('st_size', 0x00000001) + .local common6 + .comm common6,8,16 + +// CHECK: # Symbol 0x00000003 +// CHECK-NEXT: (('st_name', 0x00000011) # 'common6' +// CHECK-NEXT: ('st_bind', 0x00000000) +// CHECK-NEXT: ('st_type', 0x00000001) +// CHECK-NEXT: ('st_other', 0x00000000) +// CHECK-NEXT: ('st_shndx', 0x00000003) +// CHECK-NEXT: ('st_value', 0x00000010) +// CHECK-NEXT: ('st_size', 0x00000008) +// CHECK-NEXT: ), + // Test that without an explicit .local we produce a global. .type common3,@object .comm common3,4,4 -// CHECK: ('st_name', 0x00000011) # 'common3' +// CHECK: ('st_name', 0x00000019) # 'common3' // CHECK-NEXT: ('st_bind', 0x00000001) // CHECK-NEXT: ('st_type', 0x00000001) // CHECK-NEXT: ('st_other', 0x00000000) @@ -54,7 +67,7 @@ foo: .type common4,@object .comm common4,40,16 -// CHECK: ('st_name', 0x0000001d) # 'common4' +// CHECK: ('st_name', 0x00000025) # 'common4' // CHECK-NEXT: ('st_bind', 0x00000001) // CHECK-NEXT: ('st_type', 0x00000001) // CHECK-NEXT: ('st_other', 0x00000000) @@ -64,8 +77,8 @@ foo: .comm common5,4,4 -// CHECK: # Symbol 0x00000008 -// CHECK-NEXT: (('st_name', 0x00000025) # 'common5' +// CHECK: # Symbol 0x00000009 +// CHECK-NEXT: (('st_name', 0x0000002d) # 'common5' // CHECK-NEXT: ('st_bind', 0x00000001) // CHECK-NEXT: ('st_type', 0x00000001) // CHECK-NEXT: ('st_other', 0x00000000) -- 2.11.4.GIT