From 6323541a2a56c5632fc3075873fb720e6da1da5c Mon Sep 17 00:00:00 2001 From: Mingjie Xu Date: Tue, 1 Jul 2025 09:02:06 +0800 Subject: [PATCH] [LLD][ELF] Skip non-SHF_ALLOC sections when checking max VA and max VA difference in relaxOnce() (#145863) For non-SHF_ALLOC sections, sh_addr is set to 0. Skip sections without SHF_ALLOC flag, so `minVA` will not be set to 0 with non-SHF_ALLOC sections, and the size of non-SHF_ALLOC sections will not contribute to `maxVA`. --- lld/ELF/Arch/X86_64.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lld/ELF/Arch/X86_64.cpp b/lld/ELF/Arch/X86_64.cpp index 163505102d0e..488f4803b2cb 100644 --- a/lld/ELF/Arch/X86_64.cpp +++ b/lld/ELF/Arch/X86_64.cpp @@ -320,6 +320,8 @@ bool X86_64::deleteFallThruJmpInsn(InputSection &is, InputFile *file, bool X86_64::relaxOnce(int pass) const { uint64_t minVA = UINT64_MAX, maxVA = 0; for (OutputSection *osec : ctx.outputSections) { + if (!(osec->flags & SHF_ALLOC)) + continue; minVA = std::min(minVA, osec->addr); maxVA = std::max(maxVA, osec->addr + osec->size); }