Be more strict on when we produce an undefined reference. In gas a file with

just

.type   foo,@object

will produce an undefined reference to foo. On the other hand, a file with
just

.weakref bar, foo

will not. It is somewhat hard to support both in MC since both statements
should create the symbols. It should be possible if we really need to by
adding to the flags, but hopefully that is not necessary.

With this patch we do not produce a undefined reference in any of those cases.
The assembly file needs an actual use for the undefined reference to be
present.

This is in preparation for a patch implementing .weakref.

llvm-svn: 117735
This commit is contained in:
Rafael Espindola 2010-10-29 23:09:31 +00:00
parent e9e32dcb48
commit 45834a0065
4 changed files with 8 additions and 2 deletions

View File

@ -868,8 +868,11 @@ static bool isInSymtab(const MCAssembler &Asm, const MCSymbolData &Data,
const MCSymbol &Symbol = Data.getSymbol();
if (Symbol.getName() == "_GLOBAL_OFFSET_TABLE_")
return true;
const MCSymbol &A = AliasedSymbol(Symbol);
if (&A != &Symbol && A.isUndefined())
if (!A.isVariable() && A.isUndefined() && !Data.isCommon())
return false;
if (!Asm.isSymbolLinkerVisible(Symbol) && !Symbol.isUndefined())

View File

@ -15,6 +15,7 @@ bar3 = foo3
foo4:
bar4 = foo4
.long foo2
// CHECK: # Symbol 0x00000001
// CHECK-NEXT: (('st_name', 0x00000005) # 'bar'
// CHECK-NEXT: ('st_bind', 0x00000000)

View File

@ -6,4 +6,5 @@
// CHECK-NEXT: (('st_name', 0x00000001) # 'foo'
// CHECK-NEXT: ('st_bind', 0x00000001)
.size foo, .Lbar-foo
.size foo, .Lbar-foo
.long foo

View File

@ -10,6 +10,7 @@
.type .Lsym5,@object
.type sym6,@object
.long sym6
.section .rodata.str1.1,"aMS",@progbits,1
.Lsym7: