diff options
| author | Simon Atanasyan <simon@atanasyan.com> | 2014-11-06 07:07:29 +0000 |
|---|---|---|
| committer | Simon Atanasyan <simon@atanasyan.com> | 2014-11-06 07:07:29 +0000 |
| commit | c88db09cc5a93b527ab1c4320dd77666ab0c3aa7 (patch) | |
| tree | 367c62d4041707a3f851eafc3e47ac78a8fd0629 /lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp | |
| parent | 58e41344f95725a5b3b12c3c9f5987abdc367494 (diff) | |
| download | bcm5719-llvm-c88db09cc5a93b527ab1c4320dd77666ab0c3aa7.tar.gz bcm5719-llvm-c88db09cc5a93b527ab1c4320dd77666ab0c3aa7.zip | |
[Mips] Take into account that PIC code is inherently CPIC
Follow-up to r221439.
llvm-svn: 221442
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp')
| -rw-r--r-- | lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp b/lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp index 4db009dd84c..47b6a9839f5 100644 --- a/lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp +++ b/lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp @@ -48,6 +48,11 @@ std::error_code MipsELFFlagsMerger::merge(uint8_t newClass, uint32_t newFlags) { if (newFlags & llvm::ELF::EF_MIPS_ARCH_ASE_M16) return make_dynamic_error_code(Twine("Unsupported extension: MIPS16")); + // PIC code is inherently CPIC and may not set CPIC flag explicitly. + // Ensure that this flag will exist in the linked file. + if (newFlags & llvm::ELF::EF_MIPS_PIC) + newFlags |= llvm::ELF::EF_MIPS_CPIC; + std::lock_guard<std::mutex> lock(_mutex); // If the old set of flags is empty, use the new one as a result. @@ -64,10 +69,10 @@ std::error_code MipsELFFlagsMerger::merge(uint8_t newClass, uint32_t newFlags) { if ((newPic != 0) != (oldPic != 0)) llvm::errs() << "lld warning: linking abicalls and non-abicalls files\n"; - if (newPic != 0) - _flags |= llvm::ELF::EF_MIPS_CPIC; if (!(newPic & llvm::ELF::EF_MIPS_PIC)) _flags &= ~llvm::ELF::EF_MIPS_PIC; + if (newPic) + _flags |= llvm::ELF::EF_MIPS_CPIC; // Check mixing -mnan=2008 / -mnan=legacy modules. if ((newFlags & llvm::ELF::EF_MIPS_NAN2008) != |

