22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret
.section .text
.macro GENERATE_LOOKUP name notFound
\name:
cmpwi %r3, 0
beq- returnNilMethod
andi. %r0, %r3, 1
bne- .LtaggedPointer_\name
lwz %r5, 0(%r3)
lwz %r5, 32(%r5)
|
|
|
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret
.section .text
.macro GENERATE_LOOKUP name notFound
\name:
cmpwi %r3, 0
beq- .LreturnNilMethod
andi. %r0, %r3, 1
bne- .LtaggedPointer_\name
lwz %r5, 0(%r3)
lwz %r5, 32(%r5)
|
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
.endm
.macro GENERATE_LOOKUP_SUPER name lookup
\name:
mr %r5, %r3
lwz %r3, 0(%r3)
cmpwi %r3, 0
beq- returnNilMethod
lwz %r5, 4(%r5)
lwz %r5, 32(%r5)
b .Lmain_\lookup
.type \name, @function
.size \name, .-\name
.endm
GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound
GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret
GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup
GENERATE_LOOKUP_SUPER objc_msg_lookup_super_stret objc_msg_lookup_stret
returnNilMethod:
mflr %r0
bl getPC
mtlr %r0
0:
addi %r3, %r3, nilMethod-0b
blr
nilMethod:
li %r3, 0
blr
getPC:
mflr %r3
blr
#ifdef OF_PIC
.section .got2, "aw"
.Lbiased_got2 = .+0x8000
.Lgot_objc_methodNotFound:
|
|
|
|
|
|
|
|
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
.endm
.macro GENERATE_LOOKUP_SUPER name lookup
\name:
mr %r5, %r3
lwz %r3, 0(%r3)
cmpwi %r3, 0
beq- .LreturnNilMethod
lwz %r5, 4(%r5)
lwz %r5, 32(%r5)
b .Lmain_\lookup
.type \name, @function
.size \name, .-\name
.endm
GENERATE_LOOKUP objc_msg_lookup objc_methodNotFound
GENERATE_LOOKUP objc_msg_lookup_stret objc_methodNotFound_stret
GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup
GENERATE_LOOKUP_SUPER objc_msg_lookup_super_stret objc_msg_lookup_stret
.LreturnNilMethod:
mflr %r0
bl .LgetPC
mtlr %r0
0:
addi %r3, %r3, .LnilMethod-0b
blr
.LnilMethod:
li %r3, 0
blr
.LgetPC:
mflr %r3
blr
#ifdef OF_PIC
.section .got2, "aw"
.Lbiased_got2 = .+0x8000
.Lgot_objc_methodNotFound:
|