[llvm] [elf] Add support for {SHT, PT}_GNU_SFRAME constants (PR #148803)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 15 01:49:36 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-binary-utilities

Author: Pavel Labath (labath)

<details>
<summary>Changes</summary>

Reference: https://sourceware.org/git/?p=gnu-gabi.git;a=blob;f=program-loading-and-dynamic-linking.txt;h=3357d865720285df2d29c4e8f92de49ddf1beb40;hb=refs/heads/master

---

Patch is 20.76 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/148803.diff


8 Files Affected:

- (modified) llvm/include/llvm/BinaryFormat/ELF.h (+2) 
- (modified) llvm/lib/Object/ELF.cpp (+1) 
- (modified) llvm/lib/ObjectYAML/ELFYAML.cpp (+2) 
- (modified) llvm/test/tools/llvm-objdump/ELF/program-headers.test (+64-55) 
- (modified) llvm/test/tools/llvm-readobj/ELF/section-types.test (+5) 
- (modified) llvm/test/tools/yaml2obj/ELF/program-header.yaml (+4) 
- (modified) llvm/tools/llvm-objdump/ELFDump.cpp (+3) 
- (modified) llvm/tools/llvm-readobj/ELFDumper.cpp (+1) 


``````````diff
diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h
index ebb257ab33821..6a90aca6a262f 100644
--- a/llvm/include/llvm/BinaryFormat/ELF.h
+++ b/llvm/include/llvm/BinaryFormat/ELF.h
@@ -1162,6 +1162,7 @@ enum : unsigned {
   // Android's experimental support for SHT_RELR sections.
   // https://android.googlesource.com/platform/bionic/+/b7feec74547f84559a1467aca02708ff61346d2a/libc/include/elf.h#512
   SHT_ANDROID_RELR = 0x6fffff00,   // Relocation entries; only offsets.
+  SHT_GNU_SFRAME = 0x6ffffff4,     // GNU SFrame stack trace format.
   SHT_GNU_ATTRIBUTES = 0x6ffffff5, // Object attributes.
   SHT_GNU_HASH = 0x6ffffff6,       // GNU-style hash table.
   SHT_GNU_verdef = 0x6ffffffd,     // GNU version definitions.
@@ -1546,6 +1547,7 @@ enum {
   PT_GNU_STACK = 0x6474e551,    // Indicates stack executability.
   PT_GNU_RELRO = 0x6474e552,    // Read-only after relocation.
   PT_GNU_PROPERTY = 0x6474e553, // .note.gnu.property notes sections.
+  PT_GNU_SFRAME = 0x6474e554,   // GNU SFrame stack trace format.
 
   PT_OPENBSD_MUTABLE = 0x65a3dbe5,   // Like bss, but not immutable.
   PT_OPENBSD_RANDOMIZE = 0x65a3dbe6, // Fill with random data.
diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp
index ff99dc25abe07..af073f6a1a917 100644
--- a/llvm/lib/Object/ELF.cpp
+++ b/llvm/lib/Object/ELF.cpp
@@ -321,6 +321,7 @@ StringRef llvm::object::getELFSectionTypeName(uint32_t Machine, unsigned Type) {
     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_OFFLOADING);
     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_LTO);
     STRINGIFY_ENUM_CASE(ELF, SHT_LLVM_JT_SIZES)
+    STRINGIFY_ENUM_CASE(ELF, SHT_GNU_SFRAME);
     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_ATTRIBUTES);
     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_HASH);
     STRINGIFY_ENUM_CASE(ELF, SHT_GNU_verdef);
diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp
index 970811f40f918..7fcabb684e87f 100644
--- a/llvm/lib/ObjectYAML/ELFYAML.cpp
+++ b/llvm/lib/ObjectYAML/ELFYAML.cpp
@@ -70,6 +70,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_PT>::enumeration(
   ECase(PT_GNU_STACK);
   ECase(PT_GNU_RELRO);
   ECase(PT_GNU_PROPERTY);
+  ECase(PT_GNU_SFRAME);
 #undef ECase
   IO.enumFallback<Hex32>(Value);
 }
@@ -723,6 +724,7 @@ void ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
   ECase(SHT_LLVM_BB_ADDR_MAP);
   ECase(SHT_LLVM_OFFLOADING);
   ECase(SHT_LLVM_LTO);
+  ECase(SHT_GNU_SFRAME);
   ECase(SHT_GNU_ATTRIBUTES);
   ECase(SHT_GNU_HASH);
   ECase(SHT_GNU_verdef);
diff --git a/llvm/test/tools/llvm-objdump/ELF/program-headers.test b/llvm/test/tools/llvm-objdump/ELF/program-headers.test
index abd4894c45124..a6be34696a87f 100644
--- a/llvm/test/tools/llvm-objdump/ELF/program-headers.test
+++ b/llvm/test/tools/llvm-objdump/ELF/program-headers.test
@@ -4,51 +4,53 @@
 # RUN: llvm-objdump --private-headers %t32.elf | FileCheck %s --check-prefixes=ELF32 
 
 # ELF32:      Program Header:
-# ELF32-NEXT:    PHDR off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:    PHDR off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags -w-
-# ELF32-NEXT:    PHDR off    0x00000317 vaddr 0x00002000 paddr 0x00002000 align 2**0
+# ELF32-NEXT:    PHDR off    0x00000337 vaddr 0x00002000 paddr 0x00002000 align 2**0
 # ELF32-NEXT:         filesz 0x00000007 memsz 0x00000007 flags --x
-# ELF32-NEXT: UNKNOWN off    0x00000317 vaddr 0x00002000 paddr 0x00002000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000337 vaddr 0x00002000 paddr 0x00002000 align 2**0
 # ELF32-NEXT:         filesz 0x00000007 memsz 0x00000007 flags --x
-# ELF32-NEXT: DYNAMIC off    0x00000324 vaddr 0x00006000 paddr 0x00006000 align 2**0
+# ELF32-NEXT: DYNAMIC off    0x00000344 vaddr 0x00006000 paddr 0x00006000 align 2**0
 # ELF32-NEXT:         filesz 0x00000010 memsz 0x00000010 flags rwx
-# ELF32-NEXT:  INTERP off    0x0000031e vaddr 0x00003000 paddr 0x00003000 align 2**0
+# ELF32-NEXT:  INTERP off    0x0000033e vaddr 0x00003000 paddr 0x00003000 align 2**0
 # ELF32-NEXT:         filesz 0x00000004 memsz 0x00000004 flags rw-
-# ELF32-NEXT:    NOTE off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:    NOTE off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000001 memsz 0x00000001 flags ---
-# ELF32-NEXT:    TLS off    0x00000322 vaddr 0x00004000 paddr 0x00004000 align 2**0
+# ELF32-NEXT:    TLS off     0x00000342 vaddr 0x00004000 paddr 0x00004000 align 2**0
 # ELF32-NEXT:         filesz 0x00000001 memsz 0x00000001 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT:EH_FRAME off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:EH_FRAME off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT:   STACK off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:   STACK off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT:   RELRO off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:   RELRO off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT:PROPERTY off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:PROPERTY off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: OPENBSD_RANDOMIZE off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:  SFRAME off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: OPENBSD_WXNEEDED off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: OPENBSD_RANDOMIZE off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: OPENBSD_BOOTDATA off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: OPENBSD_WXNEEDED off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: OPENBSD_BOOTDATA off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
-# ELF32-NEXT: UNKNOWN off    0x00000314 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
+# ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
+# ELF32-NEXT: UNKNOWN off    0x00000334 vaddr 0x00001000 paddr 0x00001000 align 2**0
 # ELF32-NEXT:         filesz 0x00000003 memsz 0x00000003 flags ---
 # ELF32-EMPTY:
 
@@ -56,51 +58,53 @@
 # RUN: llvm-objdump --private-headers %t64.elf | FileCheck %s --check-prefixes=ELF64
 
 # ELF64:      Program Header:
-# ELF64-NEXT:    PHDR off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:    PHDR off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags -w-
-# ELF64-NEXT:    PHDR off    0x000000000000054b vaddr 0x0000000000002000 paddr 0x0000000000002000 align 2**0
+# ELF64-NEXT:    PHDR off    0x0000000000000583 vaddr 0x0000000000002000 paddr 0x0000000000002000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000007 memsz 0x0000000000000007 flags --x
-# ELF64-NEXT: UNKNOWN off    0x000000000000054b vaddr 0x0000000000002000 paddr 0x0000000000002000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000583 vaddr 0x0000000000002000 paddr 0x0000000000002000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000007 memsz 0x0000000000000007 flags --x
-# ELF64-NEXT: DYNAMIC off    0x0000000000000558 vaddr 0x0000000000006000 paddr 0x0000000000006000 align 2**0
+# ELF64-NEXT: DYNAMIC off    0x0000000000000590 vaddr 0x0000000000006000 paddr 0x0000000000006000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000020 memsz 0x0000000000000020 flags rwx
-# ELF64-NEXT:  INTERP off    0x0000000000000552 vaddr 0x0000000000003000 paddr 0x0000000000003000 align 2**0
+# ELF64-NEXT:  INTERP off    0x000000000000058a vaddr 0x0000000000003000 paddr 0x0000000000003000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000004 memsz 0x0000000000000004 flags rw-
-# ELF64-NEXT:    NOTE off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:    NOTE off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000001 memsz 0x0000000000000001 flags ---
-# ELF64-NEXT:    TLS off    0x0000000000000556 vaddr 0x0000000000004000 paddr 0x0000000000004000 align 2**0
+# ELF64-NEXT:    TLS off     0x000000000000058e vaddr 0x0000000000004000 paddr 0x0000000000004000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000001 memsz 0x0000000000000001 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
+# ELF64-NEXT:EH_FRAME off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT:EH_FRAME off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:   STACK off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT:   STACK off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:   RELRO off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT:   RELRO off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:   PROPERTY off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT:   PROPERTY off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT:  SFRAME off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: OPENBSD_RANDOMIZE off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: OPENBSD_RANDOMIZE off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: OPENBSD_WXNEEDED off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: OPENBSD_WXNEEDED off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: OPENBSD_BOOTDATA off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: OPENBSD_BOOTDATA off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
-# ELF64-NEXT: UNKNOWN off    0x0000000000000548 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
+# ELF64-NEXT: UNKNOWN off    0x0000000000000580 vaddr 0x0000000000001000 paddr 0x0000000000001000 align 2**0
 # ELF64-NEXT:         filesz 0x0000000000000003 memsz 0x0000000000000003 flags ---
 # ELF64-EMPTY:
 
@@ -229,47 +233,52 @@ ProgramHeaders:
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 15: the PT_OPENBSD_RANDOMIZE segment.
+## Case 15: the PT_GNU_SFRAME segment.
+  - Type:     0x6474e554 ## PT_GNU_SFRAME
+    VAddr:    0x1000
+    FirstSec: .foo.begin
+    LastSec: .foo.end
+## Case 16: the PT_OPENBSD_RANDOMIZE segment.
   - Type:     0x65a3dbe6 ## PT_OPENBSD_RANDOMIZE
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 16: the PT_OPENBSD_WXNEEDED segment.
+## Case 17: the PT_OPENBSD_WXNEEDED segment.
   - Type:     0x65a3dbe7 ## PT_OPENBSD_WXNEEDED
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 17: the PT_OPENBSD_BOOTDATA segment.
+## Case 18: the PT_OPENBSD_BOOTDATA segment.
   - Type:     0x65a41be6 ## PT_OPENBSD_BOOTDATA
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 18: the PT_HIOS segment.
+## Case 19: the PT_HIOS segment.
   - Type:     0x6fffffff ## PT_HIOS
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 19: the PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO segment.
+## Case 20: the PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO segment.
   - Type:     0x70000000 ## PT_LOPROC/PT_ARM_ARCHEXT/PT_MIPS_REGINFO
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 20: the PT_ARM_EXIDX/PT_MIPS_RTPROC segment.
+## Case 21: the PT_ARM_EXIDX/PT_MIPS_RTPROC segment.
   - Type:     0x70000001 ## PT_ARM_EXIDX, PT_MIPS_RTPROC
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 20: the PT_MIPS_OPTIONS segment.
+## Case 22: the PT_MIPS_OPTIONS segment.
   - Type:     0x70000002 ## PT_MIPS_OPTIONS
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 21: the PT_MIPS_ABIFLAGS segment.
+## Case 23: the PT_MIPS_ABIFLAGS segment.
   - Type:     0x70000003 ## PT_MIPS_ABIFLAGS
     VAddr:    0x1000
     FirstSec: .foo.begin
     LastSec:  .foo.end
-## Case 22: the PT_HIPROC segment.
+## Case 24: the PT_HIPROC segment.
   - Type:     0x7fffffff ## PT_HIPROC
     VAddr:    0x1000
     FirstSec: .foo.begin
diff --git a/llvm/test/tools/llvm-readobj/ELF/section-types.test b/llvm/test/tools/llvm-readobj/ELF/section-types.test
index a428666c6ada9..e3a66832fa0d2 100644
--- a/llvm/test/tools/llvm-readobj/ELF/section-types.test
+++ b/llvm/test/tools/llvm-readobj/ELF/section-types.test
@@ -63,6 +63,8 @@
 # LLVM: Type: SHT_LLVM_PART_PHDR
 # LLVM: Name: .llvm.lto
 # LLVM: Type: SHT_LLVM_LTO
+# LLVM: Name: gnu_sframe
+# LLVM: Type: SHT_GNU_SFRAME
 # LLVM: Name: gnu_attributes
 # LLVM: Type: SHT_GNU_ATTRIBUTES
 # LLVM: Name: gnu_hash
@@ -125,6 +127,7 @@
 # GNU-NEXT: part1                   LLVM_PART_EHDR
 # GNU-NEXT: .phdrs                  LLVM_PART_PHDR
 # GNU-NEXT: .llvm.lto               LLVM_LTO
+# GNU-NEXT: gnu_sframe              SFRAME
 # GNU-NEXT: gnu_attributes          ATTRIBUTES
 # GNU-NEXT: gnu_hash                GNU_HASH
 # GNU-NEXT: gnu_verdef              VERDEF
@@ -215,6 +218,8 @@ Sections:
     Type: SHT_LLVM_PART_PHDR
   - Name: .llvm.lto
     Type: SHT_LLVM_LTO
+  - Name: gnu_sframe
+    Type: SHT_GNU_SFRAME
   - Name: gnu_attributes
     Type: SHT_GNU_ATTRIBUTES
   - Name: gnu_hash
diff --git a/llvm/test/tools/yaml2obj/ELF/program-header.yaml b/llvm/test/tools/yaml2obj/ELF/program-header.yaml
index 4899102346af4..b2b7ead6e794b 100644
--- a/llvm/test/tools/yaml2obj/ELF/program-header.yaml
+++ b/llvm/test/tools/yaml2obj/ELF/program-header.yaml
@@ -39,6 +39,7 @@ ProgramHeaders:
   - Type: PT_GNU_STACK
   - Type: PT_GNU_RELRO
   - Type: PT_GNU_PROPERTY
+  - Type: PT_GNU_SFRAME
 
 #CHECK:     ProgramHeaders [
 #CHECK-NEXT:   ProgramHeader {
@@ -78,6 +79,9 @@ ProgramHeaders:
 #CHECK-NEXT:  ProgramHeader {
 #CHECK-NEXT:    Type: PT_GNU_PROPERTY (0x6474E553)
 #CHECK:       }
+#CHECK-NEXT:  ProgramHeader {
+#CHECK-NEXT:    Type: PT_GNU_SFRAME (0x6474E554)
+#CHECK:       }
 #CHECK-NEXT:]
 
 ## Check we do not allow referencing sections that do not exist.
diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp
index 2503008929f98..1e7bb00916cd7 100644
--- a/llvm/tools/llvm-objdump/ELFDump.cpp
+++ b/llvm/tools/llvm-objdump/ELFDump.cpp
@@ -291,6 +291,9 @@ template <class ELFT> void ELFDumper<ELFT>::printProgramHeaders() {
     case ELF::PT_GNU_STACK:
       outs() << "   STACK ";
...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/148803


More information about the llvm-commits mailing list