File: tramp-i386.s

package info (click to toggle)
clisp 1%3A2.41-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 49,804 kB
  • ctags: 16,291
  • sloc: lisp: 75,912; ansic: 49,247; xml: 24,289; asm: 21,993; sh: 11,234; fortran: 6,692; cpp: 2,660; objc: 2,481; makefile: 2,355; perl: 164; sed: 55
file content (31 lines) | stat: -rw-r--r-- 1,100 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/* Trampoline for i386 CPU */

/*
 * Copyright 1995-1999 Bruno Haible, <bruno@clisp.org>
 *
 * 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 $<data>" 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