diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-07-31 18:52:47 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-07-31 18:52:47 +0000 |
commit | aee5a8743e3aeb9a816fb05753239b9ca4821063 (patch) | |
tree | be2df69ad4fe72beb04cf5146ff37224d811a445 | |
parent | 317a51e886917fbe64c354445cc1de0cdd774624 (diff) | |
download | bcm5719-llvm-aee5a8743e3aeb9a816fb05753239b9ca4821063.tar.gz bcm5719-llvm-aee5a8743e3aeb9a816fb05753239b9ca4821063.zip |
Never export weak undefined from executable.
Before we were doing it with --export-dynamic. That seems incorrect.
The intention of --export-dynamic is to export symbols *defined* in
the executable.
llvm-svn: 309605
-rw-r--r-- | lld/ELF/Symbols.cpp | 5 | ||||
-rw-r--r-- | lld/test/ELF/weak-undef-export.s | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp index cf2d6d0d25d..d3f6cc619ce 100644 --- a/lld/ELF/Symbols.cpp +++ b/lld/ELF/Symbols.cpp @@ -357,8 +357,9 @@ uint8_t Symbol::computeBinding() const { bool Symbol::includeInDynsym() const { if (computeBinding() == STB_LOCAL) return false; - return ExportDynamic || body()->isShared() || - (body()->isUndefined() && Config->Shared); + if (body()->isUndefined()) + return Config->Shared; + return ExportDynamic || body()->isShared(); } // Print out a log message for --trace-symbol. diff --git a/lld/test/ELF/weak-undef-export.s b/lld/test/ELF/weak-undef-export.s index 14290d1e3e6..6780e31a7bd 100644 --- a/lld/test/ELF/weak-undef-export.s +++ b/lld/test/ELF/weak-undef-export.s @@ -4,6 +4,19 @@ # RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o # RUN: ld.lld --export-dynamic %t.o -o %t +# RUN: llvm-readobj -dyn-symbols %t | FileCheck %s + +# CHECK: DynamicSymbols [ +# CHECK-NEXT: Symbol { +# CHECK-NEXT: Name: @ (0) +# CHECK-NEXT: Value: 0x0 +# CHECK-NEXT: Size: 0 +# CHECK-NEXT: Binding: Local (0x0) +# CHECK-NEXT: Type: None (0x0) +# CHECK-NEXT: Other: 0 +# CHECK-NEXT: Section: Undefined (0x0) +# CHECK-NEXT: } +# CHECK-NEXT: ] .weak foo .quad foo |