[PATCH] D159179: [MC][ELF] Don't emit .note.GNU-stack sections on Solaris

Rainer Orth via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 30 01:33:58 PDT 2023


ro created this revision.
ro added reviewers: MaskRay, jhenderson.
Herald added subscribers: pengfei, fedor.sergeev, hiraditya, jyknight.
Herald added a project: All.
ro requested review of this revision.
Herald added a project: LLVM.

LLVM currently emits `.note.GNU-stack` sections on all ELF targets.

However, Solaris ld doesn't know/care about them.  Even worse, with the revised Solaris GNU ld patch (D85309 <https://reviews.llvm.org/D85309>), there are hundreds of warnings:

  /usr/gnu/bin/ld: warning: /usr/lib/amd64/crtn.o: missing .note.GNU-stack section implies executable stack
  /usr/gnu/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker

The Solaris crts are not going to change here, and even if they were, GNU ld would emit `PT_GNU_STACK` segments that Solaris `ld.so.1` ignores.

So the note sections are completely useless on Solaris and this patch disables their creation.

Instead, Solaris has its own mechanisms to control stack executability: `PT_SUNW_STACK`, `DT_SUNW_SX_NXSTACK` and the system-wide control via `sxadm` where `nxstack` defaults to on.

Tested on `amd64-pc-solaris2.11` and `sparcv9-sun-solaris2.11` with Solaris ld and GNU ld, and `x86_64-pc-linux-gnu`.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D159179

Files:
  llvm/lib/MC/MCAsmInfoELF.cpp


Index: llvm/lib/MC/MCAsmInfoELF.cpp
===================================================================
--- llvm/lib/MC/MCAsmInfoELF.cpp
+++ llvm/lib/MC/MCAsmInfoELF.cpp
@@ -21,7 +21,12 @@
 void MCAsmInfoELF::anchor() {}
 
 MCSection *MCAsmInfoELF::getNonexecutableStackSection(MCContext &Ctx) const {
-  return Ctx.getELFSection(".note.GNU-stack", ELF::SHT_PROGBITS, 0);
+  // Solaris doesn't know/doesn't care about .note.GNU-stack sections, so
+  // don't emit them.
+  if (Ctx.getTargetTriple().isOSSolaris())
+    return nullptr;
+  else
+    return Ctx.getELFSection(".note.GNU-stack", ELF::SHT_PROGBITS, 0);
 }
 
 MCAsmInfoELF::MCAsmInfoELF() {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D159179.554623.patch
Type: text/x-patch
Size: 652 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230830/0af530dd/attachment.bin>


More information about the llvm-commits mailing list