From 8e0d5ac715a86766966d298a411f67aeba414312 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 12 Feb 2019 09:56:01 +0000 Subject: [PATCH] [llvm-readobj] Only allow 4-byte pr_data Summary: AMD64 psABI says: "The pr_data field of each property contains a 4-byte unsigned integer." Thus we don't need to handle 8-byte pr_data. Reviewers: mike.dvoretsky, grimar, craig.topper, xiangzhangllvm, hjl.tools Reviewed By: grimar Subscribers: rupprecht, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D58103 llvm-svn: 353815 --- llvm/test/tools/llvm-readobj/note-gnu-property.s | 16 ++++++++-------- llvm/tools/llvm-readobj/ELFDumper.cpp | 10 ++++------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/llvm/test/tools/llvm-readobj/note-gnu-property.s b/llvm/test/tools/llvm-readobj/note-gnu-property.s index d513a3e460c6..f409818f2b87 100644 --- a/llvm/test/tools/llvm-readobj/note-gnu-property.s +++ b/llvm/test/tools/llvm-readobj/note-gnu-property.s @@ -17,7 +17,7 @@ // GNU-NEXT: stack size: // GNU-NEXT: no copy on protected // GNU-NEXT: X86 features: -// GNU-NEXT: X86 features: IBT, +// GNU-NEXT: X86 features: IBT, // GNU-NEXT: // LLVM: Notes [ @@ -40,7 +40,7 @@ // LLVM-NEXT: stack size: // LLVM-NEXT: no copy on protected // LLVM-NEXT: X86 features: -// LLVM-NEXT: X86 features: IBT, +// LLVM-NEXT: X86 features: IBT, // LLVM-NEXT: // LLVM-NEXT: ] // LLVM-NEXT: } @@ -72,8 +72,8 @@ begin: /* CET property note */ .long 0xc0000002 /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */ - .long 8 /* Data size */ - .quad 2 /* GNU_PROPERTY_X86_FEATURE_1_SHSTK */ + .long 4 /* Data size */ + .long 2 /* GNU_PROPERTY_X86_FEATURE_1_SHSTK */ .p2align 3 /* Align to 8 byte for 64 bit */ /* CET property note with padding */ @@ -83,8 +83,8 @@ begin: .p2align 3 /* Align to 8 byte for 64 bit */ .long 0xc0000002 /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */ - .long 8 /* Data size */ - .quad 0 /* Empty flags, not an error */ + .long 4 /* Data size */ + .long 0 /* Empty flags, not an error */ .p2align 3 /* Align to 8 byte for 64 bit */ /* All notes below are broken. Test we are able to report them. */ @@ -118,8 +118,8 @@ begin: /* CET note with bad flags */ .long 0xc0000002 /* Type: GNU_PROPERTY_X86_FEATURE_1_AND */ - .long 8 /* Data size */ - .quad 0xf000f000f000f001 /* GNU_PROPERTY_X86_FEATURE_1_IBT and bad bits */ + .long 4 /* Data size */ + .long 0xf000f001 /* GNU_PROPERTY_X86_FEATURE_1_IBT and bad bits */ .p2align 3 /* Align to 8 byte for 64 bit */ /* GNU_PROPERTY_NO_COPY_ON_PROTECTED with pr_datasz and without data */ diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index ba56e76403fd..deb8fe0adb7d 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -3670,14 +3670,12 @@ static std::string getGNUProperty(uint32_t Type, uint32_t DataSize, return OS.str(); case GNU_PROPERTY_X86_FEATURE_1_AND: OS << "X86 features: "; - if (DataSize != 4 && DataSize != 8) { + if (DataSize != 4) { OS << format("", DataSize); return OS.str(); } - uint64_t CFProtection = - (DataSize == 4) - ? support::endian::read32(Data.data()) - : support::endian::read64(Data.data()); + uint32_t CFProtection = + support::endian::read32(Data.data()); if (CFProtection == 0) { OS << "none"; return OS.str(); @@ -3695,7 +3693,7 @@ static std::string getGNUProperty(uint32_t Type, uint32_t DataSize, OS << ", "; } if (CFProtection) - OS << format("", CFProtection); + OS << format("", CFProtection); return OS.str(); } }