/* Trampoline for i386 CPU */ /* * Copyright 1995-1999 Bruno Haible, * * This is free software distributed under the GNU General Public Licence * described in the file COPYING. Contact the author if you don't have this * or can't live with it. There is ABSOLUTELY NO WARRANTY, explicit or implied, * on this software. */ /* Available registers: %eax, %edx, %ecx. */ /* * On Solaris 2.6, when the function being jumped to is an external symbol of * a shared library, the jump actually points to an ELF indirect jump: * jmp *PTR * where PTR initially contains the address of some resolving routine which * will replace the PTR contents with the actual code address of the function * and then jump to the function. * Unfortunately, this resolving routine clobbers all three registers: * %eax, %edx, %ecx. Must pass the additional data via the stack. * A simple "pushl $" is not sufficient: it causes trouble if the called * function is compiled with -fomit-frame-pointer. */ .globl _tramp _tramp: popl %ecx pushl $0x73554711 pushl %ecx jmp 0xbabebec0