diff options
author | Fangrui Song <maskray@google.com> | 2019-07-11 11:16:51 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-07-11 11:16:51 +0000 |
commit | e1ee3837acfea876b279f7f00474fdabd5d76cb5 (patch) | |
tree | bfc747c241fdfb44f94868195f55ffa9b0de3160 /lldb/packages/Python/lldbsuite/test/functionalities/recursion/main.cpp | |
parent | be8275753fe23fb56c4cb5127695dad540b9053c (diff) | |
download | bcm5719-llvm-e1ee3837acfea876b279f7f00474fdabd5d76cb5.tar.gz bcm5719-llvm-e1ee3837acfea876b279f7f00474fdabd5d76cb5.zip |
[ELF] Handle non-glob patterns before glob patterns in version scripts & fix a corner case of --dynamic-list
This fixes PR38549, which is silently accepted by ld.bfd.
This seems correct because it makes sense to let non-glob patterns take
precedence over glob patterns.
lld issues an error because
`assignWildcardVersion(ver, VER_NDX_LOCAL);` is processed before `assignExactVersion(ver, v.id, v.name);`.
Move all assignWildcardVersion() calls after assignExactVersion() calls
to fix this.
Also, move handleDynamicList() to the bottom. computeBinding() called by
includeInDynsym() has this cryptic rule:
if (versionId == VER_NDX_LOCAL && isDefined() && !isPreemptible)
return STB_LOCAL;
Before the change:
* foo's version is set to VER_NDX_LOCAL due to `local: *`
* handleDynamicList() is called
- foo.computeBinding() is STB_LOCAL
- foo.includeInDynsym() is false
- foo.isPreemptible is not set (wrong)
* foo's version is set to V1
After the change:
* foo's version is set to VER_NDX_LOCAL due to `local: *`
* foo's version is set to V1
* handleDynamicList() is called
- foo.computeBinding() is STB_GLOBAL
- foo.includeInDynsym() is true
- foo.isPreemptible is set (correct)
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D64550
llvm-svn: 365760
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/functionalities/recursion/main.cpp')
0 files changed, 0 insertions, 0 deletions