ObjFW  Diff

Differences From Artifact [a240f9cb41]:

To Artifact [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