ObjFW  Check-in [cb18f26404]

Overview
Comment:Use more local labels in assembly
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: cb18f264047599600ab230ebc0aa5400075599abc3ed0c2591fc5fee3b072ba5
User & Date: js on 2023-10-28 18:35:43
Other Links: manifest | tags
Context
2023-10-28
18:45
Remove unnecessary `short` from assembly check-in: 71d8f813ef user: js tags: trunk
18:35
Use more local labels in assembly check-in: cb18f26404 user: js tags: trunk
18:04
Move x86/Mach-O assembly to Intel syntax check-in: 18c524e13d user: js tags: trunk
Changes

Modified src/forwarding/apple-forwarding-amd64.S from [5acd78427e] to [51cce4e244].

31
32
33
34
35
36
37
38

39
40
41
42
43


44
45
46
47
48
49
50
31
32
33
34
35
36
37

38
39
40
41


42
43
44
45
46
47
48
49
50







-
+



-
-
+
+







	.att_syntax
	/* Use uppercase instruction to avoid recursion. */
	JMP	$0
	.intel_syntax noprefix
.endmacro

.section __TEXT, __objc_methname, cstring_literals
str_forwardingTargetForSelector_:
Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section __DATA, __objc_selrefs, literal_pointers, no_dead_strip
sel_forwardingTargetForSelector_:
	.quad str_forwardingTargetForSelector_
Lsel_forwardingTargetForSelector_:
	.quad Lstr_forwardingTargetForSelector_

.section __DATA, __objc_imageinfo, regular, no_dead_strip
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
_OFForward:
	push	rbp
67
68
69
70
71
72
73
74

75
76
77
78
79
80
81

82
83
84
85
86
87
88
67
68
69
70
71
72
73

74
75
76
77
78
79
80

81
82
83
84
85
86
87
88







-
+






-
+







	movaps	[rbp - 0xA0], xmm5
	movaps	[rbp - 0xB0], xmm6
	movaps	[rbp - 0xC0], xmm7

	call	_object_getClass

	mov	rdi, rax
	mov	rsi, [rip + sel_forwardingTargetForSelector_]
	mov	rsi, [rip + Lsel_forwardingTargetForSelector_]
	call	_class_respondsToSelector

	test	rax, rax
	jz	0f

	mov	rdi, [rbp - 0x10]
	mov	rsi, [rip + sel_forwardingTargetForSelector_]
	mov	rsi, [rip + Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x18]
	call	_objc_msgSend

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x10]
	je	0f
141
142
143
144
145
146
147
148

149
150
151
152
153
154

155
156
157
158
159
160
161
141
142
143
144
145
146
147

148
149
150
151
152
153

154
155
156
157
158
159
160
161







-
+





-
+







	movaps	[rbp - 0xB0], xmm6
	movaps	[rbp - 0xC0], xmm7

	mov	rdi, rsi
	call	_object_getClass

	mov	rdi, rax
	mov	rsi, [rip + sel_forwardingTargetForSelector_]
	mov	rsi, [rip + Lsel_forwardingTargetForSelector_]
	call	_class_respondsToSelector
	test	rax, rax
	jz	0f

	mov	rdi, [rbp - 0x18]
	mov	rsi, [rip + sel_forwardingTargetForSelector_]
	mov	rsi, [rip + Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x20]
	call	_objc_msgSend

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x18]
	je	0f

Modified src/forwarding/apple-forwarding-arm.S from [3ab429edb9] to [2386bdcec6].

15
16
17
18
19
20
21
22

23
24
25
26

27
28
29
30
31
32
33
34
35
36
37
38
39

40
41
42
43
44
45
46
15
16
17
18
19
20
21

22
23
24
25

26
27
28
29
30
31
32
33
34
35
36
37
38

39
40
41
42
43
44
45
46







-
+



-
+












-
+








#include "config.h"

.globl _OFForward
.globl _OFForward_stret

.section __TEXT, __objc_methname, cstring_literals
str_forwardingTargetForSelector_:
Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section __DATA, __objc_selrefs, literal_pointers, no_dead_strip
sel_forwardingTargetForSelector_:
Lsel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_

.section __DATA, __objc_imageinfo, regular, no_dead_strip
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
.arm
.align 2
_OFForward:
	stmfd	sp!, {r0-r4, lr}
	vstmdb	sp!, {d0-d7}

	ldr	r4, sel_forwardingTargetForSelector_$indirect_L0
	ldr	r4, Lsel_forwardingTargetForSelector_$indirect_L0
L0:
	ldr	r4, [pc, r4]

	blx	_object_getClass

	mov	r1, r4
	blx	_class_respondsToSelector
67
68
69
70
71
72
73
74
75


76
77
78
79
80
81
82
83

84
85
86
87
88
89
90
67
68
69
70
71
72
73


74
75
76
77
78
79
80
81
82

83
84
85
86
87
88
89
90







-
-
+
+







-
+








0:
	vldmia	sp!, {d0-d7}
	ldmfd	sp!, {r0-r4, lr}
	b	_OFMethodNotFound

.data_region
sel_forwardingTargetForSelector_$indirect_L0:
	.long sel_forwardingTargetForSelector_-(L0+8)
Lsel_forwardingTargetForSelector_$indirect_L0:
	.long Lsel_forwardingTargetForSelector_-(L0+8)
.end_data_region

.align 2
_OFForward_stret:
	stmfd	sp!, {r0-r4, lr}
	vstmdb	sp!, {d0-d7}

	ldr	r4, sel_forwardingTargetForSelector_$indirect_L1
	ldr	r4, Lsel_forwardingTargetForSelector_$indirect_L1
L1:
	ldr	r4, [pc, r4]

	mov	r0, r1
	blx	_object_getClass

	mov	r1, r4
115
116
117
118
119
120
121
122
123


124
115
116
117
118
119
120
121


122
123
124







-
-
+
+


0:
	vldmia	sp!, {d0-d7}
	ldmfd	sp!, {r0-r4, lr}
	b	_OFMethodNotFound_stret

.data_region
sel_forwardingTargetForSelector_$indirect_L1:
	.long sel_forwardingTargetForSelector_-(L1+8)
Lsel_forwardingTargetForSelector_$indirect_L1:
	.long Lsel_forwardingTargetForSelector_-(L1+8)
.end_data_region

Modified src/forwarding/apple-forwarding-arm64.S from [63e754588e] to [f4650e9fb4].

15
16
17
18
19
20
21
22

23
24
25
26
27


28
29
30
31
32
33
34
15
16
17
18
19
20
21

22
23
24
25


26
27
28
29
30
31
32
33
34







-
+



-
-
+
+








#include "config.h"

.globl _OFForward
.globl _OFForward_stret

.section __TEXT, __objc_methname, cstring_literals
str_forwardingTargetForSelector_:
Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section __DATA, __objc_selrefs, literal_pointers, no_dead_strip
sel_forwardingTargetForSelector_:
	.quad str_forwardingTargetForSelector_
Lsel_forwardingTargetForSelector_:
	.quad Lstr_forwardingTargetForSelector_

.section __DATA, __objc_imageinfo, regular, no_dead_strip
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
.align 2
_OFForward:
48
49
50
51
52
53
54
55
56


57
58
59
60
61
62
63
48
49
50
51
52
53
54


55
56
57
58
59
60
61
62
63







-
-
+
+







	stp	q0, q1, [sp, #80]
	stp	q2, q3, [sp, #112]
	stp	q4, q5, [sp, #144]
	stp	q6, q7, [sp, #176]

	bl	_object_getClass

	adrp	x19, sel_forwardingTargetForSelector_@PAGE
	add	x19, x19, sel_forwardingTargetForSelector_@PAGEOFF
	adrp	x19, Lsel_forwardingTargetForSelector_@PAGE
	add	x19, x19, Lsel_forwardingTargetForSelector_@PAGEOFF
	ldr	x19, [x19]

	mov	x1, x19
	bl	_class_respondsToSelector

	cbz	x0, 0f

Modified src/forwarding/apple-forwarding-powerpc.S from [d8e9e96515] to [01c664deae].

15
16
17
18
19
20
21
22

23
24
25
26
27


28
29
30
31
32
33
34
15
16
17
18
19
20
21

22
23
24
25


26
27
28
29
30
31
32
33
34







-
+



-
-
+
+








#include "config.h"

.globl _OFForward
.globl _OFForward_stret

.section __TEXT, __cstring, cstring_literals
str_forwardingTargetForSelector_:
Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section __OBJC, __message_refs
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_
Lsel_forwardingTargetForSelector_:
	.long Lstr_forwardingTargetForSelector_

.section __OBJC, __image_info
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
_OFForward:
	mflr	r0
67
68
69
70
71
72
73
74
75


76
77
78
79
80
81
82
67
68
69
70
71
72
73


74
75
76
77
78
79
80
81
82







-
-
+
+







	stfd	f13, 184(r1)

	bl	_object_getClass

	bl	0f
0:
	mflr	r13
	addis	r13, r13, ha16(sel_forwardingTargetForSelector_-0b)
	lwz	r13, lo16(sel_forwardingTargetForSelector_-0b)(r13)
	addis	r13, r13, ha16(Lsel_forwardingTargetForSelector_-0b)
	lwz	r13, lo16(Lsel_forwardingTargetForSelector_-0b)(r13)

	mr	r4, r13
	bl	_class_respondsToSelector

	cmpwi	r3, 0
	beq-	0f

170
171
172
173
174
175
176
177
178


179
180
181
182
183
184
185
170
171
172
173
174
175
176


177
178
179
180
181
182
183
184
185







-
-
+
+








	mr	r3, r4
	bl	_object_getClass

	bl	0f
0:
	mflr	r13
	addis	r13, r13, ha16(sel_forwardingTargetForSelector_-0b)
	lwz	r13, lo16(sel_forwardingTargetForSelector_-0b)(r13)
	addis	r13, r13, ha16(Lsel_forwardingTargetForSelector_-0b)
	lwz	r13, lo16(Lsel_forwardingTargetForSelector_-0b)(r13)

	mr	r4, r13
	bl	_class_respondsToSelector

	cmpwi	r3, 0
	beq-	0f

Modified src/forwarding/apple-forwarding-x86.S from [c3da6554d1] to [fe22007392].

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
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







-
+



-
-
+
+












-
+







-
+








-
+







	.att_syntax
	/* Use uppercase instruction to avoid recursion. */
	JMP	$0
	.intel_syntax noprefix
.endmacro

.section __TEXT, __cstring, cstring_literals
str_forwardingTargetForSelector_:
Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section __OBJC, __message_refs, literal_pointers, no_dead_strip
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_
Lsel_forwardingTargetForSelector_:
	.long Lstr_forwardingTargetForSelector_

.section __OBJC, __image_info
	.long 0, 0

.section __TEXT, __text, regular, pure_instructions
_OFForward:
	push	ebp
	mov	ebp, esp

	push	ebx
	sub	esp, 20

	call	getEIP
	call	LgetEIP
0:

	mov	eax, [ebp + 8]
	mov	[esp], eax
	call	_object_getClass

	mov	[esp], eax
	mov	eax, [ebx + sel_forwardingTargetForSelector_ - 0b]
	mov	eax, [ebx + Lsel_forwardingTargetForSelector_ - 0b]
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	mov	eax, [ebx + sel_forwardingTargetForSelector_ - 0b]
	mov	eax, [ebx + Lsel_forwardingTargetForSelector_ - 0b]
	mov	[esp + 4], eax
	mov	eax, [ebp + 12]
	mov	[esp + 8], eax
	call	_objc_msgSend

	test	eax, eax
	jz	0f
99
100
101
102
103
104
105
106

107
108
109
110
111
112
113
114

115
116
117
118
119
120
121
122
123

124
125
126
127
128
129
130
99
100
101
102
103
104
105

106
107
108
109
110
111
112
113

114
115
116
117
118
119
120
121
122

123
124
125
126
127
128
129
130







-
+







-
+








-
+







_OFForward_stret:
	push	ebp
	mov	ebp, esp

	push	ebx
	sub	esp, 20

	call	getEIP
	call	LgetEIP
0:

	mov	eax, [ebp + 12]
	mov	[esp], eax
	call	_object_getClass

	mov	[esp], eax
	mov	eax, [ebx + sel_forwardingTargetForSelector_ - 0b]
	mov	eax, [ebx + Lsel_forwardingTargetForSelector_ - 0b]
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	mov	eax, [ebx + sel_forwardingTargetForSelector_ - 0b]
	mov	eax, [ebx + Lsel_forwardingTargetForSelector_ - 0b]
	mov	[esp + 4], eax
	mov	eax, [ebp + 16]
	mov	[esp + 8], eax
	call	_objc_msgSend

	test	eax, eax
	jz	0f
142
143
144
145
146
147
148
149

150
151
142
143
144
145
146
147
148

149
150
151







-
+


0:
	add	esp, 20
	pop	ebx
	pop	ebp

	jmp	_OFMethodNotFound_stret

getEIP:
LgetEIP:
	mov	ebx, [esp]
	ret

Modified src/forwarding/forwarding-amd64-elf.S from [6b28668374] to [60cb5f07a9].

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
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







-
+






-
+



-
+







	movaps	[rbp - 0xA0], xmm5
	movaps	[rbp - 0xB0], xmm6
	movaps	[rbp - 0xC0], xmm7

	call	object_getClass@PLT

	mov	rdi, rax
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector@PLT

	test	rax, rax
	jz	short 0f

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup@PLT

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x18]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x10]
	je	short 0f
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
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







-
+






-
+



-
+







	movaps	[rbp - 0xB0], xmm6
	movaps	[rbp - 0xC0], xmm7

	mov	rdi, rsi
	call	object_getClass@PLT

	mov	rdi, rax
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector@PLT

	test	rax, rax
	jz	short 0f

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup@PLT

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + .Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x20]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x18]
	je	short 0f
191
192
193
194
195
196
197
198
199


200
201
202
203
204
205
206
207

208
209
210

211
212
213
214
215


216
217
218


219
220
221
222
223


224
225
226
227
191
192
193
194
195
196
197


198
199
200
201
202
203
204
205
206

207
208
209

210
211
212
213


214
215
216


217
218
219
220
221


222
223
224
225
226
227







-
-
+
+







-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+




	mov	rsp, rbp
	pop	rbp

	jmp	OFMethodNotFound_stret@PLT
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
	lea	rdi, [rip + module]
.Linit:
	lea	rdi, [rip + .Lmodule]
	jmp	__objc_exec_class@PLT

#ifdef OF_SOLARIS
.section .init_array, "aw"
#else
.section .ctors, "aw", %progbits
#endif
	.quad init
	.quad .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.quad str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.quad .Lstr_forwardingTargetForSelector_, 0
	.quad 0, 0
symtab:
	.quad 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.quad 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.quad 0
module:
	.quad 8, 32, 0, symtab
.Lmodule:
	.quad 8, 32, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-amd64-macho.S from [0969f9a066] to [197daf8bf7].

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
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







-
+






-
+



-
+







	movaps	[rbp - 0xA0], xmm5
	movaps	[rbp - 0xB0], xmm6
	movaps	[rbp - 0xC0], xmm7

	call	_object_getClass

	mov	rdi, rax
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + Lsel_forwardingTargetForSelector_]
	call	_class_respondsToSelector

	test	rax, rax
	jz	0f

	mov	rdi, [rbp - 0x10]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + Lsel_forwardingTargetForSelector_]
	call	_objc_msg_lookup

	movq	rdi, [rbp - 0x10]
	leaq	rsi, [rip + sel_forwardingTargetForSelector_]
	leaq	rsi, [rip + Lsel_forwardingTargetForSelector_]
	movq	rdx, [rbp - 0x18]
	call	*%rax

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x10]
	je	0f
142
143
144
145
146
147
148
149

150
151
152
153
154
155
156

157
158
159
160

161
162
163
164
165
166
167
142
143
144
145
146
147
148

149
150
151
152
153
154
155

156
157
158
159

160
161
162
163
164
165
166
167







-
+






-
+



-
+







	movaps	[rbp - 0xB0], xmm6
	movaps	[rbp - 0xC0], xmm7

	mov	rdi, rsi
	call	_object_getClass

	mov	rdi, rax
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + Lsel_forwardingTargetForSelector_]
	call	_class_respondsToSelector

	test	rax, rax
	jz	0f

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + Lsel_forwardingTargetForSelector_]
	call	_objc_msg_lookup

	mov	rdi, [rbp - 0x18]
	lea	rsi, [rip + sel_forwardingTargetForSelector_]
	lea	rsi, [rip + Lsel_forwardingTargetForSelector_]
	mov	rdx, [rbp - 0x20]
	call	*%rax

	test	rax, rax
	jz	0f
	cmp	rax, [rbp - 0x18]
	je	0f
201
202
203
204
205
206
207
208
209


210
211
212
213

214
215
216

217
218
219
220
221


222
223
224


225
226
227
228
229


201
202
203
204
205
206
207


208
209
210
211
212

213
214
215

216
217
218
219


220
221
222


223
224
225
226
227


228
229







-
-
+
+



-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+
	mov	rdx, [rbp - 0x20]

	mov	rsp, rbp
	pop	rbp

	jmp	_OFMethodNotFound_stret

init:
	lea	rdi, [rip + module]
Linit:
	lea	rdi, [rip + Lmodule]
	jmp	___objc_exec_class

.section __DATA, __mod_init_func, mod_init_funcs
	.quad init
	.quad Linit

.section __TEXT, __cstring, cstring_literals
str_forwardingTargetForSelector_:
Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section __DATA, __data
sel_forwardingTargetForSelector_:
	.quad str_forwardingTargetForSelector_, 0
Lsel_forwardingTargetForSelector_:
	.quad Lstr_forwardingTargetForSelector_, 0
	.quad 0, 0
symtab:
	.quad 0, sel_forwardingTargetForSelector_
Lsymtab:
	.quad 0, Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.quad 0
module:
	.quad 8, 32, 0, symtab
Lmodule:
	.quad 8, 32, 0, Lsymtab

Modified src/forwarding/forwarding-amd64-win64.S from [66e90d878f] to [bb16226b9b].

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
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







-
+






-
+



-
+







	movaps	[rbp - 0x70], xmm1
	movaps	[rbp - 0x80], xmm2
	movaps	[rbp - 0x90], xmm3

	call	object_getClass

	mov	rcx, rax
	lea	rdx, [rip + sel_forwardingTargetForSelector_]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector

	test	rax, rax
	jz	short 0f

	mov	rcx, [rbp - 0x30]
	lea	rdx, [rip + sel_forwardingTargetForSelector_]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup

	mov	rcx, [rbp - 0x30]
	lea	rdx, [rip + sel_forwardingTargetForSelector_]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	mov	r8, [rbp - 0x38]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x30]
	je	short 0f
112
113
114
115
116
117
118
119

120
121
122
123
124
125
126

127
128
129
130

131
132
133
134
135
136
137
112
113
114
115
116
117
118

119
120
121
122
123
124
125

126
127
128
129

130
131
132
133
134
135
136
137







-
+






-
+



-
+







	movaps	[rbp - 0x80], xmm2
	movaps	[rbp - 0x90], xmm3

	mov	rcx, rdx
	call	object_getClass

	mov	rcx, rax
	lea	rdx, [rip + sel_forwardingTargetForSelector_]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	class_respondsToSelector

	test	rax, rax
	jz	short 0f

	mov	rcx, [rbp - 0x38]
	lea	rdx, [rip + sel_forwardingTargetForSelector_]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	call	objc_msg_lookup

	mov	rcx, [rbp - 0x38]
	lea	rdx, [rip + sel_forwardingTargetForSelector_]
	lea	rdx, [rip + .Lsel_forwardingTargetForSelector_]
	mov	r8, [rbp - 0x40]
	call	rax

	test	rax, rax
	jz	short 0f
	cmp	rax, [rbp - 0x38]
	je	short 0f
169
170
171
172
173
174
175
176
177


178
179
180
181

182
183
184

185
186
187
188
189


190
191

192
193

194
195
196
197

198
199

169
170
171
172
173
174
175


176
177
178
179
180

181
182
183

184
185
186
187


188
189
190

191
192

193
194
195
196

197
198

199







-
-
+
+



-
+


-
+



-
-
+
+

-
+

-
+



-
+

-
+

	jmp	OFMethodNotFound_stret
.def OFForward_stret
.scl 2
.type 32
.endef

init:
	lea	rcx, [rip + module]
.Linit:
	lea	rcx, [rip + .Lmodule]
	jmp	__objc_exec_class

.section .ctors, "aw"
	.quad init
	.quad .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.quad str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.quad .Lstr_forwardingTargetForSelector_, 0
	.quad 0, 0
symtab:
.Lsymtab:
	.long 0, 0
	.quad sel_forwardingTargetForSelector_
	.quad .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.quad 0
module:
.Lmodule:
	.long 8, 32
	.quad 0, symtab
	.quad 0, .Lsymtab

Modified src/forwarding/forwarding-arm-elf.S from [594651911a] to [cb34b0f842].

27
28
29
30
31
32
33
34

35
36
37
38
39
40
41
27
28
29
30
31
32
33

34
35
36
37
38
39
40
41







-
+







.section .text
OFForward:
#ifdef HAVE_VFP2
	vstmdb	sp!, {d0-d7}
#endif
	stmfd	sp!, {r0-r4, lr}

	ldr	r4, sel_forwardingTargetForSelector_$indirect_.L0
	ldr	r4, .Lsel_forwardingTargetForSelector_$indirect_.L0
.L0:
	add	r4, pc

	bl	object_getClass(PLT)

	mov	r1, r4
	bl	class_respondsToSelector(PLT)
82
83
84
85
86
87
88
89

90
91
92
93
94
95
96
82
83
84
85
86
87
88

89
90
91
92
93
94
95
96







-
+








OFForward_stret:
#ifdef HAVE_VFP2
	vstmdb	sp!, {d0-d7}
#endif
	stmfd	sp!, {r0-r4, lr}

	ldr	r4, sel_forwardingTargetForSelector_$indirect_.L1
	ldr	r4, .Lsel_forwardingTargetForSelector_$indirect_.L1
.L1:
	add	r4, pc

	mov	r0, r1
	bl	object_getClass(PLT)

	mov	r1, r4
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


162
163
164


165
166
167
168
169


170
171
172
173
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
162


163
164
165
166
167


168
169
170
171
172
173







-
-
+
+




-
-
-
-
-
-
+
+
+
+
+
+


-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+




#ifdef HAVE_VFP2
	vldmia	sp!, {d0-d7}
#endif
	b	OFMethodNotFound_stret(PLT)
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
	ldr	r0, module$indirect_.L2
.Linit:
	ldr	r0, .Lmodule$indirect_.L2
.L2:
	add	r0, pc
	b	__objc_exec_class(PLT)

sel_forwardingTargetForSelector_$indirect_.L0:
	.long sel_forwardingTargetForSelector_-(.L0+8)
sel_forwardingTargetForSelector_$indirect_.L1:
	.long sel_forwardingTargetForSelector_-(.L1+8)
module$indirect_.L2:
	.long module-(.L2+8)
.Lsel_forwardingTargetForSelector_$indirect_.L0:
	.long .Lsel_forwardingTargetForSelector_-(.L0+8)
.Lsel_forwardingTargetForSelector_$indirect_.L1:
	.long .Lsel_forwardingTargetForSelector_-(.L1+8)
.Lmodule$indirect_.L2:
	.long .Lmodule-(.L2+8)

.section .init_array, "aw", %init_array
	.long init
	.long .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.long .Lstr_forwardingTargetForSelector_, 0
	.long 0, 0
symtab:
	.long 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.long 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.long 0
module:
	.long 8, 16, 0, symtab
.Lmodule:
	.long 8, 16, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-arm64-elf.S from [0aaed32730] to [3a26ad261d].

38
39
40
41
42
43
44
45
46


47
48
49
50
51
52
53
38
39
40
41
42
43
44


45
46
47
48
49
50
51
52
53







-
-
+
+







	stp	q0, q1, [sp, #80]
	stp	q2, q3, [sp, #112]
	stp	q4, q5, [sp, #144]
	stp	q6, q7, [sp, #176]

	bl	object_getClass

	adrp	x19, sel_forwardingTargetForSelector_
	add	x19, x19, :lo12:sel_forwardingTargetForSelector_
	adrp	x19, .Lsel_forwardingTargetForSelector_
	add	x19, x19, :lo12:.Lsel_forwardingTargetForSelector_

	mov	x1, x19
	bl	class_respondsToSelector

	cbz	x0, 0f

	ldr	x0, [sp]
98
99
100
101
102
103
104
105
106
107



108
109
110
111

112
113
114

115
116
117
118
119


120
121
122


123
124
125
126
127


128
129
130
131
98
99
100
101
102
103
104



105
106
107
108
109
110

111
112
113

114
115
116
117


118
119
120


121
122
123
124
125


126
127
128
129
130
131







-
-
-
+
+
+



-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+





	b	OFMethodNotFound
.type OFForward, %function
.size OFForward, .-OFForward
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
	adrp	x0, module
	add	x0, x0, :lo12:module
.Linit:
	adrp	x0, .Lmodule
	add	x0, x0, :lo12:.Lmodule
	b	__objc_exec_class

.section .init_array, "aw", %init_array
	.xword init
	.xword .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.xword str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.xword .Lstr_forwardingTargetForSelector_, 0
	.xword 0, 0
symtab:
	.xword 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.xword 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 4
	.xword 0
module:
	.xword 8, 32, 0, symtab
.Lmodule:
	.xword 8, 32, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-mips-elf.S from [27b4e12fcc] to [073f3a69c2].

78
79
80
81
82
83
84
85

86
87

88
89

90
91
92
93
94
95
96
78
79
80
81
82
83
84

85
86

87
88

89
90
91
92
93
94
95
96







-
+

-
+

-
+







	swc1	$f17, 80($sp)
	swc1	$f18, 84($sp)
	swc1	$f19, 88($sp)
#endif

	move	$s0, $gp
#ifdef OF_PIC
	lw	$s1, %got(sel_forwardingTargetForSelector_)($gp)
	lw	$s1, %got(.Lsel_forwardingTargetForSelector_)($gp)
#else
	lui	$s1, %hi(sel_forwardingTargetForSelector_)
	lui	$s1, %hi(.Lsel_forwardingTargetForSelector_)
#endif
	addiu	$s1, $s1, %lo(sel_forwardingTargetForSelector_)
	addiu	$s1, $s1, %lo(.Lsel_forwardingTargetForSelector_)

	jal_pic	object_getClass

	move	$gp, $s0
	move	$a0, $v0
	move	$a1, $s1
	jal_pic	class_respondsToSelector
202
203
204
205
206
207
208
209

210
211

212
213

214
215
216
217
218
219
220
202
203
204
205
206
207
208

209
210

211
212

213
214
215
216
217
218
219
220







-
+

-
+

-
+







	swc1	$f17, 80($sp)
	swc1	$f18, 84($sp)
	swc1	$f19, 88($sp)
#endif

	move	$s0, $gp
#ifdef OF_PIC
	lw	$s1, %got(sel_forwardingTargetForSelector_)($gp)
	lw	$s1, %got(.Lsel_forwardingTargetForSelector_)($gp)
#else
	lui	$s1, %hi(sel_forwardingTargetForSelector_)
	lui	$s1, %hi(.Lsel_forwardingTargetForSelector_)
#endif
	addiu	$s1, $s1, %lo(sel_forwardingTargetForSelector_)
	addiu	$s1, $s1, %lo(.Lsel_forwardingTargetForSelector_)

	move	$a0, $a1
	jal_pic	object_getClass

	move	$gp, $s0
	move	$a0, $v0
	move	$a1, $s1
285
286
287
288
289
290
291
292

293
294
295
296
297
298
299


300
301
302
303
304


305
306
307
308
309

310
311
312

313
314
315
316
317


318
319
320


321
322
323
324
325


326
327
328
329
285
286
287
288
289
290
291

292
293
294
295
296
297


298
299
300
301
302


303
304
305
306
307
308

309
310
311

312
313
314
315


316
317
318


319
320
321
322
323


324
325
326
327
328
329







-
+





-
-
+
+



-
-
+
+




-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+





	addiu	$sp, $sp, 96

	j_pic	of_method_not_found_stret
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
.Linit:
#ifdef OF_PIC
	lui	$gp, %hi(_gp_disp)
	addiu	$gp, $gp, %lo(_gp_disp)
	addu	$gp, $gp, $t9

	lw	$a0, %got(module)($gp)
	addiu	$a0, $a0, %lo(module)
	lw	$a0, %got(.Lmodule)($gp)
	addiu	$a0, $a0, %lo(.Lmodule)
	lw	$t9, %call16(__objc_exec_class)($gp)
	jr	$t9
#else
	lui	$a0, %hi(module)
	addiu	$a0, $a0, %lo(module)
	lui	$a0, %hi(.Lmodule)
	addiu	$a0, $a0, %lo(.Lmodule)
	j	__objc_exec_class
#endif

.section .ctors, "aw", %progbits
	.long init
	.long .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.long .Lstr_forwardingTargetForSelector_, 0
	.long 0, 0
symtab:
	.long 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.long 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.long 0
module:
	.long 8, 16, 0, symtab
.Lmodule:
	.long 8, 16, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-powerpc-elf.S from [22c25e7609] to [6d0e0a93e0].

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
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







-
-
+
+











-
-
+
+








-
-
+
+







	bl	object_getClass+0x8000@plt

	lwz	%r4, .Lgot_sel_forwardingTargetForSelector_-.Lbiased_got2(%r30)
	bl	class_respondsToSelector+0x8000@plt
#else
	bl	object_getClass

	lis	%r4, sel_forwardingTargetForSelector_@ha
	la	%r4, sel_forwardingTargetForSelector_@l(%r4)
	lis	%r4, .Lsel_forwardingTargetForSelector_@ha
	la	%r4, .Lsel_forwardingTargetForSelector_@l(%r4)
	bl	class_respondsToSelector
#endif

	cmpwi	%r3, 0
	beq-	0f

	lwz	%r3, 8(%r1)
#ifdef OF_PIC
	lwz	%r4, .Lgot_sel_forwardingTargetForSelector_-.Lbiased_got2(%r30)
	bl	objc_msg_lookup+0x8000@plt
#else
	lis	%r4, sel_forwardingTargetForSelector_@ha
	la	%r4, sel_forwardingTargetForSelector_@l(%r4)
	lis	%r4, .Lsel_forwardingTargetForSelector_@ha
	la	%r4, .Lsel_forwardingTargetForSelector_@l(%r4)
	bl	objc_msg_lookup
#endif
	mtctr	%r3

	lwz	%r3, 8(%r1)
#ifdef OF_PIC
	lwz	%r4, .Lgot_sel_forwardingTargetForSelector_-.Lbiased_got2(%r30)
#else
	lis	%r4, sel_forwardingTargetForSelector_@ha
	la	%r4, sel_forwardingTargetForSelector_@l(%r4)
	lis	%r4, .Lsel_forwardingTargetForSelector_@ha
	la	%r4, .Lsel_forwardingTargetForSelector_@l(%r4)
#endif
	lwz	%r5, 12(%r1)
	bctrl

	cmpwi	%r3, 0
	beq-	0f
	lwz	%r4, 8(%r1)
197
198
199
200
201
202
203
204
205


206
207
208
209
210
211
212
213
214
215
216
217
218


219
220
221
222
223
224
225
226
227
228


229
230
231
232
233
234
235
197
198
199
200
201
202
203


204
205
206
207
208
209
210
211
212
213
214
215
216


217
218
219
220
221
222
223
224
225
226


227
228
229
230
231
232
233
234
235







-
-
+
+











-
-
+
+








-
-
+
+







	bl	object_getClass+0x8000@plt

	lwz	%r4, .Lgot_sel_forwardingTargetForSelector_-.Lbiased_got2(%r30)
	bl	class_respondsToSelector+0x8000@plt
#else
	bl	object_getClass

	lis	%r4, sel_forwardingTargetForSelector_@ha
	la	%r4, sel_forwardingTargetForSelector_@l(%r4)
	lis	%r4, .Lsel_forwardingTargetForSelector_@ha
	la	%r4, .Lsel_forwardingTargetForSelector_@l(%r4)
	bl	class_respondsToSelector
#endif

	cmpwi	%r3, 0
	beq-	0f

	lwz	%r3, 12(%r1)
#ifdef OF_PIC
	lwz	%r4, .Lgot_sel_forwardingTargetForSelector_-.Lbiased_got2(%r30)
	bl	objc_msg_lookup+0x8000@plt
#else
	lis	%r4, sel_forwardingTargetForSelector_@ha
	la	%r4, sel_forwardingTargetForSelector_@l(%r4)
	lis	%r4, .Lsel_forwardingTargetForSelector_@ha
	la	%r4, .Lsel_forwardingTargetForSelector_@l(%r4)
	bl	objc_msg_lookup
#endif
	mtctr	%r3

	lwz	%r3, 12(%r1)
#ifdef OF_PIC
	lwz	%r4, .Lgot_sel_forwardingTargetForSelector_-.Lbiased_got2(%r30)
#else
	lis	%r4, sel_forwardingTargetForSelector_@ha
	la	%r4, sel_forwardingTargetForSelector_@l(%r4)
	lis	%r4, .Lsel_forwardingTargetForSelector_@ha
	la	%r4, .Lsel_forwardingTargetForSelector_@l(%r4)
#endif
	lwz	%r5, 16(%r1)
	bctrl

	cmpwi	%r3, 0
	beq-	0f
	lwz	%r4, 12(%r1)
293
294
295
296
297
298
299
300

301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319


320
321
322
323
324
325
326
327
328
329

330
331
332

333
334
335
336
337


338
339
340


341
342
343
344
345


346
347
348
349
350
351

352
353

354
355
356
357
358
359
360
361
362
293
294
295
296
297
298
299

300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317


318
319
320
321
322
323
324
325
326
327
328

329
330
331

332
333
334
335


336
337
338


339
340
341
342
343


344
345
346
347
348
349
350

351
352

353
354
355
356
357
358
359
360
361
362







-
+

















-
-
+
+









-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+





-
+

-
+









	bctr
#else
	b	OFMethodNotFound_stret
#endif
.type OFForward_stret, @function
.size OFForward_stret, .-OFForward_stret

init:
.Linit:
	stwu	%r1, -16(%r1)
	mflr	%r0
	stw	%r0, 20(%r1)
#ifdef OF_PIC
	stw	%r30, 8(%r1)

	bl	0f
0:
	mflr	%r30
	addis	%r30, %r30, .Lbiased_got2-0b@ha
	addi	%r30, %r30, .Lbiased_got2-0b@l

	lwz	%r3, .Lgot_module-.Lbiased_got2(%r30)
	bl	__objc_exec_class+0x8000@plt

	lwz	%r30, 8(%r1)
#else
	lis	%r3, module@ha
	la	%r3, module@l(%r3)
	lis	%r3, .Lmodule@ha
	la	%r3, .Lmodule@l(%r3)
	bl	__objc_exec_class
#endif

	lwz	%r0, 20(%r1)
	addi	%r1, %r1, 16
	mtlr	%r0
	blr

.section .ctors, "aw", @progbits
	.long init
	.long .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.long .Lstr_forwardingTargetForSelector_, 0
	.long 0, 0
symtab:
	.long 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.long 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.long 0
module:
	.long 8, 16, 0, symtab
.Lmodule:
	.long 8, 16, 0, .Lsymtab

#ifdef OF_PIC
.section .got2, "aw"
.Lbiased_got2 = .+0x8000
.Lgot_module:
	.long module
	.long .Lmodule
.Lgot_sel_forwardingTargetForSelector_:
	.long sel_forwardingTargetForSelector_
	.long .Lsel_forwardingTargetForSelector_
.Lgot_OFMethodNotFound:
	.long OFMethodNotFound
.Lgot_OFMethodNotFound_stret:
	.long OFMethodNotFound_stret
#endif

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", @progbits
#endif

Modified src/forwarding/forwarding-sparc-elf.S from [40522bfc56] to [a31829b32d].

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
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







-
-
+
+










-
-
+
+








-
-
+
+







	 add	%l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7
#endif

	mov	%i0, %o0
	call	object_getClass
	 nop

	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
#ifdef OF_PIC
	ld	[%l7 + %o1], %o1
#endif
	call	class_respondsToSelector
	 nop

	cmp	%o0, 0
	be	0f

	 mov	%i0, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
#ifdef OF_PIC
	ld	[%l7 + %o1], %o1
#endif
	call	objc_msg_lookup
	 nop
	mov	%o0, %l0

	mov	%i0, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
#ifdef OF_PIC
	ld	[%l7 + %o1], %o1
#endif
	jmpl	%l0, %o7
	 mov	%i1, %o2

	cmp	%o0, 0
91
92
93
94
95
96
97
98
99


100
101
102
103
104
105
106
107
108
109
110
111


112
113
114
115
116
117
118
119
120
121


122
123
124
125
126
127
128
91
92
93
94
95
96
97


98
99
100
101
102
103
104
105
106
107
108
109


110
111
112
113
114
115
116
117
118
119


120
121
122
123
124
125
126
127
128







-
-
+
+










-
-
+
+








-
-
+
+







	 add	%l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7
#endif

	mov	%i1, %o0
	call	object_getClass
	 nop

	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
#ifdef OF_PIC
	ld	[%l7 + %o1], %o1
#endif
	call	class_respondsToSelector
	 nop

	cmp	%o0, 0
	be	0f

	 mov	%i1, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
#ifdef OF_PIC
	ld	[%l7 + %o1], %o1
#endif
	call	objc_msg_lookup
	 nop
	mov	%o0, %l0

	mov	%i1, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
#ifdef OF_PIC
	ld	[%l7 + %o1], %o1
#endif
	jmpl	%l0, %o7
	 mov	%i2, %o2

	cmp	%o0, 0
139
140
141
142
143
144
145
146

147
148
149
150
151
152
153
154
155
156


157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175

176
177
178

179
180
181
182
183


184
185
186


187
188
189
190
191


192
193
194
195
139
140
141
142
143
144
145

146
147
148
149
150
151
152
153
154


155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174

175
176
177

178
179
180
181


182
183
184


185
186
187
188
189


190
191
192
193
194
195







-
+








-
-
+
+


















-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+





0:
	call	OFMethodNotFound_stret
	 restore
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
.Linit:
	save	%sp, -96, %sp

#ifdef OF_PIC
	sethi	%hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7
	call	add_pc
	 add	%l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7
#endif

	sethi	%hi(module), %i0
	or	%i0, %lo(module), %i0
	sethi	%hi(.Lmodule), %i0
	or	%i0, %lo(.Lmodule), %i0
#ifdef OF_PIC
	ld	[%l7 + %i0], %i0
#endif

	call	__objc_exec_class
	 restore

#ifdef OF_PIC
add_pc:
	jmp	%o7 + 8
	 add	%l7, %o7, %l7
#endif

#ifdef OF_SOLARIS
.section .init_array, "aw"
#else
.section .ctors, "aw", %progbits
#endif
	.word init
	.word .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.word str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.word .Lstr_forwardingTargetForSelector_, 0
	.word 0, 0
symtab:
	.word 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.word 0, .Lsel_forwardingTargetForSelector_
	.half 0, 0
	.word 0
	.word 0
module:
	.word 8, 16, 0, symtab
.Lmodule:
	.word 8, 16, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-sparc64-elf.S from [67cee61a30] to [4ecc2cf437].

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
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







-
+






-
-
+
+







-
-
+
+






-
-
+
+







	std	%f22, [%sp + BIAS + 264]
	std	%f24, [%sp + BIAS + 272]
	std	%f26, [%sp + BIAS + 280]
	std	%f28, [%sp + BIAS + 288]
	std	%f30, [%sp + BIAS + 296]

	sethi	%hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7
	call	add_pc
	call	.LaddPC
	 add	%l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7

	mov	%i0, %o0
	call	object_getClass
	 nop

	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
	ldx	[%l7 + %o1], %o1
	call	class_respondsToSelector
	 nop

	brz,pn	%o0, 0f

	 mov	%i0, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
	ldx	[%l7 + %o1], %o1
	call	objc_msg_lookup
	 nop
	mov	%o0, %l0

	mov	%i0, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
	ldx	[%l7 + %o1], %o1
	jmpl	%l0, %o7
	 mov	%i1, %o2

	brz,pn	%o0, 0f
	 cmp	%o0, %i0
	be,pn	%xcc, 0f
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


162
163
164
165
166
167
168
169


170
171
172
173
174
175
176
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
162
163
164
165
166
167


168
169
170
171
172
173
174
175
176







-
+






-
-
+
+







-
-
+
+






-
-
+
+







	std	%f22, [%sp + BIAS + 264]
	std	%f24, [%sp + BIAS + 272]
	std	%f26, [%sp + BIAS + 280]
	std	%f28, [%sp + BIAS + 288]
	std	%f30, [%sp + BIAS + 296]

	sethi	%hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7
	call	add_pc
	call	.LaddPC
	 add	%l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7

	mov	%i1, %o0
	call	object_getClass
	 nop

	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
	ldx	[%l7 + %o1], %o1
	call	class_respondsToSelector
	 nop

	brz,pn	%o0, 0f

	 mov	%i1, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
	ldx	[%l7 + %o1], %o1
	call	objc_msg_lookup
	 nop
	mov	%o0, %l0

	mov	%i1, %o0
	sethi	%hi(sel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(sel_forwardingTargetForSelector_), %o1
	sethi	%hi(.Lsel_forwardingTargetForSelector_), %o1
	or	%o1, %lo(.Lsel_forwardingTargetForSelector_), %o1
	ldx	[%l7 + %o1], %o1
	jmpl	%l0, %o7
	 mov	%i2, %o2

	brz,pn	%o0, 0f
	 cmp	%o0, %i1
	be,pn	%xcc, 0f
205
206
207
208
209
210
211
212

213
214
215
216

217
218
219
220


221
222
223
224
225
226

227
228
229
230
231
232
233
234
235

236
237
238

239
240
241
242
243


244
245
246


247
248
249
250
251


252
253
254
255
205
206
207
208
209
210
211

212
213
214
215

216
217
218


219
220
221
222
223
224
225

226
227
228
229
230
231
232
233
234

235
236
237

238
239
240
241


242
243
244


245
246
247
248
249


250
251
252
253
254
255







-
+



-
+


-
-
+
+





-
+








-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+





0:
	call	OFMethodNotFound_stret
	 restore
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
.Linit:
	save	%sp, -176, %sp

	sethi	%hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7
	call	add_pc
	call	.LaddPC
	 add	%l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7

	sethi	%hi(module), %i0
	or	%i0, %lo(module), %i0
	sethi	%hi(.Lmodule), %i0
	or	%i0, %lo(.Lmodule), %i0
	ldx	[%l7 + %i0], %i0

	call	__objc_exec_class
	 restore

add_pc:
.LaddPC:
	jmp	%o7 + 8
	 add	%l7, %o7, %l7

#ifdef OF_SOLARIS
.section .init_array, "aw"
#else
.section .ctors, "aw", %progbits
#endif
	.xword init
	.xword .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.xword str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.xword .Lstr_forwardingTargetForSelector_, 0
	.xword 0, 0
symtab:
	.xword 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.xword 0, .Lsel_forwardingTargetForSelector_
	.half 0, 0
	.word 0
	.xword 0
module:
	.xword 8, 32, 0, symtab
.Lmodule:
	.xword 8, 32, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-x86-elf.S from [4b872d6763] to [7d07165df3].

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
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







-
+







-
+








-
+





-
+







OFForward:
	push	ebp
	mov	ebp, esp

	push	ebx
	sub	esp, 20

	call	getEIP
	call	.LgetEIP
	add	ebx, offset _GLOBAL_OFFSET_TABLE_

	mov	eax, [ebp + 8]
	mov	[esp], eax
	call	object_getClass@PLT

	mov	[esp], eax
	lea	eax, [ebx + sel_forwardingTargetForSelector_@GOTOFF]
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	class_respondsToSelector@PLT

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	lea	eax, [ebx + sel_forwardingTargetForSelector_@GOTOFF]
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	objc_msg_lookup@PLT

	mov	edx, [ebp + 8]
	mov	[esp], edx
	lea	edx, [ebx + sel_forwardingTargetForSelector_@GOTOFF]
	lea	edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], edx
	mov	edx, [ebp + 12]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
90
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105

106
107
108
109
110
111
112
113
114

115
116
117
118
119
120

121
122
123
124
125
126
127
90
91
92
93
94
95
96

97
98
99
100
101
102
103
104

105
106
107
108
109
110
111
112
113

114
115
116
117
118
119

120
121
122
123
124
125
126
127







-
+







-
+








-
+





-
+







OFForward_stret:
	push	ebp
	mov	ebp, esp

	push	ebx
	sub	esp, 20

	call	getEIP
	call	.LgetEIP
	add	ebx, offset _GLOBAL_OFFSET_TABLE_

	mov	eax, [ebp + 12]
	mov	[esp], eax
	call	object_getClass@PLT

	mov	[esp], eax
	lea	eax, [ebx + sel_forwardingTargetForSelector_@GOTOFF]
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], eax
	call	class_respondsToSelector@PLT

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	lea	eax, [ebx + sel_forwardingTargetForSelector_@GOTOFF]
	lea	eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp  + 4], eax
	call	objc_msg_lookup@PLT

	mov	edx, [ebp + 12]
	mov	[esp], edx
	lea	edx, [ebx + sel_forwardingTargetForSelector_@GOTOFF]
	lea	edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF]
	mov	[esp + 4], edx
	mov	edx, [ebp + 16]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
147
148
149
150
151
152
153
154

155
156
157
158
159
160
161

162
163
164

165
166
167
168
169
170
171
172
173

174
175
176
177
178
179
180
181
182

183
184
185

186
187
188
189
190


191
192
193


194
195
196
197
198


199
200
201
202
147
148
149
150
151
152
153

154
155
156
157
158
159
160

161
162
163

164
165
166
167
168
169
170
171
172

173
174
175
176
177
178
179
180
181

182
183
184

185
186
187
188


189
190
191


192
193
194
195
196


197
198
199
200
201
202







-
+






-
+


-
+








-
+








-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+




	pop	ebx
	pop	ebp

	jmp	eax
.type OFForward_stret, %function
.size OFForward_stret, .-OFForward_stret

init:
.Linit:
	push	ebp
	mov	ebp, esp

	push	ebx
	sub	esp, 4

	call	getEIP
	call	.LgetEIP
	add	ebx, offset _GLOBAL_OFFSET_TABLE_

	lea	eax, [ebx + module@GOTOFF]
	lea	eax, [ebx + .Lmodule@GOTOFF]
	mov	[esp], eax
	call	__objc_exec_class@PLT

	add	esp, 4
	pop	ebx
	pop	ebp
	ret

getEIP:
.LgetEIP:
	mov	ebx, [esp]
	ret

#ifdef OF_SOLARIS
.section .init_array, "aw"
#else
.section .ctors, "aw", %progbits
#endif
	.long init
	.long .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.long .Lstr_forwardingTargetForSelector_, 0
	.long 0, 0
symtab:
	.long 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.long 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.long 0
module:
	.long 8, 16, 0, symtab
.Lmodule:
	.long 8, 16, 0, .Lsymtab

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/forwarding/forwarding-x86-win32.S from [c9c79ec3ea] to [a9803a8051].

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
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







-
+








-
+





-
+







	sub	esp, 20

	mov	eax, [ebp + 8]
	mov	[esp], eax
	call	_object_getClass

	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 8]
	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_objc_msg_lookup

	mov	edx, [ebp + 8]
	mov	[esp], edx
	mov	edx, offset sel_forwardingTargetForSelector_
	mov	edx, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], edx
	mov	edx, [ebp + 12]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
90
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105
106

107
108
109
110
111
112

113
114
115
116
117
118
119
90
91
92
93
94
95
96

97
98
99
100
101
102
103
104
105

106
107
108
109
110
111

112
113
114
115
116
117
118
119







-
+








-
+





-
+







	sub	esp, 20

	mov	eax, [ebp + 12]
	mov	[esp], eax
	call	_object_getClass

	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_class_respondsToSelector

	test	eax, eax
	jz	short 0f

	mov	eax, [ebp + 12]
	mov	[esp], eax
	mov	eax, offset sel_forwardingTargetForSelector_
	mov	eax, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], eax
	call	_objc_msg_lookup

	mov	edx, [ebp + 12]
	mov	[esp], edx
	mov	edx, offset sel_forwardingTargetForSelector_
	mov	edx, offset .Lsel_forwardingTargetForSelector_
	mov	[esp + 4], edx
	mov	edx, [ebp + 16]
	mov	[esp + 8], edx
	call	eax

	test	eax, eax
	jz	short 0f
139
140
141
142
143
144
145
146

147
148
149
150
151
152
153

154
155
156
157
158
159
160
161
162
163

164
165
166

167
168
169
170
171


172
173
174


175
176
177
178
179


139
140
141
142
143
144
145

146
147
148
149
150
151
152

153
154
155
156
157
158
159
160
161
162

163
164
165

166
167
168
169


170
171
172


173
174
175
176
177


178
179







-
+






-
+









-
+


-
+



-
-
+
+

-
-
+
+



-
-
+
+

	jmp	_OFMethodNotFound_stret
.def _OFForward_stret
.scl 2
.type 32
.endef

init:
.Linit:
	push	ebp
	mov	ebp, esp

	push	ebx
	sub	esp, 4

	mov	eax, offset module
	mov	eax, offset .Lmodule
	mov	[esp], eax
	call	___objc_exec_class

	add	esp, 4
	pop	ebx
	pop	ebp
	ret

.section .ctors, "aw"
	.long init
	.long .Linit

.section .rodata
str_forwardingTargetForSelector_:
.Lstr_forwardingTargetForSelector_:
	.asciz "forwardingTargetForSelector:"

.section .data
sel_forwardingTargetForSelector_:
	.long str_forwardingTargetForSelector_, 0
.Lsel_forwardingTargetForSelector_:
	.long .Lstr_forwardingTargetForSelector_, 0
	.long 0, 0
symtab:
	.long 0, sel_forwardingTargetForSelector_
.Lsymtab:
	.long 0, .Lsel_forwardingTargetForSelector_
	.short 0, 0
	.long 0
	.long 0
module:
	.long 8, 16, 0, symtab
.Lmodule:
	.long 8, 16, 0, .Lsymtab

Modified src/runtime/lookup-asm/lookup-asm-amd64-elf.S from [23159b41e1] to [d1cf6bd700].

24
25
26
27
28
29
30
31

32
33
34
35
36
37
38
24
25
26
27
28
29
30

31
32
33
34
35
36
37
38







-
+







.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	test	rdi, rdi
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	test	dil, 1
	jnz	short .LtaggedPointer_\name

	mov	r8, [rdi]
	mov	r8, [r8 + 64]

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
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







-
+













-
-
+
+


-
+






.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	r8, rdi
	mov	rdi, [rdi]
	test	rdi, rdi
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	mov	r8, [r8 + 8]
	mov	r8, [r8 + 64]
	jmp	short .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:
	lea	rax, [rip + nilMethod]
.LreturnNilMethod:
	lea	rax, [rip + .LnilMethod]
	ret

nilMethod:
.LnilMethod:
	xor	rax, rax
	ret

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-amd64-macho.S from [ca53a90db3] to [b3182ba60d].

36
37
38
39
40
41
42
43

44
45
46
47
48
49
50
36
37
38
39
40
41
42

43
44
45
46
47
48
49
50







-
+







	.intel_syntax noprefix
.endmacro

.section __TEXT, __text, regular, pure_instructions
.macro GENERATE_LOOKUP
$0:
	test	rdi, rdi
	jz	returnNilMethod
	jz	LreturnNilMethod

	test	dil, 1
	jnz	LtaggedPointer_$0

	mov	r8, [rdi]
	mov	r8, [r8 + 64]

79
80
81
82
83
84
85
86

87
88
89
90
91
92
93
94
95
96
97
98
99


100
101
102

103
104
79
80
81
82
83
84
85

86
87
88
89
90
91
92
93
94
95
96
97


98
99
100
101

102
103
104







-
+











-
-
+
+


-
+


.endmacro

.macro GENERATE_LOOKUP_SUPER
$0:
	mov	r8, rdi
	mov	rdi, [rdi]
	test	rdi, rdi
	jz	returnNilMethod
	jz	LreturnNilMethod

	movq	r8, [r8 + 8]
	movq	r8, [r8 + 64]
	jmp	Lmain_$1
.endmacro

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:
	lea	rax, [rip + nilMethod]
LreturnNilMethod:
	lea	rax, [rip + LnilMethod]
	ret

nilMethod:
LnilMethod:
	xor	rax, rax
	ret

Modified src/runtime/lookup-asm/lookup-asm-amd64-win64.S from [56a0df9bbf] to [2fecd29e3d].

22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
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:
	test	rcx, rcx
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	test	cl, 1
	jnz	short .LtaggedPointer_\name

	mov	r8, [rcx]
	mov	r8, [r8 + 56]

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
102
103

104
105
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
102

103
104
105







-
+















-
-
+
+


-
+


.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	r8, rcx
	mov	rcx, [rcx]
	test	rcx, rcx
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	mov	r8, [r8 + 8]
	mov	r8, [r8 + 56]
	jmp	short .Lmain_\lookup
.def \name
.scl 2
.type 32
.endef
.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:
	lea	rax, [rip + nilMethod]
.LreturnNilMethod:
	lea	rax, [rip + .LnilMethod]
	ret

nilMethod:
.LnilMethod:
	xor	rax, rax
	ret

Modified src/runtime/lookup-asm/lookup-asm-arm-elf.S from [30c6881b76] to [2b6e55a11d].

22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
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:
	cmp	r0, #0
	beq	returnNilMethod
	beq	.LreturnNilMethod

	tst	r0, #1
	bne	.LtaggedPointer_\name

	ldr	r2, [r0, #0]
	ldr	r2, [r2, #32]

88
89
90
91
92
93
94
95

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111


112
113
114

115
116
117
118
119
120
88
89
90
91
92
93
94

95
96
97
98
99
100
101
102
103
104
105
106
107
108
109


110
111
112
113

114
115
116
117
118
119
120







-
+














-
-
+
+


-
+






.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	r2, r0
	ldr	r0, [r0, #0]
	cmp	r0, #0
	beq	returnNilMethod
	beq	.LreturnNilMethod

	ldr	r2, [r2, #4]
	ldr	r2, [r2, #32]

	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:
	adr	r0, nilMethod
.LreturnNilMethod:
	adr	r0, .LnilMethod
	bx	lr

nilMethod:
.LnilMethod:
	mov	r0, #0
	bx	lr

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-arm64-elf.S from [761debfa49] to [2db12deb2a].

21
22
23
24
25
26
27
28

29
30
31
32
33
34
35
21
22
23
24
25
26
27

28
29
30
31
32
33
34
35







-
+







.globl objc_msg_lookup_stret
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	cbz	x0, returnNilMethod
	cbz	x0, .LreturnNilMethod

	tst	x0, #1
	b.ne	.LtaggedPointer_\name

	ldr	x2, [x0]
	ldr	x2, [x2, #64]

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
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







-
+














-
-
+
+


-
+






.size \name, .-\name
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	x2, x0
	ldr	x0, [x0]
	cbz	x0, returnNilMethod
	cbz	x0, .LreturnNilMethod

	ldr	x2, [x2, #8]
	ldr	x2, [x2, #64]

	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:
	adr	x0, nilMethod
.LreturnNilMethod:
	adr	x0, .LnilMethod
	ret

nilMethod:
.LnilMethod:
	mov	x0, #0
	ret

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-mips-elf.S from [67d5199bae] to [5d4df4c5f3].

70
71
72
73
74
75
76
77

78
79

80
81
82
83
84
85
86
70
71
72
73
74
75
76

77
78

79
80
81
82
83
84
85
86







-
+

-
+







#endif

	move	$v0, $t0
	jr	$ra

0:
#ifdef OF_PIC
	addiu	$v0, $t9, nilMethod-\name
	addiu	$v0, $t9, .LnilMethod-\name
#else
	la	$v0, nilMethod
	la	$v0, .LnilMethod
#endif
	jr	$ra

#ifdef OF_PIC
1:
	lui	$gp, %hi(_gp_disp)
	addiu	$gp, $gp, %lo(_gp_disp)
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
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







-
+

-
+











-
+






	lw	$t0, 32($t0)

	addiu	$t9, $t9, \lookup-\name
	b	.Lmain_\lookup

0:
#ifdef OF_PIC
	addiu	$v0, $t9, nilMethod-\name
	addiu	$v0, $t9, .LnilMethod-\name
#else
	la	$v0, nilMethod
	la	$v0, .LnilMethod
#endif
	jr	$ra
.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

nilMethod:
.LnilMethod:
	move	$v0, $zero
	jr	$ra

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-mips64-n64-elf.S from [b34841fe09] to [79d05fd5cc].

68
69
70
71
72
73
74
75

76
77
78
79
80
81
82
68
69
70
71
72
73
74

75
76
77
78
79
80
81
82







-
+







	move	$v0, $t0
	jr	$ra

0:
	lui	$v0, %hi(%neg(%gp_rel(\name)))
	daddiu	$v0, $v0, %lo(%neg(%gp_rel(\name)))
	daddu	$v0, $v0, $t9
	ld	$v0, %got_disp(nilMethod)($v0)
	ld	$v0, %got_disp(.LnilMethod)($v0)
	jr	$ra

1:
	lui	$t0, %hi(%neg(%gp_rel(\name)))
	daddiu	$t0, $t0, %lo(%neg(%gp_rel(\name)))
	daddu	$t0, $t0, $t9
	ld	$t9, %got_disp(\notFound)($t0)
115
116
117
118
119
120
121
122

123
124
125
126
127
128
129
130
131
132
133

134
135
136
137
138
139
115
116
117
118
119
120
121

122
123
124
125
126
127
128
129
130
131
132

133
134
135
136
137
138
139







-
+










-
+






	daddiu	$t9, $t9, \lookup-\name
	b	.Lmain_\lookup

0:
	lui	$v0, %hi(%neg(%gp_rel(\name)))
	daddiu	$v0, $v0, %lo(%neg(%gp_rel(\name)))
	daddu	$v0, $v0, $t9
	ld	$v0, %got_disp(nilMethod)($v0)
	ld	$v0, %got_disp(.LnilMethod)($v0)
	jr	$ra
.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

nilMethod:
.LnilMethod:
	move	$v0, $zero
	jr	$ra

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-powerpc-elf.S from [3fdc637787] to [131ef264f4].

22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
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
	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
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
	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

returnNilMethod:
.LreturnNilMethod:
	mflr	%r0
	bl	getPC
	bl	.LgetPC
	mtlr	%r0
0:
	addi	%r3, %r3, nilMethod-0b
	addi	%r3, %r3, .LnilMethod-0b
	blr

nilMethod:
.LnilMethod:
	li	%r3, 0
	blr

getPC:
.LgetPC:
	mflr	%r3
	blr

#ifdef OF_PIC
.section .got2, "aw"
.Lbiased_got2 = .+0x8000
.Lgot_objc_methodNotFound:

Modified src/runtime/lookup-asm/lookup-asm-powerpc64-elf.S from [0383174096] to [44421eb613].

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
162
163
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
162
163







-
-
+
+



-
-
-
-
+
+
+
+


-
+









-
-
+
+





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:
	addis	%r3, %r2, nilMethod@toc@ha
	addi	%r3, %r3, nilMethod@toc@l
	addis	%r3, %r2, .LnilMethod@toc@ha
	addi	%r3, %r3, .LnilMethod@toc@l
	blr

#if defined(_CALL_ELF) && _CALL_ELF == 2
nilMethod:
	addis	%r2, %r12, .TOC.-nilMethod@ha
	addi	%r2, %r2, .TOC.-nilMethod@l
.localentry nilMethod, .-nilMethod
.LnilMethod:
	addis	%r2, %r12, .TOC.-.LnilMethod@ha
	addi	%r2, %r2, .TOC.-.LnilMethod@l
.localentry .LnilMethod, .-.LnilMethod
#else
.section .opd, "aw", @progbits
nilMethod:
.LnilMethod:
	.p2align 3
	.quad .Lbegin_nilMethod
	.quad .TOC.@tocbase
	.quad 0
.section .text
#endif
.Lbegin_nilMethod:
	li	%r3, 0
	blr
.type nilMethod, @function
.size nilMethod, .-.Lbegin_nilMethod
.type .LnilMethod, @function
.size .LnilMethod, .-.Lbegin_nilMethod

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", @progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-sparc-elf.S from [06d51d4229] to [be37fefc0d].

22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
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:
	tst	%o0
	bz	returnNilMethod
	bz	.LreturnNilMethod
	 btst	1, %o0
	bnz	.LtaggedPointer_\name	
	 nop

	ld	[%o0], %o2
	ld	[%o2 + 32], %o2

100
101
102
103
104
105
106
107

108
109
110
111
112
113
114
115
116
117
118
119
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
100
101
102
103
104
105
106

107
108
109
110
111
112
113
114
115
116
117
118
119
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







-
+














-
+









-
-
+
+




-
+

-
+


-
+






.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	%o0, %o2
	ld	[%o0], %o0
	cmp	%o0, 0
	be	returnNilMethod
	be	.LreturnNilMethod
	 nop

	ld	[%o2 + 4], %o2
	ba	.Lmain_\lookup
	 ld	[%o2 + 32], %o2
.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:
.LreturnNilMethod:
#ifdef OF_PIC
	mov	%o7, %g1

	sethi	%hi(_GLOBAL_OFFSET_TABLE_ - 4), %o1
	call	0f
	 add	%o1, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %o1
0:
	add	%o7, %o1, %o1

	sethi	%hi(nilMethod), %o0
	or	%o0, %lo(nilMethod), %o0
	sethi	%hi(.LnilMethod), %o0
	or	%o0, %lo(.LnilMethod), %o0

	jmpl	%g1 + 8, %g0
	 ld	[%o1 + %o0], %o0
#else
	sethi	%hi(nilMethod), %o0
	sethi	%hi(.LnilMethod), %o0
	retl
	 or	%o0, %lo(nilMethod), %o0
	 or	%o0, %lo(.LnilMethod), %o0
#endif

nilMethod:
.LnilMethod:
	retl
	 clr	%o0

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-sparc64-elf.S from [bf52d34777] to [e9f5517a42].

21
22
23
24
25
26
27
28

29
30
31
32
33
34
35
21
22
23
24
25
26
27

28
29
30
31
32
33
34
35







-
+







.globl objc_msg_lookup_stret
.globl objc_msg_lookup_super
.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	brz,pn	%o0, returnNilMethod
	brz,pn	%o0, .LreturnNilMethod
	 and	%o0, 1, %o2
	brnz,pn	%o2, .LtaggedPointer_\name
	 nop

	ldx	[%o0], %o2
	ldx	[%o2 + 64], %o2

97
98
99
100
101
102
103
104

105
106
107
108
109
110
111
112
113
114
115
116
117
118
119

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
97
98
99
100
101
102
103

104
105
106
107
108
109
110
111
112
113
114
115
116
117
118

119
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







-
+














-
+









-
-
+
+




-
+

-
+


-
+






.size \name, .-\name
.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	%o0, %o2
	ldx	[%o0], %o0
	brz,pn	%o0, returnNilMethod
	brz,pn	%o0, .LreturnNilMethod
	 nop

	ldx	[%o2 + 8], %o2
	ba	.Lmain_\lookup
	 ldx	[%o2 + 64], %o2
.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:
.LreturnNilMethod:
#ifdef OF_PIC
	mov	%o7, %g1

	sethi	%hi(_GLOBAL_OFFSET_TABLE_ - 4), %o1
	call	0f
	 or	%o1, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %o1
0:
	add	%o7, %o1, %o1

	sethi	%hi(nilMethod), %o0
	or	%o0, %lo(nilMethod), %o0
	sethi	%hi(.LnilMethod), %o0
	or	%o0, %lo(.LnilMethod), %o0

	jmpl	%g1 + 8, %g0
	 ldx	[%o1 + %o0], %o0
#else
	sethi	%hi(nilMethod), %o0
	sethi	%hi(.LnilMethod), %o0
	retl
	 or	%o0, %lo(nilMethod), %o0
	 or	%o0, %lo(.LnilMethod), %o0
#endif

nilMethod:
.LnilMethod:
	retl
	 clr	%o0

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-x86-elf.S from [a240f9cb41] to [cd6507b46d].

25
26
27
28
29
30
31
32

33
34
35
36
37
38
39
25
26
27
28
29
30
31

32
33
34
35
36
37
38
39







-
+







.globl objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	mov	edx, [esp + 4]
	test	edx, edx
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	test	dl, 1
	jnz	short .LtaggedPointer_\name

	mov	edx, [edx]
	mov	edx, [edx + 32]

51
52
53
54
55
56
57
58

59
60
61
62
63
64

65
66
67
68
69
70
71
51
52
53
54
55
56
57

58
59
60
61
62
63

64
65
66
67
68
69
70
71







-
+





-
+








	test	eax, eax
	jz	short 0f

	ret

0:
	call	getEIP
	call	.LgetEIP
	add	eax, offset _GLOBAL_OFFSET_TABLE_
	mov	eax, [eax + \notFound@GOT]
	jmp	eax

.LtaggedPointer_\name:
	call	getEIP
	call	.LgetEIP
	add	eax, offset _GLOBAL_OFFSET_TABLE_

	mov	ecx, [eax + objc_taggedPointerSecret@GOT]
	xor	edx, [ecx]
	and	dl, 0xE
	movzx	edx, dl

79
80
81
82
83
84
85
86

87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102


103
104

105
106
107

108
109
110
111

112
113
114
115
116
117
79
80
81
82
83
84
85

86
87
88
89
90
91
92
93
94
95
96
97
98
99
100


101
102
103

104
105
106

107
108
109
110

111
112
113
114
115
116
117







-
+














-
-
+
+

-
+


-
+



-
+






.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	edx, [esp + 4]
	mov	eax, [edx]
	test	eax, eax
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	mov	[esp + 4], eax
	mov	edx, [edx + 4]
	mov	edx, [edx + 32]
	jmp	short .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:
	call	getEIP
.LreturnNilMethod:
	call	.LgetEIP
	add	eax, offset _GLOBAL_OFFSET_TABLE_
	lea	eax, [eax + nilMethod@GOTOFF]
	lea	eax, [eax + .LnilMethod@GOTOFF]
	ret

nilMethod:
.LnilMethod:
	xor	eax, eax
	ret

getEIP:
.LgetEIP:
	mov	eax, [esp]
	ret

#if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif

Modified src/runtime/lookup-asm/lookup-asm-x86-win32.S from [045420d8bf] to [d9ae57eae0].

23
24
25
26
27
28
29
30

31
32
33
34
35
36
37
23
24
25
26
27
28
29

30
31
32
33
34
35
36
37







-
+







.globl _objc_msg_lookup_super_stret

.section .text
.macro GENERATE_LOOKUP name notFound
\name:
	mov	edx, [esp + 4]
	test	edx, edx
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	test	dl, 1
	jnz	short .LtaggedPointer_\name

	mov	edx, [edx]
	mov	edx, [edx + 32]

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
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







-
+
















-
-
+
+


-
+


.endm

.macro GENERATE_LOOKUP_SUPER name lookup
\name:
	mov	edx, [esp + 4]
	mov	eax, [edx]
	test	eax, eax
	jz	short returnNilMethod
	jz	short .LreturnNilMethod

	mov	[esp + 4], eax
	mov	edx, [edx  + 4]
	mov	edx, [edx + 32]
	jmp	short .Lmain_\lookup
.def \name
.scl 2
.type 32
.endef
.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:
	mov	eax, offset nilMethod
.LreturnNilMethod:
	mov	eax, offset .LnilMethod
	ret

nilMethod:
.LnilMethod:
	xor	eax, eax
	ret