svn commit: r367704 - in stable: 11/contrib/llvm-project/lld/ELF 12/contrib/llvm-project/lld/ELF

Dimitry Andric dim at FreeBSD.org
Sun Nov 15 11:28:03 UTC 2020


Author: dim
Date: Sun Nov 15 11:28:02 2020
New Revision: 367704
URL: https://svnweb.freebsd.org/changeset/base/367704

Log:
  MFC r367623:
  
  Merge commit 8df4e6094 from llvm git (by Fangrui Song):
  
    [ELF] Don't consider SHF_ALLOC ".debug*" sections debug sections
  
    Fixes PR48071
  
    * The Rust compiler produces SHF_ALLOC `.debug_gdb_scripts` (which
      normally does not have the flag)
    * `.debug_gdb_scripts` sections are removed from `inputSections` due
      to --strip-debug/--strip-all
    * When processing --gc-sections, pieces of a SHF_MERGE section can be
      marked live separately
  
    `=>` segfault when marking liveness of a `.debug_gdb_scripts` which
    is not split into pieces (because it is not in `inputSections`)
  
    This patch circumvents the problem by not treating SHF_ALLOC
    ".debug*" as debug sections (to prevent --strip-debug's stripping)
    (which is still useful on its own).
  
    Reviewed By: grimar
  
    Differential Revision: https://reviews.llvm.org/D91291
  
  This should fix lld segfaulting when linking the rust-based parts of the
  devel/py-maturin port.
  
  Reported by:	Nick Venenga <nijave at gmail.com>
  PR:		250783

Modified:
  stable/12/contrib/llvm-project/lld/ELF/InputSection.h
Directory Properties:
  stable/12/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/11/contrib/llvm-project/lld/ELF/InputSection.h
Directory Properties:
  stable/11/   (props changed)

Modified: stable/12/contrib/llvm-project/lld/ELF/InputSection.h
==============================================================================
--- stable/12/contrib/llvm-project/lld/ELF/InputSection.h	Sun Nov 15 07:57:45 2020	(r367703)
+++ stable/12/contrib/llvm-project/lld/ELF/InputSection.h	Sun Nov 15 11:28:02 2020	(r367704)
@@ -358,7 +358,8 @@ class InputSection : public InputSectionBase { (privat
 };
 
 inline bool isDebugSection(const InputSectionBase &sec) {
-  return sec.name.startswith(".debug") || sec.name.startswith(".zdebug");
+  return (sec.flags & llvm::ELF::SHF_ALLOC) == 0 &&
+         (sec.name.startswith(".debug") || sec.name.startswith(".zdebug"));
 }
 
 // The list of all input sections.


More information about the svn-src-all mailing list