diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-10-07 04:22:55 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-10-07 04:22:55 +0000 |
| commit | cea0b3b45d503a81f075f94bc9751be0fea131ba (patch) | |
| tree | 2c007baf5f0a1c9dc8f9ffdcb5da72bd72e18c0a | |
| parent | 55bbe664bd13fdfe1ba5d9d1600e1b3075b3847c (diff) | |
| download | bcm5719-llvm-cea0b3b45d503a81f075f94bc9751be0fea131ba.tar.gz bcm5719-llvm-cea0b3b45d503a81f075f94bc9751be0fea131ba.zip | |
Don't create dynamic relocations for weak undefined symbols.
llvm-svn: 249520
| -rw-r--r-- | lld/ELF/OutputSections.cpp | 4 | ||||
| -rw-r--r-- | lld/test/elf2/dynamic-reloc.s | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 6caf99069b4..9b276b2f326 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -413,7 +413,9 @@ lld::elf2::getLocalSymVA(const typename ELFFile<ELFT>::Elf_Sym *Sym, bool lld::elf2::canBePreempted(const SymbolBody *Body) { if (!Body) return false; - if (Body->isShared() || Body->isUndefined()) + if (Body->isShared()) + return true; + if (Body->isUndefined() && !Body->isWeak()) return true; if (!Config->Shared) return false; diff --git a/lld/test/elf2/dynamic-reloc.s b/lld/test/elf2/dynamic-reloc.s index 75cfde9ec4a..3fe8574fb10 100644 --- a/lld/test/elf2/dynamic-reloc.s +++ b/lld/test/elf2/dynamic-reloc.s @@ -59,4 +59,6 @@ .global _start _start: .quad bar + 0x42 +.weak foo +.quad foo call main |

