aboutsummaryrefslogtreecommitdiff
path: root/ELF/InputFiles.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2018-02-16 19:10:49 +0000
committerDimitry Andric <dim@FreeBSD.org>2018-02-16 19:10:49 +0000
commitc5bd7e5db0e0dbe86cffb7611e2037c8cc6fe668 (patch)
tree4ec2bdb272fa200c73283ef5bfd666d15dde799c /ELF/InputFiles.cpp
parent168413e17e6af13d756e080b505d1a668f48c0fb (diff)
Notes
Diffstat (limited to 'ELF/InputFiles.cpp')
-rw-r--r--ELF/InputFiles.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/ELF/InputFiles.cpp b/ELF/InputFiles.cpp
index f514870ca84a..ccf4b3d7673f 100644
--- a/ELF/InputFiles.cpp
+++ b/ELF/InputFiles.cpp
@@ -856,6 +856,14 @@ template <class ELFT> void SharedFile<ELFT>::parseRest() {
continue;
}
+ if (Config->EMachine == EM_MIPS) {
+ // FIXME: MIPS BFD linker puts _gp_disp symbol into DSO files
+ // and incorrectly assigns VER_NDX_LOCAL to this section global
+ // symbol. Here is a workaround for this bug.
+ if (Versym && VersymIndex == VER_NDX_LOCAL && Name == "_gp_disp")
+ continue;
+ }
+
const Elf_Verdef *Ver = nullptr;
if (VersymIndex != VER_NDX_GLOBAL) {
if (VersymIndex >= Verdefs.size() || VersymIndex == VER_NDX_LOCAL) {