git: 2f4812936a2c - stable/12 - Fix lld warning "SHF_MERGE section size must be a multiple of sh_entsize"

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Mon, 08 Nov 2021 17:30:41 UTC
The branch stable/12 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=2f4812936a2ccaadd260f6bbaacd677e6079d9d0

commit 2f4812936a2ccaadd260f6bbaacd677e6079d9d0
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2021-11-08 10:19:59 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2021-11-08 17:29:35 +0000

    Fix lld warning "SHF_MERGE section size must be a multiple of sh_entsize"
    
    Merge commit 56decd982dc0 from llvm git (by Fangrui Song):
    
      [ELF] Allow invalid sh_size%sh_entsize!=0 for non-SHF_MERGE sections
    
      Fixes https://bugs.llvm.org/show_bug.cgi?id=45370
      Fixes https://github.com/Clozure/ccl/issues/273
    
      .stab holds a table of 12-byte entries. GNU as before 2.35 incorrectly
      sets sh_entsize(.stab) to 20 on 64-bit architectures:
      https://sourceware.org/bugzilla/show_bug.cgi?id=25768
    
      We should not emit the confusing error:
      "SHF_MERGE section size (...) must be a multiple of sh_entsize (20)
    
      Reviewed By: grimar, psmith
    
      Differential Revision: https://reviews.llvm.org/D77368
    
    Direct commit to stable/12, since newer branches have this fix already.
    
    PR:             245179
    Reported by:    andrew@tao11.riddles.org.uk
---
 contrib/llvm-project/lld/ELF/InputFiles.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/contrib/llvm-project/lld/ELF/InputFiles.cpp b/contrib/llvm-project/lld/ELF/InputFiles.cpp
index 43978cd66c61..21d528be6927 100644
--- a/contrib/llvm-project/lld/ELF/InputFiles.cpp
+++ b/contrib/llvm-project/lld/ELF/InputFiles.cpp
@@ -417,6 +417,9 @@ StringRef ObjFile<ELFT>::getShtGroupSignature(ArrayRef<Elf_Shdr> sections,
 
 template <class ELFT>
 bool ObjFile<ELFT>::shouldMerge(const Elf_Shdr &sec, StringRef name) {
+  if (!(sec.sh_flags & SHF_MERGE))
+    return false;
+
   // On a regular link we don't merge sections if -O0 (default is -O1). This
   // sometimes makes the linker significantly faster, although the output will
   // be bigger.
@@ -452,10 +455,7 @@ bool ObjFile<ELFT>::shouldMerge(const Elf_Shdr &sec, StringRef name) {
           Twine(sec.sh_size) + ") must be a multiple of sh_entsize (" +
           Twine(entSize) + ")");
 
-  uint64_t flags = sec.sh_flags;
-  if (!(flags & SHF_MERGE))
-    return false;
-  if (flags & SHF_WRITE)
+  if (sec.sh_flags & SHF_WRITE)
     fatal(toString(this) + ":(" + name +
           "): writable SHF_MERGE section is not supported");