diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-10-29 23:09:31 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-10-29 23:09:31 +0000 |
commit | d179886f0595eb3564a9edfdfff79def130d89cc (patch) | |
tree | 17afffb2eb0e14b45eb9436e6de44bfc48e1e6b5 /lib | |
parent | e836e5f17485bd884442d7188abeedf6e0b608ff (diff) |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/MC/ELFObjectWriter.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/MC/ELFObjectWriter.cpp b/lib/MC/ELFObjectWriter.cpp index dbe0dd870f..2fca31104a 100644 --- a/lib/MC/ELFObjectWriter.cpp +++ b/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()) |