[PATCH] D151144: [lld][ELF] Do not emit warning for NOLOAD output sections

Leonard Chan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 23 13:41:55 PDT 2023


This revision was automatically updated to reflect the committed changes.
leonardchan marked an inline comment as done.
Closed by commit rGb9249a69cc27: [lld][ELF] Do not emit warning for NOLOAD output sections (authored by leonardchan).

Changed prior to commit:
  https://reviews.llvm.org/D151144?vs=524818&id=524868#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151144/new/

https://reviews.llvm.org/D151144

Files:
  lld/ELF/OutputSections.cpp
  lld/test/ELF/linkerscript/noload.s


Index: lld/test/ELF/linkerscript/noload.s
===================================================================
--- lld/test/ELF/linkerscript/noload.s
+++ lld/test/ELF/linkerscript/noload.s
@@ -19,10 +19,10 @@
 
 ## The output SHT_PROBITS is contrary to the user expectation of SHT_NOBITS.
 ## Issue a warning. See https://github.com/ClangBuiltLinux/linux/issues/1597
-# RUN: ld.lld --script %t/lds %t.o %t/mismatch.o -o %t/out 2>&1 | FileCheck %s --check-prefix=WARN
+# RUN: ld.lld --script %t/lds %t.o %t/mismatch.o -o %t/out 2>&1 | FileCheck %s --check-prefix=WARN --allow-empty
 # RUN: llvm-readelf -S -l %t/out | FileCheck %s --check-prefix=CHECK2
 
-# WARN:   warning: section type mismatch for .data_noload_a
+# WARN-NOT:   warning:
 # CHECK2:      Name                 Type     Address          Off               Size
 # CHECK2:      .data_noload_a       NOBITS   0000000000000000 [[OFF:[0-9a-f]+]] 001001
 
@@ -45,5 +45,8 @@
   .data_noload_a (NOLOAD) : { *(.data_noload_a) }
   .data_noload_b (0x10000) (NOLOAD) : { *(.data_noload_b) }
   .no_input_sec_noload (NOLOAD) : { . += 1; }
-  .text (0x20000) : { *(.text) }
+  .text (0x20000) : {
+    *(.text);
+    _start = .;
+  }
 }
Index: lld/ELF/OutputSections.cpp
===================================================================
--- lld/ELF/OutputSections.cpp
+++ lld/ELF/OutputSections.cpp
@@ -116,16 +116,18 @@
     if (hasInputSections || typeIsSet) {
       if (typeIsSet || !canMergeToProgbits(type) ||
           !canMergeToProgbits(isec->type)) {
-        // Changing the type of a (NOLOAD) section is fishy, but some projects
-        // (e.g. https://github.com/ClangBuiltLinux/linux/issues/1597)
-        // traditionally rely on the behavior. Issue a warning to not break
-        // them. Other types get an error.
-        auto diagnose = type == SHT_NOBITS ? warn : errorOrWarn;
-        diagnose("section type mismatch for " + isec->name + "\n>>> " +
-                 toString(isec) + ": " +
-                 getELFSectionTypeName(config->emachine, isec->type) +
-                 "\n>>> output section " + name + ": " +
-                 getELFSectionTypeName(config->emachine, type));
+        // The (NOLOAD) changes the section type to SHT_NOBITS, the intention is
+        // that the contents at that address is provided by some other means.
+        // Some projects (e.g.
+        // https://github.com/ClangBuiltLinux/linux/issues/1597) rely on the
+        // behavior. Other types get an error.
+        if (type != SHT_NOBITS) {
+          errorOrWarn("section type mismatch for " + isec->name + "\n>>> " +
+                      toString(isec) + ": " +
+                      getELFSectionTypeName(config->emachine, isec->type) +
+                      "\n>>> output section " + name + ": " +
+                      getELFSectionTypeName(config->emachine, type));
+        }
       }
       if (!typeIsSet)
         type = SHT_PROGBITS;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D151144.524868.patch
Type: text/x-patch
Size: 2928 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230523/1bf10a16/attachment.bin>


More information about the llvm-commits mailing list