summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2014-11-06 07:07:29 +0000
committerSimon Atanasyan <simon@atanasyan.com>2014-11-06 07:07:29 +0000
commitc88db09cc5a93b527ab1c4320dd77666ab0c3aa7 (patch)
tree367c62d4041707a3f851eafc3e47ac78a8fd0629 /lld/lib/ReaderWriter/ELF/Mips/MipsELFFlagsMerger.cpp
parent58e41344f95725a5b3b12c3c9f5987abdc367494 (diff)
downloadbcm5719-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.cpp9
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) !=
OpenPOWER on IntegriCloud