Index: llvm/include/llvm/BinaryFormat/ELF.h =================================================================== --- llvm/include/llvm/BinaryFormat/ELF.h +++ llvm/include/llvm/BinaryFormat/ELF.h @@ -1199,8 +1199,9 @@ PT_SUNW_EH_FRAME = 0x6474e550, PT_SUNW_UNWIND = 0x6464e550, - PT_GNU_STACK = 0x6474e551, // Indicates stack executability. - PT_GNU_RELRO = 0x6474e552, // Read-only after relocation. + 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_OPENBSD_RANDOMIZE = 0x65a3dbe6, // Fill with random data. PT_OPENBSD_WXNEEDED = 0x65a3dbe7, // Program does W^X violations. Index: llvm/lib/ObjectYAML/ELFYAML.cpp =================================================================== --- llvm/lib/ObjectYAML/ELFYAML.cpp +++ llvm/lib/ObjectYAML/ELFYAML.cpp @@ -54,6 +54,7 @@ ECase(PT_GNU_EH_FRAME); ECase(PT_GNU_STACK); ECase(PT_GNU_RELRO); + ECase(PT_GNU_PROPERTY); #undef ECase IO.enumFallback(Value); } Index: llvm/test/tools/llvm-objdump/elf-pt-gnu-property.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-objdump/elf-pt-gnu-property.test @@ -0,0 +1,16 @@ +## Test that -p can print PT_GNU_PROPERTY as PROPERTY. + +# RUN: yaml2obj %s -o %t +# RUN: llvm-objdump -p %t | FileCheck %s + +# CHECK: Program Header: +# CHECK-NEXT: {{ }}PROPERTY{{ }} + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_AARCH64 +ProgramHeaders: + - Type: PT_GNU_PROPERTY Index: llvm/test/tools/llvm-readobj/elf-pt-gnu-property.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-readobj/elf-pt-gnu-property.test @@ -0,0 +1,19 @@ +## Test that we can print PT_GNU_PROPERTY as GNU_PROPERTY. + +# RUN: yaml2obj %s -o %t +# RUN: llvm-readelf --program-headers %t | FileCheck %s --check-prefix=GNU +# RUN: llvm-readobj --program-headers %t | FileCheck %s --check-prefix=LLVM + +# GNU: {{ }}GNU_PROPERTY{{ }} + +# LLVM: ProgramHeader { +# LLVM-NEXT: Type: PT_GNU_PROPERTY (0x6474E553) + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_AARCH64 +ProgramHeaders: + - Type: PT_GNU_PROPERTY Index: llvm/test/tools/yaml2obj/ELF/program-header.yaml =================================================================== --- llvm/test/tools/yaml2obj/ELF/program-header.yaml +++ llvm/test/tools/yaml2obj/ELF/program-header.yaml @@ -40,6 +40,7 @@ - Type: PT_GNU_EH_FRAME - Type: PT_GNU_STACK - Type: PT_GNU_RELRO + - Type: PT_GNU_PROPERTY #CHECK: ProgramHeaders [ #CHECK-NEXT: ProgramHeader { @@ -76,6 +77,9 @@ #CHECK-NEXT: ProgramHeader { #CHECK-NEXT: Type: PT_GNU_RELRO (0x6474E552) #CHECK: } +#CHECK-NEXT: ProgramHeader { +#CHECK-NEXT: Type: PT_GNU_PROPERTY (0x6474E553) +#CHECK: } #CHECK-NEXT:] ## Check we do not allow referencing sections that do not exist. Index: llvm/tools/llvm-objdump/ELFDump.cpp =================================================================== --- llvm/tools/llvm-objdump/ELFDump.cpp +++ llvm/tools/llvm-objdump/ELFDump.cpp @@ -204,6 +204,9 @@ case ELF::PT_GNU_RELRO: outs() << " RELRO "; break; + case ELF::PT_GNU_PROPERTY: + outs() << " PROPERTY "; + break; case ELF::PT_GNU_STACK: outs() << " STACK "; break; Index: llvm/tools/llvm-readobj/ELFDumper.cpp =================================================================== --- llvm/tools/llvm-readobj/ELFDumper.cpp +++ llvm/tools/llvm-readobj/ELFDumper.cpp @@ -1446,6 +1446,7 @@ 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_OPENBSD_RANDOMIZE); LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_WXNEEDED); @@ -1470,6 +1471,7 @@ LLVM_READOBJ_PHDR_ENUM(ELF, PT_SUNW_UNWIND) LLVM_READOBJ_PHDR_ENUM(ELF, PT_GNU_STACK) LLVM_READOBJ_PHDR_ENUM(ELF, PT_GNU_RELRO) + LLVM_READOBJ_PHDR_ENUM(ELF, PT_GNU_PROPERTY) default: // All machine specific PT_* types switch (Arch) {