Skip to content

[elf] Add support for {SHT,PT}_GNU_SFRAME constants #148803

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions llvm/include/llvm/BinaryFormat/ELF.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Object/ELF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/ObjectYAML/ELFYAML.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down
119 changes: 64 additions & 55 deletions llvm/test/tools/llvm-objdump/ELF/program-headers.test
Original file line number Diff line number Diff line change
Expand Up @@ -4,103 +4,107 @@
# 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:

# RUN: yaml2obj --docnum=1 -DBITS=64 -DMACHINE=EM_X86_64 %s -o %t64.elf
# 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:

Expand Down Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions llvm/test/tools/llvm-readobj/ELF/section-types.test
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions llvm/test/tools/yaml2obj/ELF/program-header.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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.
Expand Down
3 changes: 3 additions & 0 deletions llvm/tools/llvm-objdump/ELFDump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions llvm/tools/llvm-readobj/ELFDumper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading