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
|
ld $t0, 0($t0)
daddu $t0, $t0, $t3
ld $t0, 0($t0)
beqz $t0, 1f
move $v0, $t0
j $ra
0:
lui $v0, %hi(%neg(%gp_rel(\name)))
daddu $v0, $v0, $t9
daddiu $v0, $v0, %lo(%neg(%gp_rel(\name)))
ld $v0, %got_disp(nil_method)($v0)
j $ra
1:
daddiu $sp, $sp, -32
sd $gp, 16($sp)
lui $gp, %hi(%neg(%gp_rel(\name)))
daddu $gp, $gp, $t9
daddiu $gp, $gp, %lo(%neg(%gp_rel(\name)))
sd $ra, 24($sp)
jal \not_found
ld $ra, 24($sp)
ld $gp, 16($sp)
daddiu $sp, $sp, 32
j $ra
.type \name, %function
.size \name, .-\name
.endm
.macro generate_lookup_super name lookup
\name:
move $t0, $a0
|
|
|
<
<
|
|
|
<
<
|
<
<
<
<
|
|
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
|
ld $t0, 0($t0)
daddu $t0, $t0, $t3
ld $t0, 0($t0)
beqz $t0, 1f
move $v0, $t0
jr $ra
0:
lui $v0, %hi(%neg(%gp_rel(\name)))
daddu $v0, $v0, $t9
daddiu $v0, $v0, %lo(%neg(%gp_rel(\name)))
ld $v0, %got_disp(nil_method)($v0)
jr $ra
1:
lui $t0, %hi(%neg(%gp_rel(\name)))
daddu $t0, $t0, $t9
daddiu $t0, $t0, %lo(%neg(%gp_rel(\name)))
ld $t9, %got_disp(\not_found)($t0)
jr $t9
.type \name, %function
.size \name, .-\name
.endm
.macro generate_lookup_super name lookup
\name:
move $t0, $a0
|
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
b .Lmain_\lookup
0:
lui $v0, %hi(%neg(%gp_rel(\name)))
daddu $v0, $v0, $t9
daddiu $v0, $v0, %lo(%neg(%gp_rel(\name)))
ld $v0, %got_disp(nil_method)($v0)
j $ra
.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
nil_method:
move $v0, $zero
j $ra
#ifdef OF_LINUX
.section .note.GNU-stack, "", %progbits
#endif
|
|
|
|
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
b .Lmain_\lookup
0:
lui $v0, %hi(%neg(%gp_rel(\name)))
daddu $v0, $v0, $t9
daddiu $v0, $v0, %lo(%neg(%gp_rel(\name)))
ld $v0, %got_disp(nil_method)($v0)
jr $ra
.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
nil_method:
move $v0, $zero
jr $ra
#ifdef OF_LINUX
.section .note.GNU-stack, "", %progbits
#endif
|