60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
cmp r2, #0
beq \not_found(PLT)
mov r0, r2
bx lr
.Ltagged_pointer_\name:
ldr r3, .Lgot$indirect_.Ltagged_pointer_\name
ldr r2, .Lgot$indirect_.Ltagged_pointer_\name+4
add r3, pc, r3
and r0, r0, #0xE
lsl r0, r0, #1
ldr r2, [r3, r2]
ldr r2, [r2, r0]
ldr r2, [r2, #32]
b .Lmain_\name
.type \name, %function
.size \name, .-\name
.Lgot$indirect_.Ltagged_pointer_\name:
.long _GLOBAL_OFFSET_TABLE_-(.Ltagged_pointer_\name+16)
.long objc_tagged_pointer_classes(GOT)
.endm
.macro generate_lookup_super name lookup
\name:
mov r2, r0
ldr r0, [r0, #0]
|
<
|
|
>
>
>
>
>
|
|
|
>
|
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
cmp r2, #0
beq \not_found(PLT)
mov r0, r2
bx lr
.Ltagged_pointer_\name:
ldr r2, .Lgot$indirect_.Ltagged_pointer_\name
add r2, pc, r2
ldr r3, .Lgot$indirect_.Ltagged_pointer_\name+4
ldr r3, [r2, r3]
ldr r3, [r3]
eor r0, r0, r3
and r0, r0, #0xE
lsl r0, r0, #1
ldr r3, .Lgot$indirect_.Ltagged_pointer_\name+8
ldr r3, [r2, r3]
ldr r2, [r3, r0]
ldr r2, [r2, #32]
b .Lmain_\name
.type \name, %function
.size \name, .-\name
.Lgot$indirect_.Ltagged_pointer_\name:
.long _GLOBAL_OFFSET_TABLE_-(.Ltagged_pointer_\name+12)
.long objc_tagged_pointer_secret(GOT)
.long objc_tagged_pointer_classes(GOT)
.endm
.macro generate_lookup_super name lookup
\name:
mov r2, r0
ldr r0, [r0, #0]
|