mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 21:50:40 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117735 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e836e5f174
commit
d179886f05
@ -868,8 +868,11 @@ static bool isInSymtab(const MCAssembler &Asm, const MCSymbolData &Data,
|
|||||||
|
|
||||||
const MCSymbol &Symbol = Data.getSymbol();
|
const MCSymbol &Symbol = Data.getSymbol();
|
||||||
|
|
||||||
|
if (Symbol.getName() == "_GLOBAL_OFFSET_TABLE_")
|
||||||
|
return true;
|
||||||
|
|
||||||
const MCSymbol &A = AliasedSymbol(Symbol);
|
const MCSymbol &A = AliasedSymbol(Symbol);
|
||||||
if (&A != &Symbol && A.isUndefined())
|
if (!A.isVariable() && A.isUndefined() && !Data.isCommon())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Asm.isSymbolLinkerVisible(Symbol) && !Symbol.isUndefined())
|
if (!Asm.isSymbolLinkerVisible(Symbol) && !Symbol.isUndefined())
|
||||||
|
@ -15,6 +15,7 @@ bar3 = foo3
|
|||||||
foo4:
|
foo4:
|
||||||
bar4 = foo4
|
bar4 = foo4
|
||||||
|
|
||||||
|
.long foo2
|
||||||
// CHECK: # Symbol 0x00000001
|
// CHECK: # Symbol 0x00000001
|
||||||
// CHECK-NEXT: (('st_name', 0x00000005) # 'bar'
|
// CHECK-NEXT: (('st_name', 0x00000005) # 'bar'
|
||||||
// CHECK-NEXT: ('st_bind', 0x00000000)
|
// CHECK-NEXT: ('st_bind', 0x00000000)
|
||||||
|
@ -6,4 +6,5 @@
|
|||||||
// CHECK-NEXT: (('st_name', 0x00000001) # 'foo'
|
// CHECK-NEXT: (('st_name', 0x00000001) # 'foo'
|
||||||
// CHECK-NEXT: ('st_bind', 0x00000001)
|
// CHECK-NEXT: ('st_bind', 0x00000001)
|
||||||
|
|
||||||
.size foo, .Lbar-foo
|
.size foo, .Lbar-foo
|
||||||
|
.long foo
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
.type .Lsym5,@object
|
.type .Lsym5,@object
|
||||||
.type sym6,@object
|
.type sym6,@object
|
||||||
|
.long sym6
|
||||||
|
|
||||||
.section .rodata.str1.1,"aMS",@progbits,1
|
.section .rodata.str1.1,"aMS",@progbits,1
|
||||||
.Lsym7:
|
.Lsym7:
|
||||||
|
Loading…
Reference in New Issue
Block a user