/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ .align 4 .globl privateSnippetExecutorGeneral privateSnippetExecutorGeneral: movl %esp,%ecx pushl %ebp / proper stack frame needed for exception handling movl %esp,%ebp andl $0xFFFFFFF8,%esp / align following 64bit arg subl $0x8,%esp / 64bit nRegReturn pushl %ecx / 32bit pCallStack pushl %edx / 32bit nVtableOffset pushl %eax / 32bit nFunctionIndex call cpp_vtable_call movl 12(%esp),%eax / 64 bit nRegReturn, lower half leave ret .type privateSnippetExecutorGeneral, @function .size privateSnippetExecutorGeneral, .-privateSnippetExecutorGeneral .align 4 .globl privateSnippetExecutorVoid privateSnippetExecutorVoid: movl %esp,%ecx pushl %ebp / proper stack frame needed for exception handling movl %esp,%ebp andl $0xFFFFFFF8,%esp / align following 64bit arg subl $0x8,%esp / 64bit nRegReturn pushl %ecx / 32bit pCallStack pushl %edx / 32bit nVtableOffset pushl %eax / 32bit nFunctionIndex call cpp_vtable_call leave ret .type privateSnippetExecutorVoid, @function .size privateSnippetExecutorVoid, .-privateSnippetExecutorVoid .align 4 .globl privateSnippetExecutorHyper privateSnippetExecutorHyper: movl %esp,%ecx pushl %ebp / proper stack frame needed for exception handling movl %esp,%ebp andl $0xFFFFFFF8,%esp / align following 64bit arg subl $0x8,%esp / 64bit nRegReturn pushl %ecx / 32bit pCallStack pushl %edx / 32bit nVtableOffset pushl %eax / 32bit nFunctionIndex call cpp_vtable_call movl 12(%esp),%eax / 64 bit nRegReturn, lower half movl 16(%esp),%edx / 64 bit nRegReturn, upper half leave ret .type privateSnippetExecutorHyper, @function .size privateSnippetExecutorHyper, .-privateSnippetExecutorHyper .align 4 .globl privateSnippetExecutorFloat privateSnippetExecutorFloat: movl %esp,%ecx pushl %ebp / proper stack frame needed for exception handling movl %esp,%ebp andl $0xFFFFFFF8,%esp / align following 64bit arg subl $0x8,%esp / 64bit nRegReturn pushl %ecx / 32bit pCallStack pushl %edx / 32bit nVtableOffset pushl %eax / 32bit nFunctionIndex call cpp_vtable_call flds 12(%esp) / 64 bit nRegReturn, lower half leave ret .type privateSnippetExecutorFloat, @function .size privateSnippetExecutorFloat, .-privateSnippetExecutorFloat .align 4 .globl privateSnippetExecutorDouble privateSnippetExecutorDouble: movl %esp,%ecx pushl %ebp / proper stack frame needed for exception handling movl %esp,%ebp andl $0xFFFFFFF8,%esp / align following 64bit arg subl $0x8,%esp / 64bit nRegReturn pushl %ecx / 32bit pCallStack pushl %edx / 32bit nVtableOffset pushl %eax / 32bit nFunctionIndex call cpp_vtable_call fldl 12(%esp) / 64 bit nRegReturn leave ret .type privateSnippetExecutorDouble, @function .size privateSnippetExecutorDouble, .-privateSnippetExecutorDouble .align 4 .globl privateSnippetExecutorStruct privateSnippetExecutorStruct: movl %esp,%ecx pushl %ebp / proper stack frame needed for exception handling movl %esp,%ebp andl $0xFFFFFFF8,%esp / align following 64bit arg subl $0x8,%esp / 64bit nRegReturn pushl %ecx / 32bit pCallStack pushl %edx / 32bit nVtableOffset pushl %eax / 32bit nFunctionIndex call cpp_vtable_call movl 12(%esp),%eax / 64 bit nRegReturn, lower half leave ret $4 .type privateSnippetExecutorStruct, @function .size privateSnippetExecutorStruct, .-privateSnippetExecutorStruct .align 4 .globl callVirtualMethod callVirtualMethod: pushl %ebp movl %esp, %ebp subl $24, %esp movl %edx, -4(%ebp) movl %ecx, -8(%ebp) movl %eax, -12(%ebp) movl %esp, -16(%ebp) movl %ebx, -20(%ebp) / set ebx to GOT .L_GOT_BEGIN_2: call .L_GOT_END_2 .L_GOT_END_2: popl %ebx addl $_GLOBAL_OFFSET_TABLE_+[.-.L_GOT_END_2],%ebx .callBeginPosition: movl 28(%ebp), %eax movl %eax, %edx dec %edx shl $2, %edx add 24(%ebp), %edx .copyLong: movl 0(%edx), %ecx sub $4, %edx push %ecx dec %eax jne .copyLong .doCall: movl 8(%ebp), %edx movl 0(%edx), %edx movl 12(%ebp), %eax add $2, %eax shl $2, %eax add %eax, %edx movl 0(%edx), %edx call *%edx .callVirtualMethodExceptionPosition: / handle returns movl 20(%ebp), %ecx / byte types cmp $2, %ecx / typelib_TypeClass_BOOLEAN je .handleByte cmp $3, %ecx je .handleByte / typelib_TypeClass_BYTE / half word types cmp $4, %ecx / typelib_TypeClass_SHORT je .handleShort cmp $5, %ecx / typelib_TypeClass_UNSIGNED_SHORT je .handleShort / word types cmp $6, %ecx / typelib_TypeClass_LONG je .handleWord cmp $7, %ecx / typelib_TypeClass_UNSIGNED_LONG je .handleWord cmp $1, %ecx / typelib_TypeClass_CHAR (wchar_t) je .handleWord cmp $15, %ecx / typelib_TypeClass_ENUM je .handleWord / double word types cmp $8, %ecx / typelib_TypeClass_HYPER je .handleDoubleWord cmp $9, %ecx / typelib_TypeClass_UNSIGNED_HYPER je .handleDoubleWord / float cmp $10, %ecx / typelib_TypeClass_FLOAT je .handleFloat / double cmp $11, %ecx / typelib_TypeClass_DOUBLE je .handleDouble / default: return void jmp .doRestore .handleByte: movl 16(%ebp), %ecx movb %al, 0(%ecx) jmp .doRestore .handleShort: movl 16(%ebp), %ecx movw %ax, 0(%ecx) jmp .doRestore .handleWord: movl 16(%ebp), %ecx movl %eax, 0(%ecx) jmp .doRestore .handleDoubleWord: movl 16(%ebp), %ecx movl %eax, 0(%ecx) movl %edx, 4(%ecx) jmp .doRestore .handleFloat: movl 16(%ebp), %ecx fstps 0(%ecx) jmp .doRestore .handleDouble: movl 16(%ebp), %ecx fstpl 0(%ecx) jmp .doRestore .doRestore: movl -4(%ebp), %edx movl -8(%ebp), %ecx movl -12(%ebp), %eax movl -20(%ebp), %ebx movl %ebp, %esp popl %ebp ret .type callVirtualMethod, @function .size callVirtualMethod, .-callVirtualMethod .globl callVirtualMethodExceptionHandler callVirtualMethodExceptionHandler: movl -4(%ebp), %edx movl -8(%ebp), %ecx movl -12(%ebp), %eax movl -16(%ebp), %esp movl -20(%ebp), %ebx call __1cG__CrunMex_rethrow_q6F_v_@PLT ret .type callVirtualMethodExceptionHandler, @function .size callVirtualMethodExceptionHandler, .-callVirtualMethodExceptionHandler .section .exception_ranges,"aw" .align 4 .4byte .callBeginPosition@rel .4byte .callVirtualMethodExceptionPosition-.callBeginPosition .4byte callVirtualMethodExceptionHandler-.callBeginPosition .zero 8