1 .align 4 2 .globl privateSnippetExecutorGeneral 3 privateSnippetExecutorGeneral: 4 movl %esp,%ecx 5 pushl %ebp / proper stack frame needed for exception handling 6 movl %esp,%ebp 7 andl $0xFFFFFFF8,%esp / align following 64bit arg 8 subl $0x8,%esp / 64bit nRegReturn 9 pushl %ecx / 32bit pCallStack 10 pushl %edx / 32bit nVtableOffset 11 pushl %eax / 32bit nFunctionIndex 12 call cpp_vtable_call 13 movl 12(%esp),%eax / 64 bit nRegReturn, lower half 14 leave 15 ret 16 .type privateSnippetExecutorGeneral, @function 17 .size privateSnippetExecutorGeneral, .-privateSnippetExecutorGeneral 18 19 .align 4 20 .globl privateSnippetExecutorVoid 21 privateSnippetExecutorVoid: 22 movl %esp,%ecx 23 pushl %ebp / proper stack frame needed for exception handling 24 movl %esp,%ebp 25 andl $0xFFFFFFF8,%esp / align following 64bit arg 26 subl $0x8,%esp / 64bit nRegReturn 27 pushl %ecx / 32bit pCallStack 28 pushl %edx / 32bit nVtableOffset 29 pushl %eax / 32bit nFunctionIndex 30 call cpp_vtable_call 31 leave 32 ret 33 .type privateSnippetExecutorVoid, @function 34 .size privateSnippetExecutorVoid, .-privateSnippetExecutorVoid 35 36 .align 4 37 .globl privateSnippetExecutorHyper 38 privateSnippetExecutorHyper: 39 movl %esp,%ecx 40 pushl %ebp / proper stack frame needed for exception handling 41 movl %esp,%ebp 42 andl $0xFFFFFFF8,%esp / align following 64bit arg 43 subl $0x8,%esp / 64bit nRegReturn 44 pushl %ecx / 32bit pCallStack 45 pushl %edx / 32bit nVtableOffset 46 pushl %eax / 32bit nFunctionIndex 47 call cpp_vtable_call 48 movl 12(%esp),%eax / 64 bit nRegReturn, lower half 49 movl 16(%esp),%edx / 64 bit nRegReturn, upper half 50 leave 51 ret 52 .type privateSnippetExecutorHyper, @function 53 .size privateSnippetExecutorHyper, .-privateSnippetExecutorHyper 54 55 .align 4 56 .globl privateSnippetExecutorFloat 57 privateSnippetExecutorFloat: 58 movl %esp,%ecx 59 pushl %ebp / proper stack frame needed for exception handling 60 movl %esp,%ebp 61 andl $0xFFFFFFF8,%esp / align following 64bit arg 62 subl $0x8,%esp / 64bit nRegReturn 63 pushl %ecx / 32bit pCallStack 64 pushl %edx / 32bit nVtableOffset 65 pushl %eax / 32bit nFunctionIndex 66 call cpp_vtable_call 67 flds 12(%esp) / 64 bit nRegReturn, lower half 68 leave 69 ret 70 .type privateSnippetExecutorFloat, @function 71 .size privateSnippetExecutorFloat, .-privateSnippetExecutorFloat 72 73 .align 4 74 .globl privateSnippetExecutorDouble 75 privateSnippetExecutorDouble: 76 movl %esp,%ecx 77 pushl %ebp / proper stack frame needed for exception handling 78 movl %esp,%ebp 79 andl $0xFFFFFFF8,%esp / align following 64bit arg 80 subl $0x8,%esp / 64bit nRegReturn 81 pushl %ecx / 32bit pCallStack 82 pushl %edx / 32bit nVtableOffset 83 pushl %eax / 32bit nFunctionIndex 84 call cpp_vtable_call 85 fldl 12(%esp) / 64 bit nRegReturn 86 leave 87 ret 88 .type privateSnippetExecutorDouble, @function 89 .size privateSnippetExecutorDouble, .-privateSnippetExecutorDouble 90 91 .align 4 92 .globl privateSnippetExecutorStruct 93 privateSnippetExecutorStruct: 94 movl %esp,%ecx 95 pushl %ebp / proper stack frame needed for exception handling 96 movl %esp,%ebp 97 andl $0xFFFFFFF8,%esp / align following 64bit arg 98 subl $0x8,%esp / 64bit nRegReturn 99 pushl %ecx / 32bit pCallStack 100 pushl %edx / 32bit nVtableOffset 101 pushl %eax / 32bit nFunctionIndex 102 call cpp_vtable_call 103 movl 12(%esp),%eax / 64 bit nRegReturn, lower half 104 leave 105 ret $4 106 .type privateSnippetExecutorStruct, @function 107 .size privateSnippetExecutorStruct, .-privateSnippetExecutorStruct 108 109 .align 4 110 .globl callVirtualMethod 111 callVirtualMethod: 112 pushl %ebp 113 movl %esp, %ebp 114 subl $24, %esp 115 movl %edx, -4(%ebp) 116 movl %ecx, -8(%ebp) 117 movl %eax, -12(%ebp) 118 movl %esp, -16(%ebp) 119 movl %ebx, -20(%ebp) 120 121 / set ebx to GOT 122 .L_GOT_BEGIN_2: 123 call .L_GOT_END_2 124 .L_GOT_END_2: 125 popl %ebx 126 addl $_GLOBAL_OFFSET_TABLE_+[.-.L_GOT_END_2],%ebx 127 .callBeginPosition: 128 movl 28(%ebp), %eax 129 movl %eax, %edx 130 dec %edx 131 shl $2, %edx 132 add 24(%ebp), %edx 133 .copyLong: 134 movl 0(%edx), %ecx 135 sub $4, %edx 136 push %ecx 137 dec %eax 138 jne .copyLong 139 .doCall: 140 movl 8(%ebp), %edx 141 movl 0(%edx), %edx 142 movl 12(%ebp), %eax 143 add $2, %eax 144 shl $2, %eax 145 add %eax, %edx 146 movl 0(%edx), %edx 147 148 call *%edx 149 150 .callVirtualMethodExceptionPosition: 151 / handle returns 152 movl 20(%ebp), %ecx 153 154 / byte types 155 cmp $2, %ecx / typelib_TypeClass_BOOLEAN 156 je .handleByte 157 cmp $3, %ecx 158 je .handleByte / typelib_TypeClass_BYTE 159 160 / half word types 161 cmp $4, %ecx / typelib_TypeClass_SHORT 162 je .handleShort 163 cmp $5, %ecx / typelib_TypeClass_UNSIGNED_SHORT 164 je .handleShort 165 166 / word types 167 cmp $6, %ecx / typelib_TypeClass_LONG 168 je .handleWord 169 cmp $7, %ecx / typelib_TypeClass_UNSIGNED_LONG 170 je .handleWord 171 cmp $1, %ecx / typelib_TypeClass_CHAR (wchar_t) 172 je .handleWord 173 cmp $15, %ecx / typelib_TypeClass_ENUM 174 je .handleWord 175 176 / double word types 177 cmp $8, %ecx / typelib_TypeClass_HYPER 178 je .handleDoubleWord 179 cmp $9, %ecx / typelib_TypeClass_UNSIGNED_HYPER 180 je .handleDoubleWord 181 182 / float 183 cmp $10, %ecx / typelib_TypeClass_FLOAT 184 je .handleFloat 185 186 / double 187 cmp $11, %ecx / typelib_TypeClass_DOUBLE 188 je .handleDouble 189 190 / default: return void 191 jmp .doRestore 192 .handleByte: 193 movl 16(%ebp), %ecx 194 movb %al, 0(%ecx) 195 jmp .doRestore 196 .handleShort: 197 movl 16(%ebp), %ecx 198 movw %ax, 0(%ecx) 199 jmp .doRestore 200 .handleWord: 201 movl 16(%ebp), %ecx 202 movl %eax, 0(%ecx) 203 jmp .doRestore 204 .handleDoubleWord: 205 movl 16(%ebp), %ecx 206 movl %eax, 0(%ecx) 207 movl %edx, 4(%ecx) 208 jmp .doRestore 209 .handleFloat: 210 movl 16(%ebp), %ecx 211 fstps 0(%ecx) 212 jmp .doRestore 213 .handleDouble: 214 movl 16(%ebp), %ecx 215 fstpl 0(%ecx) 216 jmp .doRestore 217 .doRestore: 218 movl -4(%ebp), %edx 219 movl -8(%ebp), %ecx 220 movl -12(%ebp), %eax 221 movl -20(%ebp), %ebx 222 movl %ebp, %esp 223 popl %ebp 224 ret 225 .type callVirtualMethod, @function 226 .size callVirtualMethod, .-callVirtualMethod 227 228 .globl callVirtualMethodExceptionHandler 229 callVirtualMethodExceptionHandler: 230 movl -4(%ebp), %edx 231 movl -8(%ebp), %ecx 232 movl -12(%ebp), %eax 233 movl -16(%ebp), %esp 234 movl -20(%ebp), %ebx 235 call __1cG__CrunMex_rethrow_q6F_v_@PLT 236 ret 237 238 .type callVirtualMethodExceptionHandler, @function 239 .size callVirtualMethodExceptionHandler, .-callVirtualMethodExceptionHandler 240 241 242 .section .exception_ranges,"aw" 243 .align 4 244 245 .4byte .callBeginPosition@rel 246 .4byte .callVirtualMethodExceptionPosition-.callBeginPosition 247 .4byte callVirtualMethodExceptionHandler-.callBeginPosition 248 .zero 8 249