Follow aliases when determining if a symbol is thumb.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 22 Apr 2014 19:11:07 +0000 (19:11 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 22 Apr 2014 19:11:07 +0000 (19:11 +0000)
This fixes pr19484.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206917 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/ELFObjectWriter.cpp
test/MC/ARM/elf-thumbfunc.s

index 0885688d263af55f64c72d743341e189d5891ffc..636d449e2077100b82b8e308b84240812f42749d 100644 (file)
@@ -492,7 +492,6 @@ uint64_t ELFObjectWriter::SymbolValue(MCSymbolData &OrigData,
     return Data->getCommonAlignment();
 
   const MCSymbol *Symbol = &Data->getSymbol();
-  bool IsThumbFunc = OrigData.getFlags() & ELF_Other_ThumbFunc;
 
   uint64_t Res = 0;
   if (Symbol->isVariable()) {
@@ -514,7 +513,7 @@ uint64_t ELFObjectWriter::SymbolValue(MCSymbolData &OrigData,
     }
   }
 
-  if (IsThumbFunc)
+  if (Data && Data->getFlags() & ELF_Other_ThumbFunc)
     Res |= 1;
 
   if (!Symbol || !Symbol->isInSection())
index 0ea11821b96ba6ada8712999d0bffef74eccb673..af061b50bc3d224511d23cdb7df844617d6a79e5 100644 (file)
 foo:
        bx      lr
 
-@@ make sure foo is thumb function: bit 0 = 1 (st_value)
+       .global bar
+bar = foo
+
+@@ make sure foo and bar are thumb function: bit 0 = 1 (st_value)
+@CHECK:        Symbol {
+@CHECK:          Name: bar
+@CHECK-NEXT:     Value: 0x1
+@CHECK-NEXT:     Size: 0
+@CHECK-NEXT:     Binding: Global
+@CHECK-NEXT:     Type: Function
+
 @CHECK:        Symbol {
 @CHECK:          Name: foo
 @CHECK-NEXT:     Value: 0x1