From 67c9c1fb9d2baaa7c7dbf98d5e8bc27e43f4dc34 Mon Sep 17 00:00:00 2001 From: Dave Lee Date: Fri, 6 Jul 2018 05:11:35 +0000 Subject: [PATCH] Reapply: "objdump: Support newer ObjC image info flags" Summary: Add support for two additional ObjC image info flags: `IS_SIMULATED` and `HAS_CATEGORY_CLASS_PROPERTIES`. `IS_SIMULATED` indicates a Mach-O binary built for iOS simulator. `HAS_CATEGORY_CLASS_PROPERTIES` indicates a Mach-O binary built by a compiler that supports class properties in categories. Reviewers: enderby, compnerd Reviewed By: compnerd Subscribers: keith, llvm-commits Differential Revision: https://reviews.llvm.org/D48568 llvm-svn: 336411 --- test/tools/llvm-objdump/X86/macho-image-info.test | 7 +++++++ tools/llvm-objdump/MachODump.cpp | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 test/tools/llvm-objdump/X86/macho-image-info.test diff --git a/test/tools/llvm-objdump/X86/macho-image-info.test b/test/tools/llvm-objdump/X86/macho-image-info.test new file mode 100644 index 00000000000..dbb864f84dc --- /dev/null +++ b/test/tools/llvm-objdump/X86/macho-image-info.test @@ -0,0 +1,7 @@ +# RUN: llvm-mc < %s -triple x86_64-darwin -filetype=obj | llvm-objdump -m -objc-meta-data - | FileCheck %s + +.section __DATA,__objc_imageinfo,regular,no_dead_strip +.long 0 +.long 96 + +# CHECK: OBJC_IMAGE_IS_SIMULATED OBJC_IMAGE_HAS_CATEGORY_CLASS_PROPERTIES diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index e7a1f472928..bdf80c73b99 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -3229,6 +3229,8 @@ struct imageInfo_t { /* masks for objc_image_info.flags */ #define OBJC_IMAGE_IS_REPLACEMENT (1 << 0) #define OBJC_IMAGE_SUPPORTS_GC (1 << 1) +#define OBJC_IMAGE_IS_SIMULATED (1 << 5) +#define OBJC_IMAGE_HAS_CATEGORY_CLASS_PROPERTIES (1 << 6) struct message_ref64 { uint64_t imp; /* IMP (64-bit pointer) */ @@ -5590,6 +5592,10 @@ static void print_image_info64(SectionRef S, struct DisassembleInfo *info) { outs() << " OBJC_IMAGE_IS_REPLACEMENT"; if (o.flags & OBJC_IMAGE_SUPPORTS_GC) outs() << " OBJC_IMAGE_SUPPORTS_GC"; + if (o.flags & OBJC_IMAGE_IS_SIMULATED) + outs() << " OBJC_IMAGE_IS_SIMULATED"; + if (o.flags & OBJC_IMAGE_HAS_CATEGORY_CLASS_PROPERTIES) + outs() << " OBJC_IMAGE_HAS_CATEGORY_CLASS_PROPERTIES"; swift_version = (o.flags >> 8) & 0xff; if (swift_version != 0) { if (swift_version == 1)