]> git.saurik.com Git - apple/objc4.git/blobdiff - runtime/objc-file.h
objc4-818.2.tar.gz
[apple/objc4.git] / runtime / objc-file.h
index 23c0da1542783442445b6c9b4818f9a9e8db2286..597fd3ba124c9138b3efc26a8b3ec99d17b51c96 100644 (file)
@@ -38,10 +38,14 @@ extern message_ref_t *_getObjc2MessageRefs(const header_info *hi, size_t *count)
 extern Class*_getObjc2ClassRefs(const header_info *hi, size_t *count);
 extern Class*_getObjc2SuperRefs(const header_info *hi, size_t *count);
 extern classref_t const *_getObjc2ClassList(const header_info *hi, size_t *count);
-extern classref_t const *_getObjc2NonlazyClassList(const header_info *hi, size_t *count);
-extern category_t * const *_getObjc2CategoryList(const header_info *hi, size_t *count);
-extern category_t * const *_getObjc2CategoryList2(const header_info *hi, size_t *count);
-extern category_t * const *_getObjc2NonlazyCategoryList(const header_info *hi, size_t *count);
+// Use hi->nlclslist() instead
+// extern classref_t const *_getObjc2NonlazyClassList(const header_info *hi, size_t *count);
+// Use hi->catlist() instead
+// extern category_t * const *_getObjc2CategoryList(const header_info *hi, size_t *count);
+// Use hi->catlist2() instead
+// extern category_t * const *_getObjc2CategoryList2(const header_info *hi, size_t *count);
+// Use hi->nlcatlist() instead
+// extern category_t * const *_getObjc2NonlazyCategoryList(const header_info *hi, size_t *count);
 extern protocol_t * const *_getObjc2ProtocolList(const header_info *hi, size_t *count);
 extern protocol_t **_getObjc2ProtocolRefs(const header_info *hi, size_t *count);
 
@@ -50,6 +54,10 @@ struct UnsignedInitializer {
 private:
     uintptr_t storage;
 public:
+    UnsignedInitializer(uint32_t offset) {
+        storage = (uintptr_t)&_mh_dylib_header + offset;
+    }
+
     void operator () () const {
         using Initializer = void(*)();
         Initializer init =
@@ -62,8 +70,11 @@ public:
 extern UnsignedInitializer *getLibobjcInitializers(const header_info *hi, size_t *count);
 
 extern classref_t const *_getObjc2NonlazyClassList(const headerType *mhdr, size_t *count);
+extern category_t * const *_getObjc2CategoryList(const headerType *mhdr, size_t *count);
+extern category_t * const *_getObjc2CategoryList2(const headerType *mhdr, size_t *count);
 extern category_t * const *_getObjc2NonlazyCategoryList(const headerType *mhdr, size_t *count);
 extern UnsignedInitializer *getLibobjcInitializers(const headerType *mhdr, size_t *count);
+extern uint32_t *getLibobjcInitializerOffsets(const headerType *hi, size_t *count);
 
 static inline void
 foreach_data_segment(const headerType *mhdr,
@@ -83,11 +94,12 @@ foreach_data_segment(const headerType *mhdr,
         seg = (const segmentType *)((char *)seg + seg->cmdsize);
     }
 
-    // enumerate __DATA* segments
+    // enumerate __DATA* and __AUTH* segments
     seg = (const segmentType *) (mhdr + 1);
     for (unsigned long i = 0; i < mhdr->ncmds; i++) {
         if (seg->cmd == SEGMENT_CMD  &&
-            segnameStartsWith(seg->segname, "__DATA"))
+            (segnameStartsWith(seg->segname, "__DATA") ||
+             segnameStartsWith(seg->segname, "__AUTH")))
         {
             code(seg, slide);
         }