Omit private_extern declarations of extern symbols; followup to

r124468.  Patch by Rafael Avila de Espindola!

llvm-svn: 126297
This commit is contained in:
Stuart Hastings 2011-02-23 02:27:05 +00:00
parent 204f1d26d4
commit bf83659d11
5 changed files with 19 additions and 4 deletions

View File

@ -445,7 +445,8 @@ namespace llvm {
/// EmitVisibility - This emits visibility information about symbol, if /// EmitVisibility - This emits visibility information about symbol, if
/// this is suported by the target. /// this is suported by the target.
void EmitVisibility(MCSymbol *Sym, unsigned Visibility) const; void EmitVisibility(MCSymbol *Sym, unsigned Visibility,
bool IsDefinition = true) const;
void EmitLinkage(unsigned Linkage, MCSymbol *GVSym) const; void EmitLinkage(unsigned Linkage, MCSymbol *GVSym) const;

View File

@ -246,6 +246,11 @@ namespace llvm {
/// declare a symbol as having hidden visibility. /// declare a symbol as having hidden visibility.
MCSymbolAttr HiddenVisibilityAttr; // Defaults to MCSA_Hidden. MCSymbolAttr HiddenVisibilityAttr; // Defaults to MCSA_Hidden.
/// HiddenDeclarationVisibilityAttr - This attribute, if not MCSA_Invalid,
/// is used to declare an undefined symbol as having hidden visibility.
MCSymbolAttr HiddenDeclarationVisibilityAttr; // Defaults to MCSA_Hidden.
/// ProtectedVisibilityAttr - This attribute, if not MCSA_Invalid, is used /// ProtectedVisibilityAttr - This attribute, if not MCSA_Invalid, is used
/// to declare a symbol as having protected visibility. /// to declare a symbol as having protected visibility.
MCSymbolAttr ProtectedVisibilityAttr; // Defaults to MCSA_Protected MCSymbolAttr ProtectedVisibilityAttr; // Defaults to MCSA_Protected
@ -425,6 +430,9 @@ namespace llvm {
const char *getLinkOnceDirective() const { return LinkOnceDirective; } const char *getLinkOnceDirective() const { return LinkOnceDirective; }
MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;} MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
MCSymbolAttr getHiddenDeclarationVisibilityAttr() const {
return HiddenDeclarationVisibilityAttr;
}
MCSymbolAttr getProtectedVisibilityAttr() const { MCSymbolAttr getProtectedVisibilityAttr() const {
return ProtectedVisibilityAttr; return ProtectedVisibilityAttr;
} }

View File

@ -764,7 +764,7 @@ bool AsmPrinter::doFinalization(Module &M) {
continue; continue;
MCSymbol *Name = Mang->getSymbol(&F); MCSymbol *Name = Mang->getSymbol(&F);
EmitVisibility(Name, V); EmitVisibility(Name, V, false);
} }
// Finalize debug and EH information. // Finalize debug and EH information.
@ -1820,13 +1820,17 @@ void AsmPrinter::EmitBasicBlockStart(const MachineBasicBlock *MBB) const {
} }
} }
void AsmPrinter::EmitVisibility(MCSymbol *Sym, unsigned Visibility) const { void AsmPrinter::EmitVisibility(MCSymbol *Sym, unsigned Visibility,
bool IsDefinition) const {
MCSymbolAttr Attr = MCSA_Invalid; MCSymbolAttr Attr = MCSA_Invalid;
switch (Visibility) { switch (Visibility) {
default: break; default: break;
case GlobalValue::HiddenVisibility: case GlobalValue::HiddenVisibility:
Attr = MAI->getHiddenVisibilityAttr(); if (IsDefinition)
Attr = MAI->getHiddenVisibilityAttr();
else
Attr = MAI->getHiddenDeclarationVisibilityAttr();
break; break;
case GlobalValue::ProtectedVisibility: case GlobalValue::ProtectedVisibility:
Attr = MAI->getProtectedVisibilityAttr(); Attr = MAI->getProtectedVisibilityAttr();

View File

@ -65,6 +65,7 @@ MCAsmInfo::MCAsmInfo() {
WeakDefDirective = 0; WeakDefDirective = 0;
LinkOnceDirective = 0; LinkOnceDirective = 0;
HiddenVisibilityAttr = MCSA_Hidden; HiddenVisibilityAttr = MCSA_Hidden;
HiddenDeclarationVisibilityAttr = MCSA_Hidden;
ProtectedVisibilityAttr = MCSA_Protected; ProtectedVisibilityAttr = MCSA_Protected;
HasLEB128 = false; HasLEB128 = false;
SupportsDebugInformation = false; SupportsDebugInformation = false;

View File

@ -45,6 +45,7 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() {
HasAggressiveSymbolFolding = false; HasAggressiveSymbolFolding = false;
HiddenVisibilityAttr = MCSA_PrivateExtern; HiddenVisibilityAttr = MCSA_PrivateExtern;
HiddenDeclarationVisibilityAttr = MCSA_Invalid;
// Doesn't support protected visibility. // Doesn't support protected visibility.
ProtectedVisibilityAttr = MCSA_Global; ProtectedVisibilityAttr = MCSA_Global;