#ifndef LLVM_LIB_OBJCMETADATA_MACHO_OBJ_H
#define LLVM_LIB_OBJCMETADATA_MACHO_OBJ_H
#include <llvm/Support/SwapByteOrder.h>
struct cfstring64_t {
uint64_t isa; uint64_t flags; uint64_t characters; uint64_t length; };
struct class64_t {
uint64_t isa; uint64_t superclass; uint64_t cache; uint64_t vtable; uint64_t data; };
struct class32_t {
uint32_t isa;
uint32_t superclass;
uint32_t cache;
uint32_t vtable;
uint32_t data;
};
struct class_ro64_t {
uint32_t flags;
uint32_t instanceStart;
uint32_t instanceSize;
uint32_t reserved;
uint64_t ivarLayout; uint64_t name; uint64_t baseMethods; uint64_t baseProtocols; uint64_t ivars; uint64_t weakIvarLayout; uint64_t baseProperties; };
struct class_ro32_t {
uint32_t flags;
uint32_t instanceStart;
uint32_t instanceSize;
uint32_t ivarLayout;
uint32_t name;
uint32_t baseMethods;
uint32_t baseProtocols;
uint32_t ivars;
uint32_t weakIvarLayout;
uint32_t baseProperties;
};
#define RO_META (1 << 0)
#define RO_ROOT (1 << 1)
#define RO_HAS_CXX_STRUCTORS (1 << 2)
struct method_list64_t {
uint32_t entsize;
uint32_t count;
};
struct method_list32_t {
uint32_t entsize;
uint32_t count;
};
struct method64_t {
uint64_t name;
uint64_t types;
uint64_t imp;
};
struct method32_t {
uint32_t name;
uint32_t types;
uint32_t imp;
};
struct protocol_list64_t {
uint64_t count;
};
struct protocol_list32_t {
uint32_t count;
};
struct protocol64_t {
uint64_t isa;
uint64_t name;
uint64_t protocols;
uint64_t instanceMethods;
uint64_t classMethods;
uint64_t optionalInstanceMethods;
uint64_t optionalClassMethods;
uint64_t instanceProperties;
};
struct protocol32_t {
uint32_t isa;
uint32_t name;
uint32_t protocols;
uint32_t instanceMethods;
uint32_t classMethods;
uint32_t optionalInstanceMethods;
uint32_t optionalClassMethods;
uint32_t instanceProperties;
};
struct ivar_list64_t {
uint32_t entsize;
uint32_t count;
};
struct ivar_list32_t {
uint32_t entsize;
uint32_t count;
};
struct ivar64_t {
uint64_t offset;
uint64_t name;
uint64_t type;
uint32_t alignment;
uint32_t size;
};
struct ivar32_t {
uint32_t offset;
uint32_t name;
uint32_t type;
uint32_t alignment;
uint32_t size;
};
struct objc_property_list64 {
uint32_t entsize;
uint32_t count;
};
struct objc_property_list32 {
uint32_t entsize;
uint32_t count;
};
struct objc_property64 {
uint64_t name;
uint64_t attributes;
};
struct objc_property32 {
uint32_t name;
uint32_t attributes;
};
struct category64_t {
uint64_t name;
uint64_t cls;
uint64_t instanceMethods;
uint64_t classMethods;
uint64_t protocols;
uint64_t instanceProperties;
};
struct category32_t {
uint32_t name;
uint32_t cls;
uint32_t instanceMethods;
uint32_t classMethods;
uint32_t protocols;
uint32_t instanceProperties;
};
struct objc_image_info64 {
uint32_t version;
uint32_t flags;
};
struct objc_image_info32 {
uint32_t version;
uint32_t flags;
};
struct imageInfo_t {
uint32_t version;
uint32_t flags;
};
#define OBJC_IMAGE_IS_REPLACEMENT (1 << 0)
#define OBJC_IMAGE_SUPPORTS_GC (1 << 1)
struct message_ref64 {
uint64_t imp;
uint64_t sel;
};
struct message_ref32 {
uint32_t imp;
uint32_t sel;
};
struct objc_module_t {
uint32_t version;
uint32_t size;
uint32_t name;
uint32_t symtab;
};
struct objc_symtab_t {
uint32_t sel_ref_cnt;
uint32_t refs;
uint16_t cls_def_cnt;
uint16_t cat_def_cnt;
};
struct objc_class_t {
uint32_t isa;
uint32_t super_class;
uint32_t name;
int32_t version;
int32_t info;
int32_t instance_size;
uint32_t ivars;
uint32_t methodLists;
uint32_t cache;
uint32_t protocols;
};
#define CLS_GETINFO(cls, infomask) ((cls)->info & (infomask))
#define CLS_CLASS 0x1
#define CLS_META 0x2
struct objc_category_t {
uint32_t category_name;
uint32_t class_name;
uint32_t instance_methods;
uint32_t class_methods;
uint32_t protocols;
};
struct objc_ivar_t {
uint32_t ivar_name;
uint32_t ivar_type;
int32_t ivar_offset;
};
struct objc_ivar_list_t {
int32_t ivar_count;
};
struct objc_method_list_t {
uint32_t obsolete;
int32_t method_count;
};
struct objc_method_t {
uint32_t method_name;
uint32_t method_types;
uint32_t method_imp;
};
struct objc_protocol_list_t {
uint32_t next;
int32_t count;
};
struct objc_protocol_t {
uint32_t isa;
uint32_t protocol_name;
uint32_t protocol_list;
uint32_t instance_methods;
uint32_t class_methods;
};
struct objc_method_description_list_t {
int32_t count;
};
struct objc_method_description_t {
uint32_t name;
uint32_t types;
};
inline void swapStruct(struct cfstring64_t &cfs) {
llvm::sys::swapByteOrder(cfs.isa);
llvm::sys::swapByteOrder(cfs.flags);
llvm::sys::swapByteOrder(cfs.characters);
llvm::sys::swapByteOrder(cfs.length);
}
inline void swapStruct(struct class64_t &c) {
llvm::sys::swapByteOrder(c.isa);
llvm::sys::swapByteOrder(c.superclass);
llvm::sys::swapByteOrder(c.cache);
llvm::sys::swapByteOrder(c.vtable);
llvm::sys::swapByteOrder(c.data);
}
inline void swapStruct(struct class32_t &c) {
llvm::sys::swapByteOrder(c.isa);
llvm::sys::swapByteOrder(c.superclass);
llvm::sys::swapByteOrder(c.cache);
llvm::sys::swapByteOrder(c.vtable);
llvm::sys::swapByteOrder(c.data);
}
inline void swapStruct(struct class_ro64_t &cro) {
llvm::sys::swapByteOrder(cro.flags);
llvm::sys::swapByteOrder(cro.instanceStart);
llvm::sys::swapByteOrder(cro.instanceSize);
llvm::sys::swapByteOrder(cro.reserved);
llvm::sys::swapByteOrder(cro.ivarLayout);
llvm::sys::swapByteOrder(cro.name);
llvm::sys::swapByteOrder(cro.baseMethods);
llvm::sys::swapByteOrder(cro.baseProtocols);
llvm::sys::swapByteOrder(cro.ivars);
llvm::sys::swapByteOrder(cro.weakIvarLayout);
llvm::sys::swapByteOrder(cro.baseProperties);
}
inline void swapStruct(struct class_ro32_t &cro) {
llvm::sys::swapByteOrder(cro.flags);
llvm::sys::swapByteOrder(cro.instanceStart);
llvm::sys::swapByteOrder(cro.instanceSize);
llvm::sys::swapByteOrder(cro.ivarLayout);
llvm::sys::swapByteOrder(cro.name);
llvm::sys::swapByteOrder(cro.baseMethods);
llvm::sys::swapByteOrder(cro.baseProtocols);
llvm::sys::swapByteOrder(cro.ivars);
llvm::sys::swapByteOrder(cro.weakIvarLayout);
llvm::sys::swapByteOrder(cro.baseProperties);
}
inline void swapStruct(struct method_list64_t &ml) {
llvm::sys::swapByteOrder(ml.entsize);
llvm::sys::swapByteOrder(ml.count);
}
inline void swapStruct(struct method_list32_t &ml) {
llvm::sys::swapByteOrder(ml.entsize);
llvm::sys::swapByteOrder(ml.count);
}
inline void swapStruct(struct method64_t &m) {
llvm::sys::swapByteOrder(m.name);
llvm::sys::swapByteOrder(m.types);
llvm::sys::swapByteOrder(m.imp);
}
inline void swapStruct(struct method32_t &m) {
llvm::sys::swapByteOrder(m.name);
llvm::sys::swapByteOrder(m.types);
llvm::sys::swapByteOrder(m.imp);
}
inline void swapStruct(struct protocol_list64_t &pl) {
llvm::sys::swapByteOrder(pl.count);
}
inline void swapStruct(struct protocol_list32_t &pl) {
llvm::sys::swapByteOrder(pl.count);
}
inline void swapStruct(struct protocol64_t &p) {
llvm::sys::swapByteOrder(p.isa);
llvm::sys::swapByteOrder(p.name);
llvm::sys::swapByteOrder(p.protocols);
llvm::sys::swapByteOrder(p.instanceMethods);
llvm::sys::swapByteOrder(p.classMethods);
llvm::sys::swapByteOrder(p.optionalInstanceMethods);
llvm::sys::swapByteOrder(p.optionalClassMethods);
llvm::sys::swapByteOrder(p.instanceProperties);
}
inline void swapStruct(struct protocol32_t &p) {
llvm::sys::swapByteOrder(p.isa);
llvm::sys::swapByteOrder(p.name);
llvm::sys::swapByteOrder(p.protocols);
llvm::sys::swapByteOrder(p.instanceMethods);
llvm::sys::swapByteOrder(p.classMethods);
llvm::sys::swapByteOrder(p.optionalInstanceMethods);
llvm::sys::swapByteOrder(p.optionalClassMethods);
llvm::sys::swapByteOrder(p.instanceProperties);
}
inline void swapStruct(struct ivar_list64_t &il) {
llvm::sys::swapByteOrder(il.entsize);
llvm::sys::swapByteOrder(il.count);
}
inline void swapStruct(struct ivar_list32_t &il) {
llvm::sys::swapByteOrder(il.entsize);
llvm::sys::swapByteOrder(il.count);
}
inline void swapStruct(struct ivar64_t &i) {
llvm::sys::swapByteOrder(i.offset);
llvm::sys::swapByteOrder(i.name);
llvm::sys::swapByteOrder(i.type);
llvm::sys::swapByteOrder(i.alignment);
llvm::sys::swapByteOrder(i.size);
}
inline void swapStruct(struct ivar32_t &i) {
llvm::sys::swapByteOrder(i.offset);
llvm::sys::swapByteOrder(i.name);
llvm::sys::swapByteOrder(i.type);
llvm::sys::swapByteOrder(i.alignment);
llvm::sys::swapByteOrder(i.size);
}
inline void swapStruct(struct objc_property_list64 &pl) {
llvm::sys::swapByteOrder(pl.entsize);
llvm::sys::swapByteOrder(pl.count);
}
inline void swapStruct(struct objc_property_list32 &pl) {
llvm::sys::swapByteOrder(pl.entsize);
llvm::sys::swapByteOrder(pl.count);
}
inline void swapStruct(struct objc_property64 &op) {
llvm::sys::swapByteOrder(op.name);
llvm::sys::swapByteOrder(op.attributes);
}
inline void swapStruct(struct objc_property32 &op) {
llvm::sys::swapByteOrder(op.name);
llvm::sys::swapByteOrder(op.attributes);
}
inline void swapStruct(struct category64_t &c) {
llvm::sys::swapByteOrder(c.name);
llvm::sys::swapByteOrder(c.cls);
llvm::sys::swapByteOrder(c.instanceMethods);
llvm::sys::swapByteOrder(c.classMethods);
llvm::sys::swapByteOrder(c.protocols);
llvm::sys::swapByteOrder(c.instanceProperties);
}
inline void swapStruct(struct category32_t &c) {
llvm::sys::swapByteOrder(c.name);
llvm::sys::swapByteOrder(c.cls);
llvm::sys::swapByteOrder(c.instanceMethods);
llvm::sys::swapByteOrder(c.classMethods);
llvm::sys::swapByteOrder(c.protocols);
llvm::sys::swapByteOrder(c.instanceProperties);
}
inline void swapStruct(struct objc_image_info64 &o) {
llvm::sys::swapByteOrder(o.version);
llvm::sys::swapByteOrder(o.flags);
}
inline void swapStruct(struct objc_image_info32 &o) {
llvm::sys::swapByteOrder(o.version);
llvm::sys::swapByteOrder(o.flags);
}
inline void swapStruct(struct imageInfo_t &o) {
llvm::sys::swapByteOrder(o.version);
llvm::sys::swapByteOrder(o.flags);
}
inline void swapStruct(struct message_ref64 &mr) {
llvm::sys::swapByteOrder(mr.imp);
llvm::sys::swapByteOrder(mr.sel);
}
inline void swapStruct(struct message_ref32 &mr) {
llvm::sys::swapByteOrder(mr.imp);
llvm::sys::swapByteOrder(mr.sel);
}
inline void swapStruct(struct objc_module_t &module) {
llvm::sys::swapByteOrder(module.version);
llvm::sys::swapByteOrder(module.size);
llvm::sys::swapByteOrder(module.name);
llvm::sys::swapByteOrder(module.symtab);
}
inline void swapStruct(struct objc_symtab_t &symtab) {
llvm::sys::swapByteOrder(symtab.sel_ref_cnt);
llvm::sys::swapByteOrder(symtab.refs);
llvm::sys::swapByteOrder(symtab.cls_def_cnt);
llvm::sys::swapByteOrder(symtab.cat_def_cnt);
}
inline void swapStruct(struct objc_class_t &objc_class) {
llvm::sys::swapByteOrder(objc_class.isa);
llvm::sys::swapByteOrder(objc_class.super_class);
llvm::sys::swapByteOrder(objc_class.name);
llvm::sys::swapByteOrder(objc_class.version);
llvm::sys::swapByteOrder(objc_class.info);
llvm::sys::swapByteOrder(objc_class.instance_size);
llvm::sys::swapByteOrder(objc_class.ivars);
llvm::sys::swapByteOrder(objc_class.methodLists);
llvm::sys::swapByteOrder(objc_class.cache);
llvm::sys::swapByteOrder(objc_class.protocols);
}
inline void swapStruct(struct objc_category_t &objc_category) {
llvm::sys::swapByteOrder(objc_category.category_name);
llvm::sys::swapByteOrder(objc_category.class_name);
llvm::sys::swapByteOrder(objc_category.instance_methods);
llvm::sys::swapByteOrder(objc_category.class_methods);
llvm::sys::swapByteOrder(objc_category.protocols);
}
inline void swapStruct(struct objc_ivar_list_t &objc_ivar_list) {
llvm::sys::swapByteOrder(objc_ivar_list.ivar_count);
}
inline void swapStruct(struct objc_ivar_t &objc_ivar) {
llvm::sys::swapByteOrder(objc_ivar.ivar_name);
llvm::sys::swapByteOrder(objc_ivar.ivar_type);
llvm::sys::swapByteOrder(objc_ivar.ivar_offset);
}
inline void swapStruct(struct objc_method_list_t &method_list) {
llvm::sys::swapByteOrder(method_list.obsolete);
llvm::sys::swapByteOrder(method_list.method_count);
}
inline void swapStruct(struct objc_method_t &method) {
llvm::sys::swapByteOrder(method.method_name);
llvm::sys::swapByteOrder(method.method_types);
llvm::sys::swapByteOrder(method.method_imp);
}
inline void swapStruct(struct objc_protocol_list_t &protocol_list) {
llvm::sys::swapByteOrder(protocol_list.next);
llvm::sys::swapByteOrder(protocol_list.count);
}
inline void swapStruct(struct objc_protocol_t &protocol) {
llvm::sys::swapByteOrder(protocol.isa);
llvm::sys::swapByteOrder(protocol.protocol_name);
llvm::sys::swapByteOrder(protocol.protocol_list);
llvm::sys::swapByteOrder(protocol.instance_methods);
llvm::sys::swapByteOrder(protocol.class_methods);
}
inline void swapStruct(struct objc_method_description_list_t &mdl) {
llvm::sys::swapByteOrder(mdl.count);
}
inline void swapStruct(struct objc_method_description_t &md) {
llvm::sys::swapByteOrder(md.name);
llvm::sys::swapByteOrder(md.types);
}
#endif