26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
96
97
98
99
100
101
|
\name:
cmpwi %r3, 0
beq- ret_nil
lwz %r5, 0(%r3)
lwz %r5, 32(%r5)
.main_\name:
#ifdef OF_SELUID24
lbz %r6, 1(%r4)
#endif
lbz %r7, 2(%r4)
lbz %r8, 3(%r4)
#ifdef OF_SELUID24
slwi %r6, %r6, 2
#endif
slwi %r7, %r7, 2
slwi %r8, %r8, 2
#ifdef OF_SELUID24
lwzx %r5, %r5, %r6
#endif
lwzx %r5, %r5, %r7
lwzx %r5, %r5, %r8
cmpwi %r5, 0
beq- .forward_\name
mr %r3, %r5
blr
.forward_\name:
b \not_found@plt
.type \name, %function
.size \name, .-\name
.endm
.macro generate_lookup_super name lookup
\name:
lwz %r5, 0(%r3)
cmpwi %r5, 0
beq- ret_nil
lwz %r5, 4(%r3)
lwz %r5, 32(%r5)
b .main_\lookup
.type \name, %function
.size \name, .-\name
.endm
generate_lookup objc_msg_lookup objc_method_not_found
generate_lookup objc_msg_lookup_stret objc_method_not_found_stret
generate_lookup_super objc_msg_lookup_super objc_msg_lookup
generate_lookup_super objc_msg_lookup_super_stret objc_msg_lookup_stret
ret_nil:
mflr %r0
bl get_pc
mtlr %r0
.L0:
addi %r3, %r3, nil_method-.L0
blr
nil_method:
li %r3, 0
blr
get_pc:
mflr %r3
blr
#ifdef __linux__
.section .note.GNU-stack, "", %progbits
#endif
|
|
|
<
>
|
|
|
|
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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
96
97
98
99
100
101
|
\name:
cmpwi %r3, 0
beq- ret_nil
lwz %r5, 0(%r3)
lwz %r5, 32(%r5)
.Lmain_\name:
#ifdef OF_SELUID24
lbz %r6, 1(%r4)
#endif
lbz %r7, 2(%r4)
lbz %r8, 3(%r4)
#ifdef OF_SELUID24
slwi %r6, %r6, 2
#endif
slwi %r7, %r7, 2
slwi %r8, %r8, 2
#ifdef OF_SELUID24
lwzx %r5, %r5, %r6
#endif
lwzx %r5, %r5, %r7
lwzx %r5, %r5, %r8
cmpwi %r5, 0
beq- 0f
mr %r3, %r5
blr
0:
b \not_found@plt
.type \name, %function
.size \name, .-\name
.endm
.macro generate_lookup_super name lookup
\name:
lwz %r5, 0(%r3)
cmpwi %r5, 0
beq- ret_nil
lwz %r5, 4(%r3)
lwz %r5, 32(%r5)
b .Lmain_\lookup
.type \name, %function
.size \name, .-\name
.endm
generate_lookup objc_msg_lookup objc_method_not_found
generate_lookup objc_msg_lookup_stret objc_method_not_found_stret
generate_lookup_super objc_msg_lookup_super objc_msg_lookup
generate_lookup_super objc_msg_lookup_super_stret objc_msg_lookup_stret
ret_nil:
mflr %r0
bl get_pc
mtlr %r0
0:
addi %r3, %r3, nil_method-0b
blr
nil_method:
li %r3, 0
blr
get_pc:
mflr %r3
blr
#ifdef __linux__
.section .note.GNU-stack, "", %progbits
#endif
|