Don't lower the visibility because of shared symbols.

If a shared library has a protected symbol 'foo', that doesn't imply
that the symbol 'foo' in the output should be protected or not.

llvm-svn: 265794
This commit is contained in:
Rafael Espindola
2016-04-08 16:11:42 +00:00
parent 2d5126cdf5
commit a15fb15b05
3 changed files with 20 additions and 3 deletions

View File

@@ -218,9 +218,11 @@ int SymbolBody::compare(SymbolBody *Other) {
if (L > R)
return -Other->compare(this);
uint8_t V = getMinVisibility(getVisibility(), Other->getVisibility());
setVisibility(V);
Other->setVisibility(V);
if (!isShared() && !Other->isShared()) {
uint8_t V = getMinVisibility(getVisibility(), Other->getVisibility());
setVisibility(V);
Other->setVisibility(V);
}
if (IsUsedInRegularObj || Other->IsUsedInRegularObj)
IsUsedInRegularObj = Other->IsUsedInRegularObj = true;

View File

@@ -1,3 +1,7 @@
.global foo
.protected foo
foo:
.global bar
.protected bar
bar:

View File

@@ -9,6 +9,17 @@
_start:
.quad foo
.global bar
bar:
// CHECK: Name: bar
// CHECK-NEXT: Value:
// CHECK-NEXT: Size: 0
// CHECK-NEXT: Binding: Global
// CHECK-NEXT: Type: None
// CHECK-NEXT: Other: 0
// CHECK-NEXT: Section: .text
// CHECK: Name: foo
// CHECK-NEXT: Value: 0x0
// CHECK-NEXT: Size: 0