[llvm-commits] [llvm] r94435 - in /llvm/trunk: include/llvm/MC/MCDirectives.h lib/MC/MCAsmStreamer.cpp lib/MC/MCMachOStreamer.cpp

Chris Lattner sabre at nondot.org
Mon Jan 25 10:30:45 PST 2010


Author: lattner
Date: Mon Jan 25 12:30:45 2010
New Revision: 94435

URL: http://llvm.org/viewvc/llvm-project?rev=94435&view=rev
Log:
add symbol attribute support for the ELF .type directive.

Modified:
    llvm/trunk/include/llvm/MC/MCDirectives.h
    llvm/trunk/lib/MC/MCAsmStreamer.cpp
    llvm/trunk/lib/MC/MCMachOStreamer.cpp

Modified: llvm/trunk/include/llvm/MC/MCDirectives.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCDirectives.h?rev=94435&r1=94434&r2=94435&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCDirectives.h (original)
+++ llvm/trunk/include/llvm/MC/MCDirectives.h Mon Jan 25 12:30:45 2010
@@ -20,19 +20,25 @@
   MCSA_Invalid = 0,    /// Not a valid directive.
 
   // Various directives in alphabetical order.
-  MCSA_Global,         /// .globl
-  MCSA_Hidden,         /// .hidden (ELF)
-  MCSA_IndirectSymbol, /// .indirect_symbol (MachO)
-  MCSA_Internal,       /// .internal (ELF)
-  MCSA_LazyReference,  /// .lazy_reference (MachO)
-  MCSA_Local,          /// .local (ELF)
-  MCSA_NoDeadStrip,    /// .no_dead_strip (MachO)
-  MCSA_PrivateExtern,  /// .private_extern (MachO)
-  MCSA_Protected,      /// .protected (ELF)
-  MCSA_Reference,      /// .reference (MachO)
-  MCSA_Weak,           /// .weak
-  MCSA_WeakDefinition, /// .weak_definition (MachO)
-  MCSA_WeakReference   /// .weak_reference (MachO)
+  MCSA_ELF_TypeFunction,    /// .type _foo, STT_FUNC  # aka @function
+  MCSA_ELF_TypeIndFunction, /// .type _foo, STT_GNU_IFUNC
+  MCSA_ELF_TypeObject,      /// .type _foo, STT_OBJECT  # aka @object
+  MCSA_ELF_TypeTLS,         /// .type _foo, STT_TLS     # aka @tls_object
+  MCSA_ELF_TypeCommon,      /// .type _foo, STT_COMMON  # aka @common
+  MCSA_ELF_TypeNoType,      /// .type _foo, STT_NOTYPE  # aka @notype
+  MCSA_Global,              /// .globl
+  MCSA_Hidden,              /// .hidden (ELF)
+  MCSA_IndirectSymbol,      /// .indirect_symbol (MachO)
+  MCSA_Internal,            /// .internal (ELF)
+  MCSA_LazyReference,       /// .lazy_reference (MachO)
+  MCSA_Local,               /// .local (ELF)
+  MCSA_NoDeadStrip,         /// .no_dead_strip (MachO)
+  MCSA_PrivateExtern,       /// .private_extern (MachO)
+  MCSA_Protected,           /// .protected (ELF)
+  MCSA_Reference,           /// .reference (MachO)
+  MCSA_Weak,                /// .weak
+  MCSA_WeakDefinition,      /// .weak_definition (MachO)
+  MCSA_WeakReference        /// .weak_reference (MachO)
 };
 
 enum MCAssemblerFlag {

Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=94435&r1=94434&r2=94435&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Mon Jan 25 12:30:45 2010
@@ -227,7 +227,29 @@
                                         MCSymbolAttr Attribute) {
   switch (Attribute) {
   case MCSA_Invalid: assert(0 && "Invalid symbol attribute");
-  case MCSA_Global:         OS << MAI.getGlobalDirective(); break; // .globl
+  case MCSA_ELF_TypeFunction:    /// .type _foo, STT_FUNC  # aka @function
+  case MCSA_ELF_TypeIndFunction: /// .type _foo, STT_GNU_IFUNC
+  case MCSA_ELF_TypeObject:      /// .type _foo, STT_OBJECT  # aka @object
+  case MCSA_ELF_TypeTLS:         /// .type _foo, STT_TLS     # aka @tls_object
+  case MCSA_ELF_TypeCommon:      /// .type _foo, STT_COMMON  # aka @common
+  case MCSA_ELF_TypeNoType:      /// .type _foo, STT_NOTYPE  # aka @notype
+    assert(MAI.hasDotTypeDotSizeDirective() && "Symbol Attr not supported");
+    OS << ".type " << *Symbol << ','
+       << ((MAI.getCommentString()[0] != '@') ? '@' : '%');
+    switch (Attribute) {
+    default: assert(0 && "Unknown ELF .type");
+    case MCSA_ELF_TypeFunction:    OS << "function"; break;
+    case MCSA_ELF_TypeIndFunction: OS << "gnu_indirect_function"; break;
+    case MCSA_ELF_TypeObject:      OS << "object"; break;
+    case MCSA_ELF_TypeTLS:         OS << "tls_object"; break;
+    case MCSA_ELF_TypeCommon:      OS << "common"; break;
+    case MCSA_ELF_TypeNoType:      OS << "no_type"; break;
+    }
+    EmitEOL();
+    return;
+  case MCSA_Global: // .globl/.global
+    OS << MAI.getGlobalDirective();
+    break;
   case MCSA_Hidden:         OS << ".hidden ";          break;
   case MCSA_IndirectSymbol: OS << ".indirect_symbol "; break;
   case MCSA_Internal:       OS << ".internal ";        break;

Modified: llvm/trunk/lib/MC/MCMachOStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCMachOStreamer.cpp?rev=94435&r1=94434&r2=94435&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCMachOStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCMachOStreamer.cpp Mon Jan 25 12:30:45 2010
@@ -223,6 +223,12 @@
   // defined.
   switch (Attribute) {
   case MCSA_Invalid:
+  case MCSA_ELF_TypeFunction:
+  case MCSA_ELF_TypeIndFunction:
+  case MCSA_ELF_TypeObject:
+  case MCSA_ELF_TypeTLS:
+  case MCSA_ELF_TypeCommon:
+  case MCSA_ELF_TypeNoType:
   case MCSA_IndirectSymbol:
   case MCSA_Hidden:
   case MCSA_Internal:





More information about the llvm-commits mailing list