Added the darwin .weak_def_can_be_hidden directive.
authorKevin Enderby <enderby@apple.com>
Thu, 8 Jul 2010 17:22:42 +0000 (17:22 +0000)
committerKevin Enderby <enderby@apple.com>
Thu, 8 Jul 2010 17:22:42 +0000 (17:22 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107886 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCAsmInfo.h
include/llvm/MC/MCDirectives.h
lib/MC/MCAsmInfo.cpp
lib/MC/MCAsmInfoDarwin.cpp
lib/MC/MCAsmStreamer.cpp
lib/MC/MCMachOStreamer.cpp
lib/MC/MCParser/AsmParser.cpp

index 8516de0188d65b76c3fcb52bf8cf4fad8afaef17..5d796731143800cd5d3fdf38b3bbcc7a29136c87 100644 (file)
@@ -217,6 +217,11 @@ namespace llvm {
     /// global as being a weak defined symbol.
     const char *WeakDefDirective;            // Defaults to NULL.
 
+    /// WeakDefAutoPrivateDirective - This directive, if non-null, is used to
+    /// declare a global as being a weak defined symbol that is automatically
+    /// made private by the static linker.
+    const char *WeakDefAutoPrivateDirective; // Defaults to NULL.
+
     /// LinkOnceDirective - This directive, if non-null is used to declare a
     /// global as being a weak defined symbol.  This is used on cygwin/mingw.
     const char *LinkOnceDirective;           // Defaults to NULL.
@@ -387,6 +392,9 @@ namespace llvm {
     bool hasNoDeadStrip() const { return HasNoDeadStrip; }
     const char *getWeakRefDirective() const { return WeakRefDirective; }
     const char *getWeakDefDirective() const { return WeakDefDirective; }
+    const char *getWeakDefAutoPrivateDirective() const {
+      return WeakDefAutoPrivateDirective;
+    }
     const char *getLinkOnceDirective() const { return LinkOnceDirective; }
     
     MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
index 1f7364d8124e63d7ab119d256565a26b4a28e69e..223b09ef7aee2eddb82063f204603d3c6f47f524 100644 (file)
@@ -38,7 +38,8 @@ enum MCSymbolAttr {
   MCSA_Reference,           ///< .reference (MachO)
   MCSA_Weak,                ///< .weak
   MCSA_WeakDefinition,      ///< .weak_definition (MachO)
-  MCSA_WeakReference        ///< .weak_reference (MachO)
+  MCSA_WeakReference,       ///< .weak_reference (MachO)
+  MCSA_WeakDefAutoPrivate   ///< .weak_def_can_be_hidden (MachO)
 };
 
 enum MCAssemblerFlag {
index a275be2c53c5fa8026b5b3b0edb09d8ee83591ba..b726b3d93594f282a882ee660a60cb773a78dd62 100644 (file)
@@ -59,6 +59,7 @@ MCAsmInfo::MCAsmInfo() {
   HasNoDeadStrip = false;
   WeakRefDirective = 0;
   WeakDefDirective = 0;
+  WeakDefAutoPrivateDirective = 0;
   LinkOnceDirective = 0;
   HiddenVisibilityAttr = MCSA_Hidden;
   ProtectedVisibilityAttr = MCSA_Protected;
index 0bd3b2d001e8c5cddbafdc8621605b3f3119d67f..4f5075f50ef93b09652989b02a2dcf01943985c3 100644 (file)
@@ -33,6 +33,7 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
   // Directives:
   WeakDefDirective = "\t.weak_definition ";
   WeakRefDirective = "\t.weak_reference ";
+  WeakDefAutoPrivateDirective = "\t.weak_def_can_be_hidden ";
   ZeroDirective = "\t.space\t";  // ".space N" emits N zeros.
   HasMachoZeroFillDirective = true;  // Uses .zerofill
   HasMachoTBSSDirective = true; // Uses .tbss
index 530c89b0759c554e7b0804b068173fc813f8fb6d..e272b60c44759b84a906334e7b6738ac47c95b15 100644 (file)
@@ -288,6 +288,7 @@ void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
   case MCSA_WeakDefinition: OS << "\t.weak_definition\t"; break;
       // .weak_reference
   case MCSA_WeakReference:  OS << MAI.getWeakRefDirective(); break;
+  case MCSA_WeakDefAutoPrivate: OS << "\t.weak_def_can_be_hidden\t"; break;
   }
 
   OS << *Symbol;
index 3febda0e86daf80a2f673106e6b2044bba0439af..44bc267c11c299bf6aac8fd86e72b8e21a6ce635 100644 (file)
@@ -273,6 +273,10 @@ void MCMachOStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
     // it has to be in a coalesced section, but this isn't enforced.
     SD.setFlags(SD.getFlags() | SF_WeakDefinition);
     break;
+
+  case MCSA_WeakDefAutoPrivate:
+    SD.setFlags(SD.getFlags() | SF_WeakDefinition | SF_WeakReference);
+    break;
   }
 }
 
index 94b545a2059267075aed3d365f4a8f0985cbe759..181b69ffc095fdc5559da772712b10d39296da1f 100644 (file)
@@ -755,6 +755,8 @@ bool AsmParser::ParseStatement() {
       return ParseDirectiveSymbolAttribute(MCSA_WeakDefinition);
     if (IDVal == ".weak_reference")
       return ParseDirectiveSymbolAttribute(MCSA_WeakReference);
+    if (IDVal == ".weak_def_can_be_hidden")
+      return ParseDirectiveSymbolAttribute(MCSA_WeakDefAutoPrivate);
 
     if (IDVal == ".comm")
       return ParseDirectiveComm(/*IsLocal=*/false);