[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