mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Added the darwin .weak_def_can_be_hidden directive.
llvm-svn: 107886
This commit is contained in:
parent
3e4b85cd99
commit
9bf8ee521c
@ -217,6 +217,11 @@ namespace llvm {
|
|||||||
/// global as being a weak defined symbol.
|
/// global as being a weak defined symbol.
|
||||||
const char *WeakDefDirective; // Defaults to NULL.
|
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
|
/// LinkOnceDirective - This directive, if non-null is used to declare a
|
||||||
/// global as being a weak defined symbol. This is used on cygwin/mingw.
|
/// global as being a weak defined symbol. This is used on cygwin/mingw.
|
||||||
const char *LinkOnceDirective; // Defaults to NULL.
|
const char *LinkOnceDirective; // Defaults to NULL.
|
||||||
@ -387,6 +392,9 @@ namespace llvm {
|
|||||||
bool hasNoDeadStrip() const { return HasNoDeadStrip; }
|
bool hasNoDeadStrip() const { return HasNoDeadStrip; }
|
||||||
const char *getWeakRefDirective() const { return WeakRefDirective; }
|
const char *getWeakRefDirective() const { return WeakRefDirective; }
|
||||||
const char *getWeakDefDirective() const { return WeakDefDirective; }
|
const char *getWeakDefDirective() const { return WeakDefDirective; }
|
||||||
|
const char *getWeakDefAutoPrivateDirective() const {
|
||||||
|
return WeakDefAutoPrivateDirective;
|
||||||
|
}
|
||||||
const char *getLinkOnceDirective() const { return LinkOnceDirective; }
|
const char *getLinkOnceDirective() const { return LinkOnceDirective; }
|
||||||
|
|
||||||
MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
|
MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
|
||||||
|
@ -38,7 +38,8 @@ enum MCSymbolAttr {
|
|||||||
MCSA_Reference, ///< .reference (MachO)
|
MCSA_Reference, ///< .reference (MachO)
|
||||||
MCSA_Weak, ///< .weak
|
MCSA_Weak, ///< .weak
|
||||||
MCSA_WeakDefinition, ///< .weak_definition (MachO)
|
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 {
|
enum MCAssemblerFlag {
|
||||||
|
@ -59,6 +59,7 @@ MCAsmInfo::MCAsmInfo() {
|
|||||||
HasNoDeadStrip = false;
|
HasNoDeadStrip = false;
|
||||||
WeakRefDirective = 0;
|
WeakRefDirective = 0;
|
||||||
WeakDefDirective = 0;
|
WeakDefDirective = 0;
|
||||||
|
WeakDefAutoPrivateDirective = 0;
|
||||||
LinkOnceDirective = 0;
|
LinkOnceDirective = 0;
|
||||||
HiddenVisibilityAttr = MCSA_Hidden;
|
HiddenVisibilityAttr = MCSA_Hidden;
|
||||||
ProtectedVisibilityAttr = MCSA_Protected;
|
ProtectedVisibilityAttr = MCSA_Protected;
|
||||||
|
@ -33,6 +33,7 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
|
|||||||
// Directives:
|
// Directives:
|
||||||
WeakDefDirective = "\t.weak_definition ";
|
WeakDefDirective = "\t.weak_definition ";
|
||||||
WeakRefDirective = "\t.weak_reference ";
|
WeakRefDirective = "\t.weak_reference ";
|
||||||
|
WeakDefAutoPrivateDirective = "\t.weak_def_can_be_hidden ";
|
||||||
ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
|
ZeroDirective = "\t.space\t"; // ".space N" emits N zeros.
|
||||||
HasMachoZeroFillDirective = true; // Uses .zerofill
|
HasMachoZeroFillDirective = true; // Uses .zerofill
|
||||||
HasMachoTBSSDirective = true; // Uses .tbss
|
HasMachoTBSSDirective = true; // Uses .tbss
|
||||||
|
@ -288,6 +288,7 @@ void MCAsmStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
|||||||
case MCSA_WeakDefinition: OS << "\t.weak_definition\t"; break;
|
case MCSA_WeakDefinition: OS << "\t.weak_definition\t"; break;
|
||||||
// .weak_reference
|
// .weak_reference
|
||||||
case MCSA_WeakReference: OS << MAI.getWeakRefDirective(); break;
|
case MCSA_WeakReference: OS << MAI.getWeakRefDirective(); break;
|
||||||
|
case MCSA_WeakDefAutoPrivate: OS << "\t.weak_def_can_be_hidden\t"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << *Symbol;
|
OS << *Symbol;
|
||||||
|
@ -273,6 +273,10 @@ void MCMachOStreamer::EmitSymbolAttribute(MCSymbol *Symbol,
|
|||||||
// it has to be in a coalesced section, but this isn't enforced.
|
// it has to be in a coalesced section, but this isn't enforced.
|
||||||
SD.setFlags(SD.getFlags() | SF_WeakDefinition);
|
SD.setFlags(SD.getFlags() | SF_WeakDefinition);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MCSA_WeakDefAutoPrivate:
|
||||||
|
SD.setFlags(SD.getFlags() | SF_WeakDefinition | SF_WeakReference);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -755,6 +755,8 @@ bool AsmParser::ParseStatement() {
|
|||||||
return ParseDirectiveSymbolAttribute(MCSA_WeakDefinition);
|
return ParseDirectiveSymbolAttribute(MCSA_WeakDefinition);
|
||||||
if (IDVal == ".weak_reference")
|
if (IDVal == ".weak_reference")
|
||||||
return ParseDirectiveSymbolAttribute(MCSA_WeakReference);
|
return ParseDirectiveSymbolAttribute(MCSA_WeakReference);
|
||||||
|
if (IDVal == ".weak_def_can_be_hidden")
|
||||||
|
return ParseDirectiveSymbolAttribute(MCSA_WeakDefAutoPrivate);
|
||||||
|
|
||||||
if (IDVal == ".comm")
|
if (IDVal == ".comm")
|
||||||
return ParseDirectiveComm(/*IsLocal=*/false);
|
return ParseDirectiveComm(/*IsLocal=*/false);
|
||||||
|
Loading…
Reference in New Issue
Block a user