summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/ELFObjectWriter.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-10-29 23:09:31 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-10-29 23:09:31 +0000
commit45834a0065374a5ed6deed5353b3ab432dafeaa4 (patch)
tree6e0aaccbd5af7ae419d0b0114237c806946e721b /llvm/lib/MC/ELFObjectWriter.cpp
parente9e32dcb4845a8ef95efc5ff7bfd3cca7526a29e (diff)
downloadbcm5719-llvm-45834a0065374a5ed6deed5353b3ab432dafeaa4.tar.gz
bcm5719-llvm-45834a0065374a5ed6deed5353b3ab432dafeaa4.zip
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
Diffstat (limited to 'llvm/lib/MC/ELFObjectWriter.cpp')
-rw-r--r--llvm/lib/MC/ELFObjectWriter.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp
index dbe0dd870f6..2fca31104a8 100644
--- a/llvm/lib/MC/ELFObjectWriter.cpp
+++ b/llvm/lib/MC/ELFObjectWriter.cpp
@@ -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())
OpenPOWER on IntegriCloud