1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
|
|
1
2
3
4
5
6
7
8
9
|
/*
* Copyright (c) 2008-2023 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
|
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
|
jz 0f
ret
0:
call getEIP
addl $_GLOBAL_OFFSET_TABLE_, %eax
lea \notFound@GOTOFF(%eax), %eax
jmp *%eax
.LtaggedPointer_\name:
call getEIP
addl $_GLOBAL_OFFSET_TABLE_, %eax
leal objc_taggedPointerSecret@GOTOFF(%eax), %ecx
xorl (%ecx), %edx
andb $0xE, %dl
movzbl %dl, %edx
leal objc_taggedPointerClasses@GOTOFF(%eax), %eax
movl (%eax,%edx,2), %edx
movl 32(%edx), %edx
jmp .Lmain_\name
.type \name, %function
.size \name, .-\name
.endm
|
|
|
|
|
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
|
jz 0f
ret
0:
call getEIP
addl $_GLOBAL_OFFSET_TABLE_, %eax
movl \notFound@GOT(%eax), %eax
jmp *%eax
.LtaggedPointer_\name:
call getEIP
addl $_GLOBAL_OFFSET_TABLE_, %eax
movl objc_taggedPointerSecret@GOT(%eax), %ecx
xorl (%ecx), %edx
andb $0xE, %dl
movzbl %dl, %edx
movl objc_taggedPointerClasses@GOT(%eax), %eax
movl (%eax,%edx,2), %edx
movl 32(%edx), %edx
jmp .Lmain_\name
.type \name, %function
.size \name, .-\name
.endm
|
106
107
108
109
110
111
112
113
114
115
|
xorl %eax, %eax
ret
getEIP:
movl (%esp), %eax
ret
#ifdef OF_LINUX
.section .note.GNU-stack, "", %progbits
#endif
|
|
|
106
107
108
109
110
111
112
113
114
115
|
xorl %eax, %eax
ret
getEIP:
movl (%esp), %eax
ret
#if defined(OF_LINUX) || defined(OF_HURD)
.section .note.GNU-stack, "", %progbits
#endif
|