NAME=mach0 arm64 legacy imports/binds
FILE=bins/mach0/imports-arm64
CMDS=<<EOF
ii
ir
pxr 0x10 @ section.15.__DATA.__objc_classrefs
pD 0x10 @ section.15.__DATA.__objc_classrefs
ic
EOF
EXPECT=<<EOF
nth vaddr       bind type           lib name                     
-----------------------------------------------------------------
0   ----------  NONE OBJC_CLASS         NSObject
1   ----------  NONE OBJC_CLASS         NSString
2   ----------  NONE OBJC_METACLASS     NSObject
3   ----------  NONE FUNC               _objc_empty_cache
4   0x100003ee8 NONE FUNC               objc_alloc
5   0x100003ef4 NONE FUNC               objc_alloc_init
6   0x100003f00 NONE FUNC               objc_autoreleasePoolPop
7   0x100003f0c NONE FUNC               objc_autoreleasePoolPush
8   ----------  NONE FUNC               objc_msgSend
9   ----------  NONE FUNC               dyld_stub_binder
vaddr       paddr      type   name                     
-------------------------------------------------------
0x00000000  0x00000000 SET_64 NSObject
0x100004000 0x00004000 SET_64 objc_msgSend
0x100004008 0x00004008 SET_64 dyld_stub_binder
0x100004010 0x00004010 SET_64 objc_alloc
0x100004018 0x00004018 SET_64 objc_alloc_init
0x100004020 0x00004020 SET_64 objc_autoreleasePoolPop
0x100004028 0x00004028 SET_64 objc_autoreleasePoolPush
0x100008000 0x00008000 SET_64 objc_alloc
0x100008008 0x00008008 SET_64 objc_alloc_init
0x100008010 0x00008010 SET_64 objc_autoreleasePoolPop
0x100008018 0x00008018 SET_64 objc_autoreleasePoolPush
0x1000080e8 0x000080e8 SET_64 NSString
0x1000080f8 0x000080f8 SET_64 NSObject
0x100008100 0x00008100 SET_64 NSObject
0x100008108 0x00008108 SET_64 _objc_empty_cache
0x100008128 0x00008128 SET_64 NSObject
0x100008130 0x00008130 SET_64 _objc_empty_cache
0x1000080e0 0x0000000100008120    ....... @ section.15.__DATA.__objc_classrefs 4295000352 17.__DATA.__objc_data class Stub R 0x1000080f8
0x1000080e8 ..[ null bytes ]..   00000000 reloc.NSString
            ;-- section.15.__DATA.__objc_classrefs:
            0x1000080e0      udf   0x8120                              ; [15] -rw- section size 16 named 15.__DATA.__objc_classrefs
            0x1000080e4      udf   1
            ;-- NSString:
            0x1000080e8      .qword 0x0000000000000000                 ; RELOC 64 NSString
address     min         max         name super    
--------------------------------------------------
0x1000080f8 0x1000080f8 0x1000080f8 Stub NSObject
EOF
RUN

NAME=mach0 arm64 chained imports
FILE=bins/mach0/imports-arm64-chained
CMDS=<<EOF
ii
ir
pxr 0x10 @ section.13.__DATA.__objc_classrefs
pD 0x10 @ section.13.__DATA.__objc_classrefs
ic
EOF
EXPECT=<<EOF
nth vaddr       bind type           lib name                     
-----------------------------------------------------------------
0   0x100003f30 NONE FUNC               objc_alloc
1   0x100003f3c NONE FUNC               objc_alloc_init
2   0x100003f48 NONE FUNC               objc_autoreleasePoolPop
3   0x100003f54 NONE FUNC               objc_autoreleasePoolPush
4   ----------  NONE FUNC               objc_msgSend
5   ----------  NONE OBJC_CLASS         NSString
6   ----------  NONE FUNC               _objc_empty_cache
7   ----------  NONE OBJC_METACLASS     NSObject
8   ----------  NONE OBJC_CLASS         NSObject
vaddr       paddr      target      type   name                     
-------------------------------------------------------------------
0x100004000 0x00004000 0x100010008 SET_64 objc_alloc
0x100004008 0x00004008 0x100010010 SET_64 objc_alloc_init
0x100004010 0x00004010 0x100010018 SET_64 objc_autoreleasePoolPop
0x100004018 0x00004018 0x100010020 SET_64 objc_autoreleasePoolPush
0x100004020 0x00004020 0x100010028 SET_64 objc_msgSend
0x100004028 0x00004028 0x00000000  SET_64 
0x100008018 0x00008018 0x00000000  SET_64 
0x100008050 0x00008050 0x00000000  SET_64 
0x100008058 0x00008058 0x00000000  SET_64 
0x100008060 0x00008060 0x00000000  SET_64 
0x100008088 0x00008088 0x00000000  SET_64 
0x1000080a0 0x000080a0 0x00000000  SET_64 
0x1000080b8 0x000080b8 0x00000000  SET_64 
0x1000080c0 0x000080c0 0x00000000  SET_64 
0x1000080c8 0x000080c8 0x100010030 SET_64 NSString
0x1000080d8 0x000080d8 0x100010038 SET_64 NSObject
0x1000080e0 0x000080e0 0x100010038 SET_64 NSObject
0x1000080e8 0x000080e8 0x100010040 SET_64 _objc_empty_cache
0x1000080f8 0x000080f8 0x00000000  SET_64 
0x100008100 0x00008100 0x00000000  SET_64 
0x100008108 0x00008108 0x100010048 SET_64 NSObject
0x100008110 0x00008110 0x100010040 SET_64 _objc_empty_cache
0x100008120 0x00008120 0x00000000  SET_64 
0x1000080c0 0x0000000100008100   ........ @ section.13.__DATA.__objc_classrefs 4295000320 15.__DATA.__objc_data class Stub R 0x1000080d8
0x1000080c8 0x0000000100010030   0....... @ reloc.NSString 4295032880 NSString R 0x0
            ;-- section.13.__DATA.__objc_classrefs:
            0x1000080c0      .qword 0x0000000100008100 ; sym.class_Stub; RELOC 64  ; [13] -rw- section size 16 named 13.__DATA.__objc_classrefs
            ;-- NSString:
            0x1000080c8      .qword 0x0000000100010030 ; reloc.target.NSString; RELOC 64 NSString
address     min         max         name super    
--------------------------------------------------
0x1000080d8 0x1000080d8 0x1000080d8 Stub NSObject
EOF
RUN

NAME=mach0 arm64e legacy chained imports (BIND_OPCODE_THREADED)
FILE=bins/mach0/imports-arm64e-threaded
ARGS=-a arm -b 64
CMDS=<<EOF
ii
ir
pxr 0x10 @ section.13.__DATA.__objc_classrefs
pD 0x10 @ section.13.__DATA.__objc_classrefs
ic
EOF
EXPECT=<<EOF
nth vaddr       bind type           lib name                     
-----------------------------------------------------------------
0   ----------  NONE OBJC_CLASS         NSString
1   ----------  NONE OBJC_CLASS         NSObject
2   ----------  NONE OBJC_METACLASS     NSObject
3   ----------  NONE FUNC               _objc_empty_cache
4   0x100003f20 NONE FUNC               objc_alloc
5   0x100003f30 NONE FUNC               objc_alloc_init
6   0x100003f40 NONE FUNC               objc_autoreleasePoolPop
7   0x100003f50 NONE FUNC               objc_autoreleasePoolPush
8   ----------  NONE FUNC               objc_msgSend
vaddr       paddr      target      type   name                     
-------------------------------------------------------------------
0x100004000 0x00004000 0x100010008 SET_64 objc_alloc
0x100004008 0x00004008 0x100010010 SET_64 objc_alloc_init
0x100004010 0x00004010 0x100010018 SET_64 objc_autoreleasePoolPop
0x100004018 0x00004018 0x100010020 SET_64 objc_autoreleasePoolPush
0x100004020 0x00004020 0x100010028 SET_64 objc_msgSend
0x100004028 0x00004028 0x00000000  SET_64 
0x100008018 0x00008018 0x00000000  SET_64 
0x100008050 0x00008050 0x00000000  SET_64 
0x100008058 0x00008058 0x00000000  SET_64 
0x100008060 0x00008060 0x00000000  SET_64 
0x100008088 0x00008088 0x00000000  SET_64 
0x1000080a0 0x000080a0 0x00000000  SET_64 
0x1000080b8 0x000080b8 0x00000000  SET_64 
0x1000080c0 0x000080c0 0x00000000  SET_64 
0x1000080c8 0x000080c8 0x100010030 SET_64 NSString
0x1000080d8 0x000080d8 0x100010038 SET_64 NSObject
0x1000080e0 0x000080e0 0x100010038 SET_64 NSObject
0x1000080e8 0x000080e8 0x100010040 SET_64 _objc_empty_cache
0x1000080f8 0x000080f8 0x00000000  SET_64 
0x100008100 0x00008100 0x00000000  SET_64 
0x100008108 0x00008108 0x100010048 SET_64 NSObject
0x100008110 0x00008110 0x100010040 SET_64 _objc_empty_cache
0x100008120 0x00008120 0x00000000  SET_64 
0x1000080c0 0x0000000100008100   ........ @ section.13.__DATA.__objc_classrefs 4295000320 15.__DATA.__objc_data class Stub R 0x1000080d8
0x1000080c8 0x0000000100010030   0....... @ reloc.NSString 4295032880 NSString R 0x0
            ;-- section.13.__DATA.__objc_classrefs:
            0x1000080c0      .qword 0x0000000100008100 ; sym.class_Stub; RELOC 64  ; [13] -rw- section size 16 named 13.__DATA.__objc_classrefs
            ;-- NSString:
            0x1000080c8      .qword 0x0000000100010030 ; reloc.target.NSString; RELOC 64 NSString
address     min         max         name super    
--------------------------------------------------
0x1000080d8 0x1000080d8 0x1000080d8 Stub NSObject
EOF
RUN

NAME=mach0 arm64e chained imports
FILE=bins/mach0/imports-arm64e-chained
ARGS=-a arm -b 64
CMDS=<<EOF
ii
ir
pxr 0x10 @ section.13.__DATA.__objc_classrefs
pD 0x10 @ section.13.__DATA.__objc_classrefs
ic
EOF
EXPECT=<<EOF
nth vaddr       bind type           lib name                     
-----------------------------------------------------------------
0   0x100003f20 NONE FUNC               objc_alloc
1   0x100003f30 NONE FUNC               objc_alloc_init
2   0x100003f40 NONE FUNC               objc_autoreleasePoolPop
3   0x100003f50 NONE FUNC               objc_autoreleasePoolPush
4   ----------  NONE FUNC               objc_msgSend
5   ----------  NONE OBJC_CLASS         NSString
6   ----------  NONE FUNC               _objc_empty_cache
7   ----------  NONE OBJC_METACLASS     NSObject
8   ----------  NONE OBJC_CLASS         NSObject
vaddr       paddr      target      type   name                     
-------------------------------------------------------------------
0x100004000 0x00004000 0x100010008 SET_64 objc_alloc
0x100004008 0x00004008 0x100010010 SET_64 objc_alloc_init
0x100004010 0x00004010 0x100010018 SET_64 objc_autoreleasePoolPop
0x100004018 0x00004018 0x100010020 SET_64 objc_autoreleasePoolPush
0x100004020 0x00004020 0x100010028 SET_64 objc_msgSend
0x100004028 0x00004028 0x00000000  SET_64 
0x100008018 0x00008018 0x00000000  SET_64 
0x100008050 0x00008050 0x00000000  SET_64 
0x100008058 0x00008058 0x00000000  SET_64 
0x100008060 0x00008060 0x00000000  SET_64 
0x100008088 0x00008088 0x00000000  SET_64 
0x1000080a0 0x000080a0 0x00000000  SET_64 
0x1000080b8 0x000080b8 0x00000000  SET_64 
0x1000080c0 0x000080c0 0x00000000  SET_64 
0x1000080c8 0x000080c8 0x100010030 SET_64 NSString
0x1000080d8 0x000080d8 0x100010038 SET_64 NSObject
0x1000080e0 0x000080e0 0x100010038 SET_64 NSObject
0x1000080e8 0x000080e8 0x100010040 SET_64 _objc_empty_cache
0x1000080f8 0x000080f8 0x00000000  SET_64 
0x100008100 0x00008100 0x00000000  SET_64 
0x100008108 0x00008108 0x100010048 SET_64 NSObject
0x100008110 0x00008110 0x100010040 SET_64 _objc_empty_cache
0x100008120 0x00008120 0x00000000  SET_64 
0x1000080c0 0x0000000100008100   ........ @ section.13.__DATA.__objc_classrefs 4295000320 15.__DATA.__objc_data class Stub R 0x1000080d8
0x1000080c8 0x0000000100010030   0....... @ reloc.NSString 4295032880 NSString R 0x0
            ;-- section.13.__DATA.__objc_classrefs:
            0x1000080c0      .qword 0x0000000100008100 ; sym.class_Stub; RELOC 64  ; [13] -rw- section size 16 named 13.__DATA.__objc_classrefs
            ;-- NSString:
            0x1000080c8      .qword 0x0000000100010030 ; reloc.target.NSString; RELOC 64 NSString
address     min         max         name super    
--------------------------------------------------
0x1000080d8 0x1000080d8 0x1000080d8 Stub NSObject
EOF
RUN
