From f1fdd3326912682df3c8b91f46819b8373174fda Mon Sep 17 00:00:00 2001 From: George Rimar Date: Tue, 18 Oct 2016 10:54:56 +0000 Subject: [PATCH] [llvm-readobj] - Teach readobj to print PT_OPENBSD_RANDOMIZE/PT_OPENBSD_WXNEEDED headers. These are OpenBSD specific program headers and currently we support them in LLD. Description of headers (just in case) available here: http://man.openbsd.org/OpenBSD-current/man5/elf.5 OpenBSD commits were: For PT_OPENBSD_RANDOMIZE: https://github.com/openbsd/src/commit/c494713c450d98da3f2e1451ee8c7fb675a7c461 For PT_OPENBSD_WXNEEDED: https://github.com/openbsd/src/commit/2a5a8fc7e30928c2cff57cfe5fb491c90d8478ad Differential revision: https://reviews.llvm.org/D25616 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@284471 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Object/Inputs/openbsd-phdrs.elf-x86-64 | Bin 0 -> 544 bytes test/tools/llvm-readobj/program-headers.test | 35 +++++++++++++++++++ tools/llvm-readobj/ELFDumper.cpp | 4 +++ 3 files changed, 39 insertions(+) create mode 100644 test/Object/Inputs/openbsd-phdrs.elf-x86-64 diff --git a/test/Object/Inputs/openbsd-phdrs.elf-x86-64 b/test/Object/Inputs/openbsd-phdrs.elf-x86-64 new file mode 100644 index 0000000000000000000000000000000000000000..757d49055a7625034cc970bba49867027c4d3c8e GIT binary patch literal 544 zcmb<-^>JfjWMqH=CI&kO1doBi0V<(@BR{6w&|y literal 0 HcmV?d00001 diff --git a/test/tools/llvm-readobj/program-headers.test b/test/tools/llvm-readobj/program-headers.test index 8e8855d8b8e8..9bcd133bc442 100644 --- a/test/tools/llvm-readobj/program-headers.test +++ b/test/tools/llvm-readobj/program-headers.test @@ -7,6 +7,17 @@ RUN: | FileCheck %s -check-prefix ELF-MIPS RUN: llvm-readobj -program-headers %p/../../Object/Inputs/program-headers.mips64 \ RUN: | FileCheck %s -check-prefix ELF-MIPS64 +## openbsd-phdrs.elf-x86-64 was generated using GNU ld (GNU Binutils for Ubuntu) 2.26.1. +## llvm-mc -filetype=obj -triple=x86_64-pc-linux test.s -o main.o +## ld -script linker.script main.o -o openbsd-phdrs.elf-x86-64 +## +## test.s is an empty file. +## linker.script: +## PHDRS { text PT_LOAD FILEHDR PHDRS; foo 0x65a3dbe6; bar 0x65a3dbe7; } +## SECTIONS { . = SIZEOF_HEADERS; .all : { *(.*) } : text } +RUN: llvm-readobj -program-headers %p/../../Object/Inputs/openbsd-phdrs.elf-x86-64 \ +RUN: | FileCheck %s -check-prefix OPENBSD-X86-64 + ELF-I386: ProgramHeaders [ ELF-I386-NEXT: ProgramHeader { ELF-I386-NEXT: Type: PT_LOAD (0x1) @@ -140,3 +151,27 @@ ELF-MIPS64-NEXT: ] ELF-MIPS64-NEXT: Alignment: 65536 ELF-MIPS64-NEXT: } ELF-MIPS64-NEXT: ] + +OPENBSD-X86-64: ProgramHeaders [ +OPENBSD-X86-64: ProgramHeader { +OPENBSD-X86-64: Type: PT_OPENBSD_RANDOMIZE +OPENBSD-X86-64-NEXT: Offset: +OPENBSD-X86-64-NEXT: VirtualAddress: +OPENBSD-X86-64-NEXT: PhysicalAddress: +OPENBSD-X86-64-NEXT: FileSize: +OPENBSD-X86-64-NEXT: MemSize: +OPENBSD-X86-64-NEXT: Flags [ +OPENBSD-X86-64-NEXT: ] +OPENBSD-X86-64-NEXT: Alignment: +OPENBSD-X86-64-NEXT: } +OPENBSD-X86-64-NEXT: ProgramHeader { +OPENBSD-X86-64-NEXT: Type: PT_OPENBSD_WXNEEDED +OPENBSD-X86-64-NEXT: Offset: +OPENBSD-X86-64-NEXT: VirtualAddress: +OPENBSD-X86-64-NEXT: PhysicalAddress: +OPENBSD-X86-64-NEXT: FileSize: +OPENBSD-X86-64-NEXT: MemSize: +OPENBSD-X86-64-NEXT: Flags [ +OPENBSD-X86-64-NEXT: ] +OPENBSD-X86-64-NEXT: Alignment: +OPENBSD-X86-64-NEXT: } diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 318ad2a0abd3..9c594a0e3392 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -1154,6 +1154,10 @@ static const char *getElfSegmentType(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_OPENBSD_RANDOMIZE); + LLVM_READOBJ_ENUM_CASE(ELF, PT_OPENBSD_WXNEEDED); + default: return ""; } }