diff options
Diffstat (limited to 'lld/ELF/InputSection.cpp')
| -rw-r--r-- | lld/ELF/InputSection.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 0ce0f08d0387..f8786265029e 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -430,8 +430,9 @@ InputSectionBase *InputSection::getRelocatedSection() const { template <class ELFT, class RelTy> void InputSection::copyRelocations(Ctx &ctx, uint8_t *buf) { - if (ctx.arg.relax && !ctx.arg.relocatable && - (ctx.arg.emachine == EM_RISCV || ctx.arg.emachine == EM_LOONGARCH)) { + bool linkerRelax = + ctx.arg.relax && is_contained({EM_RISCV, EM_LOONGARCH}, ctx.arg.emachine); + if (!ctx.arg.relocatable && (linkerRelax || ctx.arg.branchToBranch)) { // On LoongArch and RISC-V, relaxation might change relocations: copy // from internal ones that are updated by relaxation. InputSectionBase *sec = getRelocatedSection(); |
