[llvm] d4a8a01 - [elf] Add support for {SHT, PT}_GNU_SFRAME constants (#148803)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 16 00:12:18 PDT 2025
Author: Pavel Labath
Date: 2025-07-16T09:12:15+02:00
New Revision: d4a8a01cef1e417dd8c76fd2c5cde568122c27e3
URL: https://github.com/llvm/llvm-project/commit/d4a8a01cef1e417dd8c76fd2c5cde568122c27e3
DIFF: https://github.com/llvm/llvm-project/commit/d4a8a01cef1e417dd8c76fd2c5cde568122c27e3.diff
LOG: [elf] Add support for {SHT,PT}_GNU_SFRAME constants (#148803)
Reference:
https://sourceware.org/git/?p=gnu-gabi.git;a=blob;f=program-loading-and-dynamic-linking.txt;h=3357d865720285df2d29c4e8f92de49ddf1beb40;hb=refs/heads/master
Added:
Modified:
llvm/include/llvm/BinaryFormat/ELF.h
llvm/lib/Object/ELF.cpp
llvm/lib/ObjectYAML/ELFYAML.cpp
llvm/test/tools/llvm-objdump/ELF/program-headers.test
llvm/test/tools/llvm-readobj/ELF/section-types.test
llvm/test/tools/yaml2obj/ELF/program-header.yaml
llvm/tools/llvm-objdump/ELFDump.cpp
llvm/tools/llvm-readobj/ELFDumper.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h
index a672d466c6658..6bf2e177b5d40 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 ";
break;
+ case ELF::PT_GNU_SFRAME:
+ outs() << " SFRAME ";
+ break;
case ELF::PT_INTERP:
outs() << " INTERP ";
break;
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp
index 101079f09e1d2..465c189680cae 100644
--- a/llvm/tools/llvm-readobj/ELFDumper.cpp
+++ b/llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -1490,6 +1490,7 @@ static StringRef segmentTypeToString(unsigned Arch, unsigned Type) {
LLVM_READOBJ_ENUM_CASE(ELF, PT_GNU_STACK);
LLVM_READOBJ_ENUM_CASE(ELF, PT_GNU_RELRO);
LLVM_READOBJ_ENUM_CASE(ELF, PT_GNU_PROPERTY);
+ LLVM_READOBJ_ENUM_CASE(ELF, PT_GNU_SFRAME);
LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_MUTABLE);
LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_RANDOMIZE);
More information about the llvm-commits
mailing list