[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