0000: 2f 2a 20 54 72 61 6d 70 6f 6c 69 6e 65 20 63 6f /* Trampoline co
0010: 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 0a 2f nstruction */../
0020: 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20 31 *. * Copyright 1
0030: 39 39 35 2d 31 39 39 39 2c 20 32 30 30 31 2d 32 995-1999, 2001-2
0040: 30 30 34 20 42 72 75 6e 6f 20 48 61 69 62 6c 65 004 Bruno Haible
0050: 2c 20 3c 62 72 75 6e 6f 40 63 6c 69 73 70 2e 6f , <bruno@clisp.o
0060: 72 67 3e 0a 20 2a 0a 20 2a 20 54 68 69 73 20 69 rg>. *. * This i
0070: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 20 s free software
0080: 64 69 73 74 72 69 62 75 74 65 64 20 75 6e 64 65 distributed unde
0090: 72 20 74 68 65 20 47 4e 55 20 47 65 6e 65 72 61 r the GNU Genera
00a0: 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e 63 65 l Public Licence
00b0: 0a 20 2a 20 64 65 73 63 72 69 62 65 64 20 69 6e . * described in
00c0: 20 74 68 65 20 66 69 6c 65 20 43 4f 50 59 49 4e the file COPYIN
00d0: 47 2e 20 43 6f 6e 74 61 63 74 20 74 68 65 20 61 G. Contact the a
00e0: 75 74 68 6f 72 20 69 66 20 79 6f 75 20 64 6f 6e uthor if you don
00f0: 27 74 20 68 61 76 65 20 74 68 69 73 0a 20 2a 20 't have this. *
0100: 6f 72 20 63 61 6e 27 74 20 6c 69 76 65 20 77 69 or can't live wi
0110: 74 68 20 69 74 2e 20 54 68 65 72 65 20 69 73 20 th it. There is
0120: 41 42 53 4f 4c 55 54 45 4c 59 20 4e 4f 20 57 41 ABSOLUTELY NO WA
0130: 52 52 41 4e 54 59 2c 20 65 78 70 6c 69 63 69 74 RRANTY, explicit
0140: 20 6f 72 20 69 6d 70 6c 69 65 64 2c 0a 20 2a 20 or implied,. *
0150: 6f 6e 20 74 68 69 73 20 73 6f 66 74 77 61 72 65 on this software
0160: 2e 0a 20 2a 2f 0a 0a 0a 23 69 6e 63 6c 75 64 65 .. */...#include
0170: 20 22 63 6f 6e 66 69 67 2e 68 22 0a 23 69 6e 63 "config.h".#inc
0180: 6c 75 64 65 20 22 74 72 61 6d 70 6f 6c 69 6e 65 lude "trampoline
0190: 2e 68 22 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 .h"..#if defined
01a0: 28 5f 5f 68 70 70 61 5f 5f 29 0a 23 69 66 20 30 (__hppa__).#if 0
01b0: 0a 23 64 65 66 69 6e 65 20 5f 5f 68 70 70 61 6f .#define __hppao
01c0: 6c 64 5f 5f 20 20 2f 2a 20 4f 6c 64 20 74 72 61 ld__ /* Old tra
01d0: 6d 70 6f 6c 69 6e 65 2c 20 72 65 61 6c 20 6d 61 mpoline, real ma
01e0: 63 68 69 6e 65 20 63 6f 64 65 2e 20 2a 2f 0a 23 chine code. */.#
01f0: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 5f 5f 68 else.#define __h
0200: 70 70 61 6e 65 77 5f 5f 20 20 2f 2a 20 4e 65 77 ppanew__ /* New
0210: 20 74 72 61 6d 70 6f 6c 69 6e 65 2c 20 6a 75 73 trampoline, jus
0220: 74 20 61 20 63 6c 6f 73 75 72 65 2e 20 2a 2f 0a t a closure. */.
0230: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 #endif.#endif.#i
0240: 66 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 f defined(__rs60
0250: 30 30 5f 5f 29 0a 23 69 66 20 21 64 65 66 69 6e 00__).#if !defin
0260: 65 64 28 5f 41 49 58 29 0a 23 64 65 66 69 6e 65 ed(_AIX).#define
0270: 20 5f 5f 72 73 36 30 30 30 73 79 73 76 34 5f 5f __rs6000sysv4__
0280: 20 20 2f 2a 20 53 79 73 56 2e 34 20 41 42 49 2c /* SysV.4 ABI,
0290: 20 72 65 61 6c 20 6d 61 63 68 69 6e 65 20 63 6f real machine co
02a0: 64 65 2e 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65 de. */.#else.#de
02b0: 66 69 6e 65 20 5f 5f 72 73 36 30 30 30 61 69 78 fine __rs6000aix
02c0: 5f 5f 20 20 2f 2a 20 41 49 58 20 41 42 49 2c 20 __ /* AIX ABI,
02d0: 6a 75 73 74 20 61 20 63 6c 6f 73 75 72 65 2e 20 just a closure.
02e0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 */.#endif.#endif
02f0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 68 .#if defined(__h
0300: 70 70 61 6e 65 77 5f 5f 29 0a 2f 2a 0a 20 2a 20 ppanew__)./*. *
0310: 41 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 A function point
0320: 65 72 20 69 73 20 61 20 62 69 61 73 65 64 20 70 er is a biased p
0330: 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 61 74 61 ointer to a data
0340: 20 61 72 65 61 20 77 68 6f 73 65 20 66 69 72 73 area whose firs
0350: 74 20 77 6f 72 64 0a 20 2a 20 63 6f 6e 74 61 69 t word. * contai
0360: 6e 73 20 74 68 65 20 61 63 74 75 61 6c 20 61 64 ns the actual ad
0370: 64 72 65 73 73 20 6f 66 20 74 68 65 20 66 75 6e dress of the fun
0380: 63 74 69 6f 6e 2e 0a 20 2a 2f 0a 65 78 74 65 72 ction.. */.exter
0390: 6e 20 76 6f 69 64 20 74 72 61 6d 70 20 28 29 3b n void tramp ();
03a0: 20 2f 2a 20 74 72 61 6d 70 6f 6c 69 6e 65 20 70 /* trampoline p
03b0: 72 6f 74 6f 74 79 70 65 20 2a 2f 0a 2f 2a 20 57 rototype */./* W
03c0: 65 20 64 6f 6e 27 74 20 6e 65 65 64 20 74 6f 20 e don't need to
03d0: 74 61 6b 65 20 61 6e 79 20 73 70 65 63 69 61 6c take any special
03e0: 20 6d 65 61 73 75 72 65 73 20 74 6f 20 6d 61 6b measures to mak
03f0: 65 20 74 68 65 20 63 6f 64 65 20 65 78 65 63 75 e the code execu
0400: 74 61 62 6c 65 0a 20 2a 20 73 69 6e 63 65 20 74 table. * since t
0410: 68 65 20 61 63 74 75 61 6c 20 69 6e 73 74 72 75 he actual instru
0420: 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 20 74 68 ctions are in th
0430: 65 20 74 65 78 74 20 73 65 67 6d 65 6e 74 2e 0a e text segment..
0440: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 43 4f 44 45 */.#ifndef CODE
0450: 5f 45 58 45 43 55 54 41 42 4c 45 0a 23 64 65 66 _EXECUTABLE.#def
0460: 69 6e 65 20 43 4f 44 45 5f 45 58 45 43 55 54 41 ine CODE_EXECUTA
0470: 42 4c 45 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 BLE.#endif.#endi
0480: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
0490: 72 73 36 30 30 30 61 69 78 5f 5f 29 20 7c 7c 20 rs6000aix__) ||
04a0: 64 65 66 69 6e 65 64 28 5f 5f 69 61 36 34 5f 5f defined(__ia64__
04b0: 29 0a 2f 2a 0a 20 2a 20 41 20 66 75 6e 63 74 69 )./*. * A functi
04c0: 6f 6e 20 70 6f 69 6e 74 65 72 20 69 73 20 61 20 on pointer is a
04d0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 61 74 pointer to a dat
04e0: 61 20 61 72 65 61 20 77 68 6f 73 65 20 66 69 72 a area whose fir
04f0: 73 74 20 77 6f 72 64 20 63 6f 6e 74 61 69 6e 73 st word contains
0500: 0a 20 2a 20 74 68 65 20 61 63 74 75 61 6c 20 61 . * the actual a
0510: 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 66 75 ddress of the fu
0520: 6e 63 74 69 6f 6e 2e 0a 20 2a 2f 0a 65 78 74 65 nction.. */.exte
0530: 72 6e 20 76 6f 69 64 20 28 2a 74 72 61 6d 70 29 rn void (*tramp)
0540: 20 28 29 3b 20 2f 2a 20 74 72 61 6d 70 6f 6c 69 (); /* trampoli
0550: 6e 65 20 70 72 6f 74 6f 74 79 70 65 20 2a 2f 0a ne prototype */.
0560: 2f 2a 20 57 65 20 64 6f 6e 27 74 20 6e 65 65 64 /* We don't need
0570: 20 74 6f 20 74 61 6b 65 20 61 6e 79 20 73 70 65 to take any spe
0580: 63 69 61 6c 20 6d 65 61 73 75 72 65 73 20 74 6f cial measures to
0590: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 65 make the code e
05a0: 78 65 63 75 74 61 62 6c 65 0a 20 2a 20 73 69 6e xecutable. * sin
05b0: 63 65 20 74 68 65 20 61 63 74 75 61 6c 20 69 6e ce the actual in
05c0: 73 74 72 75 63 74 69 6f 6e 73 20 61 72 65 20 69 structions are i
05d0: 6e 20 74 68 65 20 74 65 78 74 20 73 65 67 6d 65 n the text segme
05e0: 6e 74 2e 0a 20 2a 2f 0a 23 69 66 6e 64 65 66 20 nt.. */.#ifndef
05f0: 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c 45 0a CODE_EXECUTABLE.
0600: 23 64 65 66 69 6e 65 20 43 4f 44 45 5f 45 58 45 #define CODE_EXE
0610: 43 55 54 41 42 4c 45 0a 23 65 6e 64 69 66 0a 23 CUTABLE.#endif.#
0620: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
0630: 64 28 5f 5f 6d 36 38 6b 5f 5f 29 0a 23 69 66 20 d(__m68k__).#if
0640: 64 65 66 69 6e 65 64 28 41 4d 49 47 41 29 20 2f defined(AMIGA) /
0650: 2a 20 41 6d 69 67 61 20 72 75 6e 6e 69 6e 67 20 * Amiga running
0660: 41 6d 69 67 61 4f 53 2c 20 6e 6f 74 20 4c 69 6e AmigaOS, not Lin
0670: 75 78 20 2a 2f 0a 23 69 66 6e 64 65 66 20 43 4f ux */.#ifndef CO
0680: 44 45 5f 45 58 45 43 55 54 41 42 4c 45 20 2f 2a DE_EXECUTABLE /*
0690: 20 63 6f 6e 66 69 67 75 72 65 20 67 75 65 73 73 configure guess
06a0: 65 73 20 77 72 6f 6e 67 3f 3f 20 2a 2f 0a 23 64 es wrong?? */.#d
06b0: 65 66 69 6e 65 20 43 4f 44 45 5f 45 58 45 43 55 efine CODE_EXECU
06c0: 54 41 42 4c 45 0a 23 65 6e 64 69 66 0a 23 65 6e TABLE.#endif.#en
06d0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e dif.#endif..#ifn
06e0: 64 65 66 20 43 4f 44 45 5f 45 58 45 43 55 54 41 def CODE_EXECUTA
06f0: 42 4c 45 0a 2f 2a 20 48 6f 77 20 64 6f 20 77 65 BLE./* How do we
0700: 20 6d 61 6b 65 20 74 68 65 20 74 72 61 6d 70 6f make the trampo
0710: 6c 69 6e 65 27 73 20 63 6f 64 65 20 65 78 65 63 line's code exec
0720: 75 74 61 62 6c 65 3f 20 2a 2f 0a 23 69 66 20 64 utable? */.#if d
0730: 65 66 69 6e 65 64 28 48 41 56 45 5f 4d 41 43 48 efined(HAVE_MACH
0740: 5f 56 4d 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 _VM) || defined(
0750: 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 7c 7c 20 64 __convex__) || d
0760: 65 66 69 6e 65 64 28 48 41 56 45 5f 57 4f 52 4b efined(HAVE_WORK
0770: 49 4e 47 5f 4d 50 52 4f 54 45 43 54 29 20 7c 7c ING_MPROTECT) ||
0780: 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 59 defined(HAVE_SY
0790: 53 5f 4d 38 38 4b 42 43 53 5f 48 29 0a 2f 2a 20 S_M88KBCS_H)./*
07a0: 6d 70 72 6f 74 65 63 74 28 29 20 5b 6f 72 20 65 mprotect() [or e
07b0: 71 75 69 76 61 6c 65 6e 74 5d 20 74 68 65 20 6d quivalent] the m
07c0: 61 6c 6c 6f 63 27 65 64 20 61 72 65 61 2e 20 2a alloc'ed area. *
07d0: 2f 0a 23 64 65 66 69 6e 65 20 45 58 45 43 55 54 /.#define EXECUT
07e0: 41 42 4c 45 5f 56 49 41 5f 4d 50 52 4f 54 45 43 ABLE_VIA_MPROTEC
07f0: 54 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 20 48 T.#else.#ifdef H
0800: 41 56 45 5f 4d 4d 41 50 0a 2f 2a 20 55 73 65 20 AVE_MMAP./* Use
0810: 61 6e 20 6d 6d 61 70 27 65 64 20 70 61 67 65 2e an mmap'ed page.
0820: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 45 43 */.#define EXEC
0830: 55 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 0a UTABLE_VIA_MMAP.
0840: 23 69 66 64 65 66 20 48 41 56 45 5f 4d 4d 41 50 #ifdef HAVE_MMAP
0850: 5f 41 4e 4f 4e 59 4d 4f 55 53 0a 2f 2a 20 55 73 _ANONYMOUS./* Us
0860: 65 20 6d 6d 61 70 20 77 69 74 68 20 74 68 65 20 e mmap with the
0870: 4d 41 50 5f 41 4e 4f 4e 59 4d 4f 55 53 20 6f 72 MAP_ANONYMOUS or
0880: 20 4d 41 50 5f 41 4e 4f 4e 20 66 6c 61 67 2e 20 MAP_ANON flag.
0890: 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 45 43 55 */.#define EXECU
08a0: 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 5f 41 TABLE_VIA_MMAP_A
08b0: 4e 4f 4e 59 4d 4f 55 53 0a 23 65 6c 73 65 0a 2f NONYMOUS.#else./
08c0: 2a 20 55 73 65 20 6d 6d 61 70 20 6f 6e 20 2f 64 * Use mmap on /d
08d0: 65 76 2f 7a 65 72 6f 2e 20 2a 2f 0a 23 64 65 66 ev/zero. */.#def
08e0: 69 6e 65 20 45 58 45 43 55 54 41 42 4c 45 5f 56 ine EXECUTABLE_V
08f0: 49 41 5f 4d 4d 41 50 5f 44 45 56 5a 45 52 4f 0a IA_MMAP_DEVZERO.
0900: 23 65 6e 64 69 66 0a 23 65 6c 73 65 0a 23 69 66 #endif.#else.#if
0910: 64 65 66 20 48 41 56 45 5f 53 48 4d 0a 2f 2a 20 def HAVE_SHM./*
0920: 55 73 65 20 61 6e 20 73 68 6d 61 74 27 65 64 20 Use an shmat'ed
0930: 70 61 67 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 page. */.#define
0940: 20 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f EXECUTABLE_VIA_
0950: 53 48 4d 0a 23 65 6c 73 65 0a 3f 3f 0a 23 65 6e SHM.#else.??.#en
0960: 64 69 66 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 dif.#endif.#endi
0970: 66 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 f.#endif..#inclu
0980: 64 65 20 3c 73 74 64 69 6f 2e 68 3e 20 2f 2a 20 de <stdio.h> /*
0990: 64 65 63 6c 61 72 65 73 20 66 70 72 69 6e 74 66 declares fprintf
09a0: 28 29 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 () */..#include
09b0: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 <sys/types.h>.#i
09c0: 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 nclude <stdlib.h
09d0: 3e 20 2f 2a 20 64 65 63 6c 61 72 65 73 20 61 62 > /* declares ab
09e0: 6f 72 74 28 29 2c 20 6d 61 6c 6c 6f 63 28 29 2c ort(), malloc(),
09f0: 20 66 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 free() */.#ifde
0a00: 66 20 48 41 56 45 5f 55 4e 49 53 54 44 5f 48 0a f HAVE_UNISTD_H.
0a10: 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 #include <unistd
0a20: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 .h>.#endif../* D
0a30: 65 63 6c 61 72 65 20 67 65 74 70 61 67 65 73 69 eclare getpagesi
0a40: 7a 65 28 29 2e 20 2a 2f 0a 23 69 66 64 65 66 20 ze(). */.#ifdef
0a50: 48 41 56 45 5f 47 45 54 50 41 47 45 53 49 5a 45 HAVE_GETPAGESIZE
0a60: 0a 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 .#ifdef __cplusp
0a70: 6c 75 73 0a 65 78 74 65 72 6e 20 22 43 22 20 52 lus.extern "C" R
0a80: 45 54 47 45 54 50 41 47 45 53 49 5a 45 54 59 50 ETGETPAGESIZETYP
0a90: 45 20 67 65 74 70 61 67 65 73 69 7a 65 20 28 76 E getpagesize (v
0aa0: 6f 69 64 29 3b 0a 23 65 6c 69 66 20 64 65 66 69 oid);.#elif defi
0ab0: 6e 65 64 28 5f 5f 53 54 44 43 5f 5f 29 0a 65 78 ned(__STDC__).ex
0ac0: 74 65 72 6e 20 52 45 54 47 45 54 50 41 47 45 53 tern RETGETPAGES
0ad0: 49 5a 45 54 59 50 45 20 67 65 74 70 61 67 65 73 IZETYPE getpages
0ae0: 69 7a 65 20 28 76 6f 69 64 29 3b 0a 23 65 6c 73 ize (void);.#els
0af0: 65 0a 65 78 74 65 72 6e 20 52 45 54 47 45 54 50 e.extern RETGETP
0b00: 41 47 45 53 49 5a 45 54 59 50 45 20 67 65 74 70 AGESIZETYPE getp
0b10: 61 67 65 73 69 7a 65 20 28 29 3b 0a 23 65 6e 64 agesize ();.#end
0b20: 69 66 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 20 if.#else.#ifdef
0b30: 48 41 56 45 5f 53 59 53 5f 50 41 52 41 4d 5f 48 HAVE_SYS_PARAM_H
0b40: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 70 .#include <sys/p
0b50: 61 72 61 6d 2e 68 3e 0a 23 65 6c 73 65 0a 2f 2a aram.h>.#else./*
0b60: 20 4e 6f 74 20 55 6e 69 78 2c 20 65 2e 67 2e 20 Not Unix, e.g.
0b70: 6d 69 6e 67 77 33 32 20 2a 2f 0a 23 64 65 66 69 mingw32 */.#defi
0b80: 6e 65 20 50 41 47 45 53 49 5a 45 20 34 30 39 36 ne PAGESIZE 4096
0b90: 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 .#endif.#define
0ba0: 67 65 74 70 61 67 65 73 69 7a 65 28 29 20 50 41 getpagesize() PA
0bb0: 47 45 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f GESIZE.#endif../
0bc0: 2a 20 44 65 63 6c 61 72 65 20 6d 70 72 6f 74 65 * Declare mprote
0bd0: 63 74 28 29 20 6f 72 20 65 71 75 69 76 61 6c 65 ct() or equivale
0be0: 6e 74 2e 20 2a 2f 0a 23 69 66 64 65 66 20 45 58 nt. */.#ifdef EX
0bf0: 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 ECUTABLE_VIA_MPR
0c00: 4f 54 45 43 54 0a 23 69 66 64 65 66 20 48 41 56 OTECT.#ifdef HAV
0c10: 45 5f 4d 41 43 48 5f 56 4d 0a 23 69 6e 63 6c 75 E_MACH_VM.#inclu
0c20: 64 65 20 3c 73 79 73 2f 72 65 73 6f 75 72 63 65 de <sys/resource
0c30: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 .h>.#include <ma
0c40: 63 68 2f 6d 61 63 68 5f 69 6e 74 65 72 66 61 63 ch/mach_interfac
0c50: 65 2e 68 3e 0a 23 69 66 64 65 66 20 4e 65 58 54 e.h>.#ifdef NeXT
0c60: 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 68 2f .#include <mach/
0c70: 6d 61 63 68 5f 69 6e 69 74 2e 68 3e 0a 23 65 6e mach_init.h>.#en
0c80: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6f 73 66 dif.#ifdef __osf
0c90: 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 __.#include <mac
0ca0: 68 5f 69 6e 69 74 2e 68 3e 0a 23 65 6e 64 69 66 h_init.h>.#endif
0cb0: 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 68 2f .#include <mach/
0cc0: 6d 61 63 68 69 6e 65 2f 76 6d 5f 70 61 72 61 6d machine/vm_param
0cd0: 2e 68 3e 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 .h>.#else.#ifdef
0ce0: 20 48 41 56 45 5f 53 59 53 5f 4d 38 38 4b 42 43 HAVE_SYS_M88KBC
0cf0: 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 S_H.#include <sy
0d00: 73 2f 6d 38 38 6b 62 63 73 2e 68 3e 0a 23 64 65 s/m88kbcs.h>.#de
0d10: 66 69 6e 65 20 67 65 74 70 61 67 65 73 69 7a 65 fine getpagesize
0d20: 28 29 20 20 34 30 39 36 20 20 2f 2a 20 3f 3f 20 () 4096 /* ??
0d30: 2a 2f 0a 23 65 6c 73 65 0a 23 69 6e 63 6c 75 64 */.#else.#includ
0d40: 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a e <sys/types.h>.
0d50: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 6d 6d #include <sys/mm
0d60: 61 6e 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 65 6e an.h>.#endif.#en
0d70: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 dif.#endif../* D
0d80: 65 63 6c 61 72 65 20 6d 6d 61 70 28 29 2e 20 2a eclare mmap(). *
0d90: 2f 0a 23 69 66 64 65 66 20 45 58 45 43 55 54 41 /.#ifdef EXECUTA
0da0: 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 0a 23 69 6e BLE_VIA_MMAP.#in
0db0: 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 clude <sys/types
0dc0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 .h>.#include <sy
0dd0: 73 2f 6d 6d 61 6e 2e 68 3e 0a 23 69 66 20 21 64 s/mman.h>.#if !d
0de0: 65 66 69 6e 65 64 28 50 52 4f 54 5f 45 58 45 43 efined(PROT_EXEC
0df0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 50 52 4f ) && defined(PRO
0e00: 54 5f 45 58 45 43 55 54 45 29 20 2f 2a 20 49 72 T_EXECUTE) /* Ir
0e10: 69 78 20 34 2e 30 2e 35 20 6e 65 65 64 73 20 74 ix 4.0.5 needs t
0e20: 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 his */.#define P
0e30: 52 4f 54 5f 45 58 45 43 20 50 52 4f 54 5f 45 58 ROT_EXEC PROT_EX
0e40: 45 43 55 54 45 0a 23 65 6e 64 69 66 0a 23 65 6e ECUTE.#endif.#en
0e50: 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 65 20 dif../* Declare
0e60: 6f 70 65 6e 28 29 2e 20 2a 2f 0a 23 69 66 64 65 open(). */.#ifde
0e70: 66 20 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 f EXECUTABLE_VIA
0e80: 5f 4d 4d 41 50 5f 44 45 56 5a 45 52 4f 0a 23 69 _MMAP_DEVZERO.#i
0e90: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 nclude <sys/type
0ea0: 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 75 s.h>.#include <u
0eb0: 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 nistd.h>.#includ
0ec0: 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a 23 69 66 64 e <fcntl.h>.#ifd
0ed0: 65 66 20 4f 50 45 4e 5f 4e 45 45 44 53 5f 53 59 ef OPEN_NEEDS_SY
0ee0: 53 5f 46 49 4c 45 5f 48 0a 23 69 6e 63 6c 75 64 S_FILE_H.#includ
0ef0: 65 20 3c 73 79 73 2f 66 69 6c 65 2e 68 3e 0a 23 e <sys/file.h>.#
0f00: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a endif.#endif../*
0f10: 20 44 65 63 6c 61 72 65 20 73 68 6d 67 65 74 28 Declare shmget(
0f20: 29 2c 20 73 68 6d 61 74 28 29 2c 20 73 68 6d 63 ), shmat(), shmc
0f30: 74 6c 28 29 2e 20 2a 2f 0a 23 69 66 64 65 66 20 tl(). */.#ifdef
0f40: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 53 EXECUTABLE_VIA_S
0f50: 48 4d 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 HM.#include <sys
0f60: 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 /types.h>.#inclu
0f70: 64 65 20 3c 73 79 73 2f 69 70 63 2e 68 3e 0a 23 de <sys/ipc.h>.#
0f80: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 68 6d include <sys/shm
0f90: 2e 68 3e 0a 23 69 66 64 65 66 20 48 41 56 45 5f .h>.#ifdef HAVE_
0fa0: 53 59 53 5f 53 59 53 4d 41 43 52 4f 53 5f 48 0a SYS_SYSMACROS_H.
0fb0: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 79 #include <sys/sy
0fc0: 73 6d 61 63 72 6f 73 2e 68 3e 0a 23 65 6e 64 69 smacros.h>.#endi
0fd0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 53 75 70 f.#endif../* Sup
0fe0: 70 6f 72 74 20 66 6f 72 20 69 6e 73 74 72 75 63 port for instruc
0ff0: 74 69 6f 6e 20 63 61 63 68 65 20 66 6c 75 73 68 tion cache flush
1000: 2e 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 69 33 . */.#ifdef __i3
1010: 38 36 5f 5f 0a 23 69 66 20 64 65 66 69 6e 65 64 86__.#if defined
1020: 28 5f 57 49 4e 33 32 29 20 2f 2a 20 57 69 6e 64 (_WIN32) /* Wind
1030: 6f 77 73 4e 54 20 6f 72 20 57 69 6e 64 6f 77 73 owsNT or Windows
1040: 39 35 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 49 95 */.#define WI
1050: 4e 33 32 5f 4c 45 41 4e 5f 41 4e 44 5f 4d 45 41 N32_LEAN_AND_MEA
1060: 4e 0a 23 64 65 66 69 6e 65 20 57 49 4e 33 32 5f N.#define WIN32_
1070: 45 58 54 52 41 5f 4c 45 41 4e 0a 23 69 6e 63 6c EXTRA_LEAN.#incl
1080: 75 64 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a ude <windows.h>.
1090: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 #endif.#endif.#i
10a0: 66 64 65 66 20 5f 5f 6d 36 38 6b 5f 5f 0a 23 69 fdef __m68k__.#i
10b0: 66 20 64 65 66 69 6e 65 64 28 41 4d 49 47 41 29 f defined(AMIGA)
10c0: 20 2f 2a 20 41 6d 69 67 61 20 72 75 6e 6e 69 6e /* Amiga runnin
10d0: 67 20 41 6d 69 67 61 4f 53 2c 20 6e 6f 74 20 4c g AmigaOS, not L
10e0: 69 6e 75 78 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 inux */.#include
10f0: 20 3c 65 78 65 63 2f 74 79 70 65 73 2e 68 3e 0a <exec/types.h>.
1100: 23 69 6e 63 6c 75 64 65 20 3c 65 78 65 63 2f 65 #include <exec/e
1110: 78 65 63 62 61 73 65 2e 68 3e 0a 23 69 6e 63 6c xecbase.h>.#incl
1120: 75 64 65 20 3c 70 72 6f 74 6f 2f 65 78 65 63 2e ude <proto/exec.
1130: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 h>.#endif.#ifdef
1140: 20 68 70 75 78 0a 23 69 6e 63 6c 75 64 65 20 3c hpux.#include <
1150: 73 79 73 2f 63 61 63 68 65 2e 68 3e 0a 23 65 6e sys/cache.h>.#en
1160: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 dif.#endif.#if d
1170: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 efined(__mips__)
1180: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 || defined(__mi
1190: 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 psn32__) || defi
11a0: 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a ned(__mips64__).
11b0: 23 69 66 64 65 66 20 75 6c 74 72 69 78 0a 23 69 #ifdef ultrix.#i
11c0: 6e 63 6c 75 64 65 20 3c 6d 69 70 73 2f 63 61 63 nclude <mips/cac
11d0: 68 65 63 74 6c 2e 68 3e 0a 23 65 6c 73 65 0a 23 hectl.h>.#else.#
11e0: 69 66 64 65 66 20 6c 69 6e 75 78 0a 23 69 6e 63 ifdef linux.#inc
11f0: 6c 75 64 65 20 3c 61 73 6d 2f 63 61 63 68 65 63 lude <asm/cachec
1200: 74 6c 2e 68 3e 0a 23 65 6c 73 65 0a 23 69 66 64 tl.h>.#else.#ifd
1210: 65 66 20 48 41 56 45 5f 53 59 53 5f 43 41 43 48 ef HAVE_SYS_CACH
1220: 45 43 54 4c 5f 48 0a 23 69 6e 63 6c 75 64 65 20 ECTL_H.#include
1230: 3c 73 79 73 2f 63 61 63 68 65 63 74 6c 2e 68 3e <sys/cachectl.h>
1240: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 .#endif.#endif.#
1250: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 endif.#endif.#if
1260: 64 65 66 20 5f 5f 6d 38 38 6b 5f 5f 0a 23 69 6e def __m88k__.#in
1270: 63 6c 75 64 65 20 3c 73 79 73 2f 73 79 73 6c 6f clude <sys/syslo
1280: 63 61 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 2f 2a cal.h>.#endif./*
1290: 20 49 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 79 Inline assembly
12a0: 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 69 6e function for in
12b0: 73 74 72 75 63 74 69 6f 6e 20 63 61 63 68 65 20 struction cache
12c0: 66 6c 75 73 68 2e 20 2a 2f 0a 23 69 66 20 64 65 flush. */.#if de
12d0: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 fined(__sparc__)
12e0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 || defined(__sp
12f0: 61 72 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 arc64__) || defi
1300: 6e 65 64 28 5f 5f 61 6c 70 68 61 5f 5f 29 20 7c ned(__alpha__) |
1310: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 | defined(__hppa
1320: 6f 6c 64 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 old__) || define
1330: 64 28 5f 5f 72 73 36 30 30 30 73 79 73 76 34 5f d(__rs6000sysv4_
1340: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
1350: 63 6f 6e 76 65 78 5f 5f 29 0a 23 69 66 64 65 66 convex__).#ifdef
1360: 20 5f 5f 47 4e 55 43 5f 5f 0a 65 78 74 65 72 6e __GNUC__.extern
1370: 20 69 6e 6c 69 6e 65 0a 23 69 66 20 64 65 66 69 inline.#if defi
1380: 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 7c ned(__sparc__) |
1390: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 | defined(__spar
13a0: 63 36 34 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20 c64__).#include
13b0: 22 63 61 63 68 65 2d 73 70 61 72 63 2e 63 22 0a "cache-sparc.c".
13c0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
13d0: 61 6c 70 68 61 5f 5f 0a 23 69 6e 63 6c 75 64 65 alpha__.#include
13e0: 20 22 63 61 63 68 65 2d 61 6c 70 68 61 2e 63 22 "cache-alpha.c"
13f0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
1400: 5f 68 70 70 61 5f 5f 0a 23 69 6e 63 6c 75 64 65 _hppa__.#include
1410: 20 22 63 61 63 68 65 2d 68 70 70 61 2e 63 22 0a "cache-hppa.c".
1420: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
1430: 72 73 36 30 30 30 5f 5f 0a 23 69 6e 63 6c 75 64 rs6000__.#includ
1440: 65 20 22 63 61 63 68 65 2d 72 73 36 30 30 30 2e e "cache-rs6000.
1450: 63 22 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 c".#endif.#ifdef
1460: 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a 23 69 6e 63 __convex__.#inc
1470: 6c 75 64 65 20 22 63 61 63 68 65 2d 63 6f 6e 76 lude "cache-conv
1480: 65 78 2e 63 22 0a 23 65 6e 64 69 66 0a 23 65 6c ex.c".#endif.#el
1490: 73 65 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f se.#if defined(_
14a0: 5f 73 70 61 72 63 5f 5f 29 20 7c 7c 20 64 65 66 _sparc__) || def
14b0: 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f ined(__sparc64__
14c0: 29 0a 65 78 74 65 72 6e 20 76 6f 69 64 20 5f 5f ).extern void __
14d0: 54 52 5f 63 6c 65 61 72 5f 63 61 63 68 65 5f 34 TR_clear_cache_4
14e0: 28 29 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e ();.#else.extern
14f0: 20 76 6f 69 64 20 5f 5f 54 52 5f 63 6c 65 61 72 void __TR_clear
1500: 5f 63 61 63 68 65 28 29 3b 0a 23 65 6e 64 69 66 _cache();.#endif
1510: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a .#endif.#endif..
1520: 2f 2a 20 4c 65 6e 67 74 68 20 61 6e 64 20 61 6c /* Length and al
1530: 69 67 6e 6d 65 6e 74 20 6f 66 20 74 72 61 6d 70 ignment of tramp
1540: 6f 6c 69 6e 65 20 2a 2f 0a 23 69 66 64 65 66 20 oline */.#ifdef
1550: 5f 5f 69 33 38 36 5f 5f 0a 23 64 65 66 69 6e 65 __i386__.#define
1560: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 31 35 TRAMP_LENGTH 15
1570: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 .#define TRAMP_A
1580: 4c 49 47 4e 20 31 36 20 20 2f 2a 20 34 20 66 6f LIGN 16 /* 4 fo
1590: 72 20 61 20 69 33 38 36 2c 20 31 36 20 66 6f 72 r a i386, 16 for
15a0: 20 61 20 69 34 38 36 20 2a 2f 0a 23 65 6e 64 69 a i486 */.#endi
15b0: 66 0a 23 69 66 64 65 66 20 5f 5f 6d 36 38 6b 5f f.#ifdef __m68k_
15c0: 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f _.#define TRAMP_
15d0: 4c 45 4e 47 54 48 20 31 38 0a 23 64 65 66 69 6e LENGTH 18.#defin
15e0: 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 31 36 e TRAMP_ALIGN 16
15f0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
1600: 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 ned(__mips__) &&
1610: 20 21 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 !defined(__mips
1620: 6e 33 32 5f 5f 29 0a 23 64 65 66 69 6e 65 20 54 n32__).#define T
1630: 52 41 4d 50 5f 4c 45 4e 47 54 48 20 33 32 0a 23 RAMP_LENGTH 32.#
1640: 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 define TRAMP_ALI
1650: 47 4e 20 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 GN 4.#endif.#ifd
1660: 65 66 20 5f 5f 6d 69 70 73 6e 33 32 5f 5f 0a 23 ef __mipsn32__.#
1670: 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e define TRAMP_LEN
1680: 47 54 48 20 33 36 0a 23 64 65 66 69 6e 65 20 54 GTH 36.#define T
1690: 52 41 4d 50 5f 41 4c 49 47 4e 20 34 0a 23 65 6e RAMP_ALIGN 4.#en
16a0: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 69 70 dif.#ifdef __mip
16b0: 73 36 34 6f 6c 64 5f 5f 0a 23 64 65 66 69 6e 65 s64old__.#define
16c0: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 38 34 TRAMP_LENGTH 84
16d0: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 .#define TRAMP_A
16e0: 4c 49 47 4e 20 34 0a 23 65 6e 64 69 66 0a 23 69 LIGN 4.#endif.#i
16f0: 66 64 65 66 20 5f 5f 6d 69 70 73 36 34 5f 5f 0a fdef __mips64__.
1700: 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 #define TRAMP_LE
1710: 4e 47 54 48 20 34 38 0a 23 64 65 66 69 6e 65 20 NGTH 48.#define
1720: 54 52 41 4d 50 5f 41 4c 49 47 4e 20 38 0a 23 65 TRAMP_ALIGN 8.#e
1730: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
1740: 28 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 (__sparc__) && !
1750: 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 defined(__sparc6
1760: 34 5f 5f 29 0a 23 64 65 66 69 6e 65 20 54 52 41 4__).#define TRA
1770: 4d 50 5f 4c 45 4e 47 54 48 20 32 38 0a 23 64 65 MP_LENGTH 28.#de
1780: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
1790: 20 31 36 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 16.#endif.#ifde
17a0: 66 20 5f 5f 73 70 61 72 63 36 34 5f 5f 0a 23 64 f __sparc64__.#d
17b0: 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 efine TRAMP_LENG
17c0: 54 48 20 34 38 0a 23 64 65 66 69 6e 65 20 54 52 TH 48.#define TR
17d0: 41 4d 50 5f 41 4c 49 47 4e 20 31 36 0a 23 65 6e AMP_ALIGN 16.#en
17e0: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 61 6c 70 dif.#ifdef __alp
17f0: 68 61 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 ha__.#define TRA
1800: 4d 50 5f 4c 45 4e 47 54 48 20 34 38 0a 23 64 65 MP_LENGTH 48.#de
1810: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
1820: 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 8.#endif.#ifdef
1830: 20 5f 5f 68 70 70 61 6f 6c 64 5f 5f 0a 23 64 65 __hppaold__.#de
1840: 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 fine TRAMP_LENGT
1850: 48 20 35 36 0a 23 64 65 66 69 6e 65 20 54 52 41 H 56.#define TRA
1860: 4d 50 5f 41 4c 49 47 4e 20 31 36 0a 23 65 6e 64 MP_ALIGN 16.#end
1870: 69 66 0a 23 69 66 64 65 66 20 5f 5f 68 70 70 61 if.#ifdef __hppa
1880: 6e 65 77 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 new__.#define TR
1890: 41 4d 50 5f 4c 45 4e 47 54 48 20 32 30 0a 23 64 AMP_LENGTH 20.#d
18a0: 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 efine TRAMP_ALIG
18b0: 4e 20 31 36 0a 23 64 65 66 69 6e 65 20 54 52 41 N 16.#define TRA
18c0: 4d 50 5f 42 49 41 53 20 32 0a 23 65 6e 64 69 66 MP_BIAS 2.#endif
18d0: 0a 23 69 66 64 65 66 20 5f 5f 61 72 6d 5f 5f 0a .#ifdef __arm__.
18e0: 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 #define TRAMP_LE
18f0: 4e 47 54 48 20 34 34 0a 23 64 65 66 69 6e 65 20 NGTH 44.#define
1900: 54 52 41 4d 50 5f 41 4c 49 47 4e 20 34 0a 23 65 TRAMP_ALIGN 4.#e
1910: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 72 73 ndif.#ifdef __rs
1920: 36 30 30 30 73 79 73 76 34 5f 5f 0a 23 64 65 66 6000sysv4__.#def
1930: 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 ine TRAMP_LENGTH
1940: 20 33 36 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 36.#define TRAM
1950: 50 5f 41 4c 49 47 4e 20 34 0a 23 65 6e 64 69 66 P_ALIGN 4.#endif
1960: 0a 23 69 66 64 65 66 20 5f 5f 72 73 36 30 30 30 .#ifdef __rs6000
1970: 61 69 78 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 aix__.#define TR
1980: 41 4d 50 5f 4c 45 4e 47 54 48 20 32 34 0a 23 64 AMP_LENGTH 24.#d
1990: 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 efine TRAMP_ALIG
19a0: 4e 20 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 N 4.#endif.#ifde
19b0: 66 20 5f 5f 6d 38 38 6b 5f 5f 0a 23 64 65 66 69 f __m88k__.#defi
19c0: 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 ne TRAMP_LENGTH
19d0: 33 32 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 32.#define TRAMP
19e0: 5f 41 4c 49 47 4e 20 38 0a 23 65 6e 64 69 66 0a _ALIGN 8.#endif.
19f0: 23 69 66 64 65 66 20 5f 5f 63 6f 6e 76 65 78 5f #ifdef __convex_
1a00: 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f _.#define TRAMP_
1a10: 4c 45 4e 47 54 48 20 32 30 0a 23 64 65 66 69 6e LENGTH 20.#defin
1a20: 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 34 0a e TRAMP_ALIGN 4.
1a30: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
1a40: 69 61 36 34 5f 5f 0a 23 64 65 66 69 6e 65 20 54 ia64__.#define T
1a50: 52 41 4d 50 5f 4c 45 4e 47 54 48 20 34 30 0a 23 RAMP_LENGTH 40.#
1a60: 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 define TRAMP_ALI
1a70: 47 4e 20 31 36 0a 23 65 6e 64 69 66 0a 23 69 66 GN 16.#endif.#if
1a80: 64 65 66 20 5f 5f 78 38 36 5f 36 34 5f 5f 0a 23 def __x86_64__.#
1a90: 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e define TRAMP_LEN
1aa0: 47 54 48 20 33 32 0a 23 64 65 66 69 6e 65 20 54 GTH 32.#define T
1ab0: 52 41 4d 50 5f 41 4c 49 47 4e 20 31 36 0a 23 65 RAMP_ALIGN 16.#e
1ac0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 73 33 ndif.#ifdef __s3
1ad0: 39 30 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 90__.#define TRA
1ae0: 4d 50 5f 4c 45 4e 47 54 48 20 33 36 0a 23 64 65 MP_LENGTH 36.#de
1af0: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
1b00: 20 32 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 2.#endif..#ifnd
1b10: 65 66 20 54 52 41 4d 50 5f 42 49 41 53 0a 23 64 ef TRAMP_BIAS.#d
1b20: 65 66 69 6e 65 20 54 52 41 4d 50 5f 42 49 41 53 efine TRAMP_BIAS
1b30: 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 0.#endif..#if !
1b40: 64 65 66 69 6e 65 64 28 43 4f 44 45 5f 45 58 45 defined(CODE_EXE
1b50: 43 55 54 41 42 4c 45 29 20 26 26 20 21 64 65 66 CUTABLE) && !def
1b60: 69 6e 65 64 28 45 58 45 43 55 54 41 42 4c 45 5f ined(EXECUTABLE_
1b70: 56 49 41 5f 4d 50 52 4f 54 45 43 54 29 0a 2f 2a VIA_MPROTECT)./*
1b80: 20 41 49 58 20 64 6f 65 73 6e 27 74 20 73 75 70 AIX doesn't sup
1b90: 70 6f 72 74 20 6d 70 72 6f 74 65 63 74 28 29 20 port mprotect()
1ba0: 69 6e 20 6d 61 6c 6c 6f 63 27 65 64 20 6d 65 6d in malloc'ed mem
1bb0: 6f 72 79 2e 20 4d 75 73 74 20 67 65 74 20 70 61 ory. Must get pa
1bc0: 67 65 73 20 6f 66 0a 20 2a 20 6d 65 6d 6f 72 79 ges of. * memory
1bd0: 20 77 69 74 68 20 65 78 65 63 75 74 65 20 70 65 with execute pe
1be0: 72 6d 69 73 73 69 6f 6e 20 76 69 61 20 6d 6d 61 rmission via mma
1bf0: 70 28 29 2e 20 54 68 65 6e 20 6b 65 65 70 20 61 p(). Then keep a
1c00: 20 66 72 65 65 20 6c 69 73 74 20 6f 66 0a 20 2a free list of. *
1c10: 20 66 72 65 65 20 74 72 61 6d 70 6f 6c 69 6e 65 free trampoline
1c20: 73 2e 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 68 s.. */.static ch
1c30: 61 72 2a 20 66 72 65 65 6c 69 73 74 20 3d 20 4e ar* freelist = N
1c40: 55 4c 4c 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 ULL;.#endif..#if
1c50: 20 64 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f defined(__STDC_
1c60: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
1c70: 47 4e 55 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e GNUC__) || defin
1c80: 65 64 28 5f 5f 63 70 6c 75 73 70 6c 75 73 29 0a ed(__cplusplus).
1c90: 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 20 61 6c __TR_function al
1ca0: 6c 6f 63 5f 74 72 61 6d 70 6f 6c 69 6e 65 20 28 loc_trampoline (
1cb0: 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 20 61 64 __TR_function ad
1cc0: 64 72 65 73 73 2c 20 76 6f 69 64 2a 20 76 61 72 dress, void* var
1cd0: 69 61 62 6c 65 2c 20 76 6f 69 64 2a 20 64 61 74 iable, void* dat
1ce0: 61 29 0a 23 65 6c 73 65 0a 5f 5f 54 52 5f 66 75 a).#else.__TR_fu
1cf0: 6e 63 74 69 6f 6e 20 61 6c 6c 6f 63 5f 74 72 61 nction alloc_tra
1d00: 6d 70 6f 6c 69 6e 65 20 28 61 64 64 72 65 73 73 mpoline (address
1d10: 2c 20 76 61 72 69 61 62 6c 65 2c 20 64 61 74 61 , variable, data
1d20: 29 0a 20 20 5f 5f 54 52 5f 66 75 6e 63 74 69 6f ). __TR_functio
1d30: 6e 20 61 64 64 72 65 73 73 3b 0a 20 20 76 6f 69 n address;. voi
1d40: 64 2a 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 76 d* variable;. v
1d50: 6f 69 64 2a 20 64 61 74 61 3b 0a 23 65 6e 64 69 oid* data;.#endi
1d60: 66 0a 7b 0a 20 20 63 68 61 72 2a 20 66 75 6e 63 f.{. char* func
1d70: 74 69 6f 6e 3b 0a 0a 23 69 66 20 21 64 65 66 69 tion;..#if !defi
1d80: 6e 65 64 28 43 4f 44 45 5f 45 58 45 43 55 54 41 ned(CODE_EXECUTA
1d90: 42 4c 45 29 0a 20 20 73 74 61 74 69 63 20 6c 6f BLE). static lo
1da0: 6e 67 20 70 61 67 65 73 69 7a 65 20 3d 20 30 3b ng pagesize = 0;
1db0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 45 58 45 .#if defined(EXE
1dc0: 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 CUTABLE_VIA_MMAP
1dd0: 5f 44 45 56 5a 45 52 4f 29 0a 20 20 73 74 61 74 _DEVZERO). stat
1de0: 69 63 20 69 6e 74 20 7a 65 72 6f 5f 66 64 3b 0a ic int zero_fd;.
1df0: 23 65 6e 64 69 66 0a 20 20 2f 2a 20 46 69 72 73 #endif. /* Firs
1e00: 74 2c 20 67 65 74 20 74 68 65 20 70 61 67 65 20 t, get the page
1e10: 73 69 7a 65 20 6f 6e 63 65 20 61 6e 64 20 66 6f size once and fo
1e20: 72 20 61 6c 6c 2e 20 2a 2f 0a 20 20 69 66 20 28 r all. */. if (
1e30: 21 70 61 67 65 73 69 7a 65 29 0a 20 20 20 20 7b !pagesize). {
1e40: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 .#if defined(HAV
1e50: 45 5f 4d 41 43 48 5f 56 4d 29 0a 20 20 20 20 20 E_MACH_VM).
1e60: 20 70 61 67 65 73 69 7a 65 20 3d 20 76 6d 5f 70 pagesize = vm_p
1e70: 61 67 65 5f 73 69 7a 65 3b 0a 23 65 6c 73 65 0a age_size;.#else.
1e80: 20 20 20 20 20 20 70 61 67 65 73 69 7a 65 20 3d pagesize =
1e90: 20 67 65 74 70 61 67 65 73 69 7a 65 28 29 3b 0a getpagesize();.
1ea0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
1eb0: 65 64 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 ed(EXECUTABLE_VI
1ec0: 41 5f 4d 4d 41 50 5f 44 45 56 5a 45 52 4f 29 0a A_MMAP_DEVZERO).
1ed0: 20 20 20 20 20 20 7a 65 72 6f 5f 66 64 20 3d 20 zero_fd =
1ee0: 6f 70 65 6e 28 22 2f 64 65 76 2f 7a 65 72 6f 22 open("/dev/zero"
1ef0: 2c 4f 5f 52 44 4f 4e 4c 59 2c 30 36 34 34 29 3b ,O_RDONLY,0644);
1f00: 0a 20 20 20 20 20 20 69 66 20 28 7a 65 72 6f 5f . if (zero_
1f10: 66 64 20 3c 20 30 29 0a 20 20 20 20 20 20 20 20 fd < 0).
1f20: 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 { fprintf(stderr
1f30: 2c 22 74 72 61 6d 70 6f 6c 69 6e 65 3a 20 43 61 ,"trampoline: Ca
1f40: 6e 6e 6f 74 20 6f 70 65 6e 20 2f 64 65 76 2f 7a nnot open /dev/z
1f50: 65 72 6f 21 5c 6e 22 29 3b 20 61 62 6f 72 74 28 ero!\n"); abort(
1f60: 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 ); }.#endif.
1f70: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 31 }.#endif.. /* 1
1f80: 2e 20 41 6c 6c 6f 63 61 74 65 20 72 6f 6f 6d 20 . Allocate room
1f90: 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 */..#if !defined
1fa0: 28 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c 45 (CODE_EXECUTABLE
1fb0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 45 58 ) && !defined(EX
1fc0: 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 ECUTABLE_VIA_MPR
1fd0: 4f 54 45 43 54 29 0a 20 20 69 66 20 28 66 72 65 OTECT). if (fre
1fe0: 65 6c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 0a 20 elist == NULL).
1ff0: 20 20 20 7b 20 2f 2a 20 47 65 74 20 61 20 6e 65 { /* Get a ne
2000: 77 20 70 61 67 65 2e 20 2a 2f 0a 20 20 20 20 20 w page. */.
2010: 20 63 68 61 72 2a 20 70 61 67 65 3b 0a 23 69 66 char* page;.#if
2020: 64 65 66 20 45 58 45 43 55 54 41 42 4c 45 5f 56 def EXECUTABLE_V
2030: 49 41 5f 4d 4d 41 50 5f 41 4e 4f 4e 59 4d 4f 55 IA_MMAP_ANONYMOU
2040: 53 0a 20 20 20 20 20 20 70 61 67 65 20 3d 20 6d S. page = m
2050: 6d 61 70 28 30 2c 20 70 61 67 65 73 69 7a 65 2c map(0, pagesize,
2060: 20 50 52 4f 54 5f 52 45 41 44 20 7c 20 50 52 4f PROT_READ | PRO
2070: 54 5f 57 52 49 54 45 20 7c 20 50 52 4f 54 5f 45 T_WRITE | PROT_E
2080: 58 45 43 2c 20 4d 41 50 5f 41 4e 4f 4e 59 4d 4f XEC, MAP_ANONYMO
2090: 55 53 20 7c 20 4d 41 50 5f 56 41 52 49 41 42 4c US | MAP_VARIABL
20a0: 45 2c 20 2d 31 2c 20 30 29 3b 0a 23 65 6e 64 69 E, -1, 0);.#endi
20b0: 66 0a 23 69 66 64 65 66 20 45 58 45 43 55 54 41 f.#ifdef EXECUTA
20c0: 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 5f 44 45 56 BLE_VIA_MMAP_DEV
20d0: 5a 45 52 4f 0a 20 20 20 20 20 20 70 61 67 65 20 ZERO. page
20e0: 3d 20 6d 6d 61 70 28 30 2c 20 70 61 67 65 73 69 = mmap(0, pagesi
20f0: 7a 65 2c 20 50 52 4f 54 5f 52 45 41 44 20 7c 20 ze, PROT_READ |
2100: 50 52 4f 54 5f 57 52 49 54 45 20 7c 20 50 52 4f PROT_WRITE | PRO
2110: 54 5f 45 58 45 43 2c 20 4d 41 50 5f 50 52 49 56 T_EXEC, MAP_PRIV
2120: 41 54 45 2c 20 7a 65 72 6f 5f 66 64 2c 20 30 29 ATE, zero_fd, 0)
2130: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 ;.#endif.#ifdef
2140: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 53 EXECUTABLE_VIA_S
2150: 48 4d 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6d HM. int shm
2160: 69 64 20 3d 20 73 68 6d 67 65 74 28 49 50 43 5f id = shmget(IPC_
2170: 50 52 49 56 41 54 45 2c 20 70 61 67 65 73 69 7a PRIVATE, pagesiz
2180: 65 2c 20 30 37 30 30 7c 49 50 43 5f 43 52 45 41 e, 0700|IPC_CREA
2190: 54 29 3b 0a 20 20 20 20 20 20 69 66 20 28 73 68 T);. if (sh
21a0: 6d 69 64 3c 30 29 0a 20 20 20 20 20 20 20 20 7b mid<0). {
21b0: 20 70 61 67 65 20 3d 20 28 63 68 61 72 2a 29 28 page = (char*)(
21c0: 2d 31 29 3b 20 7d 0a 20 20 20 20 20 20 65 6c 73 -1); }. els
21d0: 65 0a 20 20 20 20 20 20 20 20 7b 20 70 61 67 65 e. { page
21e0: 20 3d 20 73 68 6d 61 74 28 73 68 6d 69 64 2c 20 = shmat(shmid,
21f0: 30 2c 20 30 29 3b 20 73 68 6d 63 74 6c 28 73 68 0, 0); shmctl(sh
2200: 6d 69 64 2c 20 49 50 43 5f 52 4d 49 44 2c 20 30 mid, IPC_RMID, 0
2210: 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 ); }.#endif.
2220: 20 20 69 66 20 28 70 61 67 65 20 3d 3d 20 28 63 if (page == (c
2230: 68 61 72 2a 29 28 2d 31 29 29 0a 20 20 20 20 20 har*)(-1)).
2240: 20 20 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 { fprintf(std
2250: 65 72 72 2c 22 74 72 61 6d 70 6f 6c 69 6e 65 3a err,"trampoline:
2260: 20 4f 75 74 20 6f 66 20 76 69 72 74 75 61 6c 20 Out of virtual
2270: 6d 65 6d 6f 72 79 21 5c 6e 22 29 3b 20 61 62 6f memory!\n"); abo
2280: 72 74 28 29 3b 20 7d 0a 20 20 20 20 20 20 2f 2a rt(); }. /*
2290: 20 46 69 6c 6c 20 69 74 20 77 69 74 68 20 66 72 Fill it with fr
22a0: 65 65 20 74 72 61 6d 70 6f 6c 69 6e 65 73 2e 20 ee trampolines.
22b0: 2a 2f 0a 20 20 20 20 20 20 7b 20 63 68 61 72 2a */. { char*
22c0: 2a 20 6c 61 73 74 20 3d 20 26 66 72 65 65 6c 69 * last = &freeli
22d0: 73 74 3b 0a 20 20 20 20 20 20 20 20 63 68 61 72 st;. char
22e0: 2a 20 70 61 67 65 5f 65 6e 64 20 3d 20 70 61 67 * page_end = pag
22f0: 65 20 2b 20 70 61 67 65 73 69 7a 65 3b 0a 20 20 e + pagesize;.
2300: 20 20 20 20 20 20 77 68 69 6c 65 20 28 70 61 67 while (pag
2310: 65 2b 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 3c e+TRAMP_LENGTH <
2320: 3d 20 70 61 67 65 5f 65 6e 64 29 0a 20 20 20 20 = page_end).
2330: 20 20 20 20 20 20 7b 20 2a 6c 61 73 74 20 3d 20 { *last =
2340: 70 61 67 65 3b 20 6c 61 73 74 20 3d 20 28 63 68 page; last = (ch
2350: 61 72 2a 2a 29 70 61 67 65 3b 20 70 61 67 65 20 ar**)page; page
2360: 2b 3d 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 3b += TRAMP_LENGTH;
2370: 20 7d 0a 20 20 20 20 20 20 20 20 2a 6c 61 73 74 }. *last
2380: 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 7d 20 7d = NULL;. } }
2390: 0a 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 66 72 . function = fr
23a0: 65 65 6c 69 73 74 3b 20 66 72 65 65 6c 69 73 74 eelist; freelist
23b0: 20 3d 20 2a 28 63 68 61 72 2a 2a 29 66 72 65 65 = *(char**)free
23c0: 6c 69 73 74 3b 0a 23 65 6c 73 65 0a 20 20 7b 20 list;.#else. {
23d0: 63 68 61 72 2a 20 72 6f 6f 6d 20 3d 20 28 63 68 char* room = (ch
23e0: 61 72 2a 29 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 ar*) malloc(size
23f0: 6f 66 28 76 6f 69 64 2a 29 20 2b 20 54 52 41 4d of(void*) + TRAM
2400: 50 5f 4c 45 4e 47 54 48 20 2b 20 54 52 41 4d 50 P_LENGTH + TRAMP
2410: 5f 41 4c 49 47 4e 2d 31 29 3b 0a 20 20 20 20 69 _ALIGN-1);. i
2420: 66 20 28 21 72 6f 6f 6d 29 0a 20 20 20 20 20 20 f (!room).
2430: 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 { fprintf(stderr
2440: 2c 22 74 72 61 6d 70 6f 6c 69 6e 65 3a 20 4f 75 ,"trampoline: Ou
2450: 74 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 65 6d t of virtual mem
2460: 6f 72 79 21 5c 6e 22 29 3b 20 61 62 6f 72 74 28 ory!\n"); abort(
2470: 29 3b 20 7d 0a 20 20 20 20 66 75 6e 63 74 69 6f ); }. functio
2480: 6e 20 3d 20 28 63 68 61 72 2a 29 28 28 28 6c 6f n = (char*)(((lo
2490: 6e 67 29 72 6f 6f 6d 20 2b 20 73 69 7a 65 6f 66 ng)room + sizeof
24a0: 28 76 6f 69 64 2a 29 20 2b 20 54 52 41 4d 50 5f (void*) + TRAMP_
24b0: 41 4c 49 47 4e 2d 31 29 20 26 20 2d 54 52 41 4d ALIGN-1) & -TRAM
24c0: 50 5f 41 4c 49 47 4e 29 3b 0a 20 20 20 20 28 28 P_ALIGN);. ((
24d0: 63 68 61 72 2a 2a 29 66 75 6e 63 74 69 6f 6e 29 char**)function)
24e0: 5b 2d 31 5d 20 3d 20 72 6f 6f 6d 3b 20 2f 2a 20 [-1] = room; /*
24f0: 62 61 63 6b 70 6f 69 6e 74 65 72 20 66 6f 72 20 backpointer for
2500: 66 72 65 65 5f 74 72 61 6d 70 6f 6c 69 6e 65 28 free_trampoline(
2510: 29 20 2a 2f 0a 20 20 7d 0a 23 65 6e 64 69 66 0a ) */. }.#endif.
2520: 0a 20 20 2f 2a 20 32 2e 20 46 69 6c 6c 20 6f 75 . /* 2. Fill ou
2530: 74 20 74 68 65 20 74 72 61 6d 70 6f 6c 69 6e 65 t the trampoline
2540: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 69 33 38 */.#ifdef __i38
2550: 36 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6__. /* functio
2560: 6e 3a 0a 20 20 20 2a 20 20 20 20 6d 6f 76 6c 20 n:. * movl
2570: 24 3c 64 61 74 61 3e 2c 3c 76 61 72 69 61 62 6c $<data>,<variabl
2580: 65 3e 09 09 43 37 20 30 35 20 3c 76 61 72 69 61 e>..C7 05 <varia
2590: 62 6c 65 3e 20 3c 64 61 74 61 3e 0a 20 20 20 2a ble> <data>. *
25a0: 20 20 20 20 6a 6d 70 20 3c 61 64 64 72 65 73 73 jmp <address
25b0: 3e 09 09 09 45 39 20 3c 61 64 64 72 65 73 73 3e >...E9 <address>
25c0: 2d 3c 68 65 72 65 3e 0a 20 20 20 2a 20 68 65 72 -<here>. * her
25d0: 65 3a 0a 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f e:. */. *(sho
25e0: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
25f0: 2b 20 30 29 20 3d 20 30 78 30 35 43 37 3b 0a 20 + 0) = 0x05C7;.
2600: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
2610: 63 74 69 6f 6e 20 2b 20 32 29 20 3d 20 28 6c 6f ction + 2) = (lo
2620: 6e 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 ng) variable;.
2630: 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 *(long *) (func
2640: 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 6c 6f 6e tion + 6) = (lon
2650: 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 63 68 61 g) data;. *(cha
2660: 72 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 r *) (function
2670: 2b 31 30 29 20 3d 20 30 78 45 39 3b 0a 20 20 2a +10) = 0xE9;. *
2680: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
2690: 69 6f 6e 20 2b 31 31 29 20 3d 20 28 6c 6f 6e 67 ion +11) = (long
26a0: 29 20 61 64 64 72 65 73 73 20 2d 20 28 6c 6f 6e ) address - (lon
26b0: 67 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 31 g) (function + 1
26c0: 35 29 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 5);.#define is_t
26d0: 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 ramp(function)
26e0: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
26f0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
2700: 6e 20 2b 20 30 29 20 3d 3d 20 30 78 30 35 43 37 n + 0) == 0x05C7
2710: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
2720: 65 64 20 63 68 61 72 20 2a 29 20 20 28 66 75 6e ed char *) (fun
2730: 63 74 69 6f 6e 20 2b 31 30 29 20 3d 3d 20 30 78 ction +10) == 0x
2740: 45 39 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 E9.#define tramp
2750: 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f _address(functio
2760: 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a n) \. *(long *
2770: 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 31 ) (function +11
2780: 29 20 2b 20 28 6c 6f 6e 67 29 20 28 66 75 6e 63 ) + (long) (func
2790: 74 69 6f 6e 20 2b 20 31 35 29 0a 23 64 65 66 69 tion + 15).#defi
27a0: 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c ne tramp_variabl
27b0: 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 e(function) \.
27c0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
27d0: 63 74 69 6f 6e 20 2b 20 32 29 0a 23 64 65 66 69 ction + 2).#defi
27e0: 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 ne tramp_data(fu
27f0: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c nction) \. *(l
2800: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
2810: 6e 20 2b 20 36 29 0a 23 65 6e 64 69 66 0a 23 69 n + 6).#endif.#i
2820: 66 64 65 66 20 5f 5f 6d 36 38 6b 5f 5f 0a 20 20 fdef __m68k__.
2830: 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 /* function:.
2840: 2a 20 20 20 20 6d 6f 76 65 6c 20 23 3c 64 61 74 * movel #<dat
2850: 61 3e 2c 3c 76 61 72 69 61 62 6c 65 3e 09 32 33 a>,<variable>.23
2860: 20 46 43 20 3c 64 61 74 61 3e 20 3c 76 61 72 69 FC <data> <vari
2870: 61 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 6a 6d able>. * jm
2880: 70 20 3c 61 64 64 72 65 73 73 3e 09 09 09 34 45 p <address>...4E
2890: 20 46 39 20 3c 61 64 64 72 65 73 73 3e 0a 20 20 F9 <address>.
28a0: 20 2a 20 20 20 20 6e 6f 70 09 09 09 09 34 45 20 * nop....4E
28b0: 37 31 0a 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f 71. */. *(sho
28c0: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
28d0: 2b 20 30 29 20 3d 20 30 78 32 33 46 43 3b 0a 20 + 0) = 0x23FC;.
28e0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
28f0: 63 74 69 6f 6e 20 2b 20 32 29 20 3d 20 28 6c 6f ction + 2) = (lo
2900: 6e 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 6c 6f ng) data;. *(lo
2910: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
2920: 20 2b 20 36 29 20 3d 20 28 6c 6f 6e 67 29 20 76 + 6) = (long) v
2930: 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 73 68 6f ariable;. *(sho
2940: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
2950: 2b 31 30 29 20 3d 20 30 78 34 45 46 39 3b 0a 20 +10) = 0x4EF9;.
2960: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
2970: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 28 6c 6f ction +12) = (lo
2980: 6e 67 29 20 61 64 64 72 65 73 73 3b 0a 20 20 2a ng) address;. *
2990: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
29a0: 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 34 45 37 ion +16) = 0x4E7
29b0: 31 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 1;.#define is_tr
29c0: 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c amp(function) \
29d0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
29e0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
29f0: 20 2b 20 30 29 20 3d 3d 20 30 78 32 33 46 43 20 + 0) == 0x23FC
2a00: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
2a10: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
2a20: 74 69 6f 6e 20 2b 31 30 29 20 3d 3d 20 30 78 34 tion +10) == 0x4
2a30: 45 46 39 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 EF9 && \. *(uns
2a40: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
2a50: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 3d function +16) ==
2a60: 20 30 78 34 45 37 31 0a 23 64 65 66 69 6e 65 20 0x4E71.#define
2a70: 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 tramp_address(fu
2a80: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c nction) \. *(l
2a90: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
2aa0: 6e 20 2b 31 32 29 0a 23 64 65 66 69 6e 65 20 74 n +12).#define t
2ab0: 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 ramp_variable(fu
2ac0: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c nction) \. *(l
2ad0: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
2ae0: 6e 20 2b 20 36 29 0a 23 64 65 66 69 6e 65 20 74 n + 6).#define t
2af0: 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 ramp_data(functi
2b00: 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 on) \. *(long
2b10: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
2b20: 32 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 2).#endif.#if de
2b30: 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 fined(__mips__)
2b40: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 6d 69 && !defined(__mi
2b50: 70 73 6e 33 32 5f 5f 29 0a 20 20 2f 2a 20 66 75 psn32__). /* fu
2b60: 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 nction:. *
2b70: 6c 69 20 24 32 2c 3c 64 61 74 61 3e 26 30 78 66 li $2,<data>&0xf
2b80: 66 66 66 30 30 30 30 09 09 33 43 20 30 32 20 68 fff0000..3C 02 h
2b90: 69 31 36 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a i16(<data>). *
2ba0: 20 20 20 20 6f 72 69 20 24 32 2c 24 32 2c 3c 64 ori $2,$2,<d
2bb0: 61 74 61 3e 26 30 78 66 66 66 66 09 09 33 34 20 ata>&0xffff..34
2bc0: 34 32 20 6c 6f 31 36 28 3c 64 61 74 61 3e 29 0a 42 lo16(<data>).
2bd0: 20 20 20 2a 20 20 20 20 73 77 20 24 32 2c 3c 76 * sw $2,<v
2be0: 61 72 69 61 62 6c 65 3e 09 09 33 43 20 30 31 20 ariable>..3C 01
2bf0: 68 69 31 36 28 3c 76 61 72 69 61 62 6c 65 3e 29 hi16(<variable>)
2c00: 0a 20 20 20 2a 20 20 20 20 09 09 09 09 41 43 20 . * ....AC
2c10: 32 32 20 6c 6f 31 36 28 3c 76 61 72 69 61 62 6c 22 lo16(<variabl
2c20: 65 3e 29 0a 20 20 20 2a 20 20 20 20 6c 69 20 24 e>). * li $
2c30: 32 35 2c 3c 61 64 64 72 65 73 73 3e 26 30 78 66 25,<address>&0xf
2c40: 66 66 66 30 30 30 30 09 33 43 20 31 39 20 68 69 fff0000.3C 19 hi
2c50: 31 36 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 20 16(<address>).
2c60: 20 2a 20 20 20 20 6f 72 69 20 24 32 35 2c 24 32 * ori $25,$2
2c70: 35 2c 3c 61 64 64 72 65 73 73 3e 26 30 78 66 66 5,<address>&0xff
2c80: 66 66 09 33 37 20 33 39 20 6c 6f 31 36 28 3c 61 ff.37 39 lo16(<a
2c90: 64 64 72 65 73 73 3e 29 0a 20 20 20 2a 20 20 20 ddress>). *
2ca0: 20 6a 20 24 32 35 09 09 09 09 30 33 20 32 30 20 j $25....03 20
2cb0: 30 30 20 30 38 0a 20 20 20 2a 20 20 20 20 6e 6f 00 08. * no
2cc0: 70 09 09 09 09 30 30 20 30 30 20 30 30 20 30 30 p....00 00 00 00
2cd0: 0a 20 20 20 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 . */. /* What
2ce0: 20 61 62 6f 75 74 20 62 69 67 20 65 6e 64 69 61 about big endia
2cf0: 6e 20 2f 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 n / little endia
2d00: 6e 20 3f 3f 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 n ?? */. *(shor
2d10: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
2d20: 20 30 29 20 3d 20 30 78 33 43 30 32 3b 0a 20 20 0) = 0x3C02;.
2d30: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
2d40: 74 69 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 tion + 2) = (uns
2d50: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 igned long) data
2d60: 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 >> 16;. *(shor
2d70: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
2d80: 20 34 29 20 3d 20 30 78 33 34 34 32 3b 0a 20 20 4) = 0x3442;.
2d90: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
2da0: 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 75 6e 73 tion + 6) = (uns
2db0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 igned long) data
2dc0: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 73 & 0xffff;. *(s
2dd0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
2de0: 6e 20 2b 20 38 29 20 3d 20 30 78 33 43 30 31 3b n + 8) = 0x3C01;
2df0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
2e00: 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 28 unction +10) = (
2e10: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 unsigned long) v
2e20: 61 72 69 61 62 6c 65 20 3e 3e 20 31 36 3b 0a 20 ariable >> 16;.
2e30: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
2e40: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 78 41 ction +12) = 0xA
2e50: 43 32 32 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a C22;. *(short *
2e60: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 ) (function +14)
2e70: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
2e80: 67 29 20 76 61 72 69 61 62 6c 65 20 26 20 30 78 g) variable & 0x
2e90: 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 20 ffff;. *(short
2ea0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 *) (function +16
2eb0: 29 20 3d 20 30 78 33 43 31 39 3b 0a 20 20 2a 28 ) = 0x3C19;. *(
2ec0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
2ed0: 6f 6e 20 2b 31 38 29 20 3d 20 28 75 6e 73 69 67 on +18) = (unsig
2ee0: 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 ned long) addres
2ef0: 73 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f s >> 16;. *(sho
2f00: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
2f10: 2b 32 30 29 20 3d 20 30 78 33 37 33 39 3b 0a 20 +20) = 0x3739;.
2f20: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
2f30: 63 74 69 6f 6e 20 2b 32 32 29 20 3d 20 28 75 6e ction +22) = (un
2f40: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 signed long) add
2f50: 72 65 73 73 20 26 20 30 78 66 66 66 66 3b 0a 20 ress & 0xffff;.
2f60: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
2f70: 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 78 30 ction +24) = 0x0
2f80: 33 32 30 30 30 30 38 3b 0a 20 20 2a 28 6c 6f 6e 3200008;. *(lon
2f90: 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 g *) (function
2fa0: 2b 32 38 29 20 3d 20 30 78 30 30 30 30 30 30 30 +28) = 0x0000000
2fb0: 30 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 0;.#define is_tr
2fc0: 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c amp(function) \
2fd0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
2fe0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
2ff0: 20 2b 20 30 29 20 3d 3d 20 30 78 33 43 30 32 20 + 0) == 0x3C02
3000: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
3010: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
3020: 74 69 6f 6e 20 2b 20 34 29 20 3d 3d 20 30 78 33 tion + 4) == 0x3
3030: 34 34 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 442 && \. *(uns
3040: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
3050: 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 3d function + 8) ==
3060: 20 30 78 33 43 30 31 20 26 26 20 5c 0a 20 20 2a 0x3C01 && \. *
3070: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
3080: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 *) (function +12
3090: 29 20 3d 3d 20 30 78 41 43 32 32 20 26 26 20 5c ) == 0xAC22 && \
30a0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
30b0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
30c0: 20 2b 31 36 29 20 3d 3d 20 30 78 33 43 31 39 20 +16) == 0x3C19
30d0: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
30e0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
30f0: 74 69 6f 6e 20 2b 32 30 29 20 3d 3d 20 30 78 33 tion +20) == 0x3
3100: 37 33 39 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 739 && \. *(uns
3110: 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 20 28 igned long *) (
3120: 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 3d function +24) ==
3130: 20 30 78 30 33 32 30 30 30 30 38 20 26 26 20 5c 0x03200008 && \
3140: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f . *(unsigned lo
3150: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
3160: 20 2b 32 38 29 20 3d 3d 20 30 78 30 30 30 30 30 +28) == 0x00000
3170: 30 30 30 0a 23 64 65 66 69 6e 65 20 68 69 6c 6f 000.#define hilo
3180: 28 68 69 77 6f 72 64 2c 6c 6f 77 6f 72 64 29 20 (hiword,loword)
3190: 20 5c 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 \. (((unsigned
31a0: 20 6c 6f 6e 67 29 20 28 68 69 77 6f 72 64 29 20 long) (hiword)
31b0: 3c 3c 20 31 36 29 20 7c 20 28 75 6e 73 69 67 6e << 16) | (unsign
31c0: 65 64 20 6c 6f 6e 67 29 20 28 6c 6f 77 6f 72 64 ed long) (loword
31d0: 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 )).#define tramp
31e0: 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f _address(functio
31f0: 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 n) \. hilo(*(u
3200: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
3210: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 2c (function +18),
3220: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
3230: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
3240: 32 32 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 22)).#define tra
3250: 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 mp_variable(func
3260: 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 tion) \. hilo(
3270: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
3280: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
3290: 30 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 0), *(unsigned s
32a0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
32b0: 6e 20 2b 31 34 29 29 0a 23 64 65 66 69 6e 65 20 n +14)).#define
32c0: 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 tramp_data(funct
32d0: 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a ion) \. hilo(*
32e0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
32f0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 *) (function + 2
3300: 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 ), *(unsigned sh
3310: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3320: 20 2b 20 36 29 29 0a 23 65 6e 64 69 66 0a 23 69 + 6)).#endif.#i
3330: 66 64 65 66 20 5f 5f 6d 69 70 73 6e 33 32 5f 5f fdef __mipsn32__
3340: 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a . /* function:.
3350: 20 20 20 2a 20 20 20 20 6c 77 20 24 32 2c 32 34 * lw $2,24
3360: 28 24 32 35 29 09 09 09 38 46 20 32 32 20 30 30 ($25)...8F 22 00
3370: 20 31 38 0a 20 20 20 2a 20 20 20 20 6c 77 20 24 18. * lw $
3380: 33 2c 32 38 28 24 32 35 29 09 09 09 38 46 20 32 3,28($25)...8F 2
3390: 33 20 30 30 20 31 43 0a 20 20 20 2a 20 20 20 20 3 00 1C. *
33a0: 73 77 20 24 33 2c 30 28 24 32 29 09 09 09 41 43 sw $3,0($2)...AC
33b0: 20 34 33 20 30 30 20 30 30 0a 20 20 20 2a 20 20 43 00 00. *
33c0: 20 20 6c 77 20 24 32 35 2c 33 32 28 24 32 35 29 lw $25,32($25)
33d0: 09 09 09 38 46 20 33 39 20 30 30 20 32 30 0a 20 ...8F 39 00 20.
33e0: 20 20 2a 20 20 20 20 6a 20 24 32 35 09 09 09 09 * j $25....
33f0: 30 33 20 32 30 20 30 30 20 30 38 0a 20 20 20 2a 03 20 00 08. *
3400: 20 20 20 20 6e 6f 70 09 09 09 09 30 30 20 30 30 nop....00 00
3410: 20 30 30 20 30 30 0a 20 20 20 2a 20 20 20 20 2e 00 00. * .
3420: 77 6f 72 64 20 3c 76 61 72 69 61 62 6c 65 3e 09 word <variable>.
3430: 09 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 20 2a .<variable>. *
3440: 20 20 20 20 2e 77 6f 72 64 20 3c 64 61 74 61 3e .word <data>
3450: 09 09 09 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 ...<data>. *
3460: 20 20 2e 77 6f 72 64 20 3c 61 64 64 72 65 73 73 .word <address
3470: 3e 09 09 09 3c 61 64 64 72 65 73 73 3e 0a 20 20 >...<address>.
3480: 20 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 20 61 62 */. /* What ab
3490: 6f 75 74 20 62 69 67 20 65 6e 64 69 61 6e 20 2f out big endian /
34a0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 3f little endian ?
34b0: 3f 20 2a 2f 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ? */. *(unsigne
34c0: 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 d int *) (functi
34d0: 6f 6e 20 2b 20 30 29 20 3d 20 30 78 38 46 32 32 on + 0) = 0x8F22
34e0: 30 30 31 38 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 0018;. *(unsign
34f0: 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 ed int *) (funct
3500: 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 38 46 32 ion + 4) = 0x8F2
3510: 33 30 30 31 43 3b 0a 20 20 2a 28 75 6e 73 69 67 3001C;. *(unsig
3520: 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 ned int *) (func
3530: 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 78 41 43 tion + 8) = 0xAC
3540: 34 33 30 30 30 30 3b 0a 20 20 2a 28 75 6e 73 69 430000;. *(unsi
3550: 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e gned int *) (fun
3560: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 78 38 ction +12) = 0x8
3570: 46 33 39 30 30 32 30 3b 0a 20 20 2a 28 75 6e 73 F390020;. *(uns
3580: 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 igned int *) (fu
3590: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 nction +16) = 0x
35a0: 30 33 32 30 30 30 30 38 3b 0a 20 20 2a 28 75 6e 03200008;. *(un
35b0: 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 signed int *) (f
35c0: 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 unction +20) = 0
35d0: 78 30 30 30 30 30 30 30 30 3b 0a 20 20 2a 28 75 x00000000;. *(u
35e0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 nsigned int *) (
35f0: 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 function +24) =
3600: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 76 (unsigned int) v
3610: 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 75 6e 73 ariable;. *(uns
3620: 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 igned int *) (fu
3630: 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 28 75 nction +28) = (u
3640: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 64 61 74 nsigned int) dat
3650: 61 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 a;. *(unsigned
3660: 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e int *) (function
3670: 20 2b 33 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 +32) = (unsigne
3680: 64 20 69 6e 74 29 20 61 64 64 72 65 73 73 3b 0a d int) address;.
3690: 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 #define is_tramp
36a0: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
36b0: 2a 28 69 6e 74 20 2a 29 20 20 20 20 20 20 20 20 *(int *)
36c0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 (function + 0)
36d0: 20 3d 3d 20 30 78 38 46 32 32 30 30 31 38 20 26 == 0x8F220018 &
36e0: 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 & \. *(int *)
36f0: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
3700: 6e 20 2b 20 34 29 20 3d 3d 20 30 78 38 46 32 33 n + 4) == 0x8F23
3710: 30 30 31 43 20 26 26 20 5c 0a 20 20 2a 28 69 6e 001C && \. *(in
3720: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 t *) (f
3730: 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 3d 20 unction + 8) ==
3740: 30 78 41 43 34 33 30 30 30 30 20 26 26 20 5c 0a 0xAC430000 && \.
3750: 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 20 20 *(int *)
3760: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 (function +1
3770: 32 29 20 3d 3d 20 30 78 38 46 33 39 30 30 32 30 2) == 0x8F390020
3780: 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 && \. *(int *)
3790: 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 (funct
37a0: 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 30 33 ion +16) == 0x03
37b0: 32 30 30 30 30 38 20 26 26 20 5c 0a 20 20 2a 28 200008 && \. *(
37c0: 69 6e 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 int *)
37d0: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d (function +20) =
37e0: 3d 20 30 78 30 30 30 30 30 30 30 30 0a 23 64 65 = 0x00000000.#de
37f0: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
3800: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
3810: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 *(unsigned int
3820: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 *) (function +3
3830: 32 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 2).#define tramp
3840: 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 _variable(functi
3850: 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 on) \. *(unsig
3860: 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 ned int *) (func
3870: 74 69 6f 6e 20 2b 32 34 29 0a 23 64 65 66 69 6e tion +24).#defin
3880: 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e e tramp_data(fun
3890: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e ction) \. *(un
38a0: 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 signed int *) (f
38b0: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 0a 23 65 6e unction +28).#en
38c0: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 69 70 dif.#ifdef __mip
38d0: 73 36 34 6f 6c 64 5f 5f 0a 20 20 2f 2a 20 66 75 s64old__. /* fu
38e0: 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 nction:. *
38f0: 64 6c 69 20 24 32 2c 3c 76 61 72 69 61 62 6c 65 dli $2,<variable
3900: 3e 09 09 33 43 20 30 32 20 68 69 31 36 28 68 69 >..3C 02 hi16(hi
3910: 33 32 28 3c 76 61 72 69 61 62 6c 65 3e 29 29 0a 32(<variable>)).
3920: 20 20 20 2a 09 09 09 09 09 33 34 20 34 32 20 6c *.....34 42 l
3930: 6f 31 36 28 68 69 33 32 28 3c 76 61 72 69 61 62 o16(hi32(<variab
3940: 6c 65 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 30 le>)). *.....0
3950: 30 20 30 32 20 31 34 20 33 38 0a 20 20 20 2a 09 0 02 14 38. *.
3960: 09 09 09 09 33 34 20 34 32 20 68 69 31 36 28 6c ....34 42 hi16(l
3970: 6f 33 32 28 3c 76 61 72 69 61 62 6c 65 3e 29 29 o32(<variable>))
3980: 0a 20 20 20 2a 09 09 09 09 09 30 30 20 30 32 20 . *.....00 02
3990: 31 34 20 33 38 0a 20 20 20 2a 09 09 09 09 09 33 14 38. *.....3
39a0: 34 20 34 32 20 6c 6f 31 36 28 6c 6f 33 32 28 3c 4 42 lo16(lo32(<
39b0: 76 61 72 69 61 62 6c 65 3e 29 29 0a 20 20 20 2a variable>)). *
39c0: 20 20 20 20 64 6c 69 20 24 33 2c 3c 64 61 74 61 dli $3,<data
39d0: 3e 09 09 09 33 43 20 30 33 20 68 69 31 36 28 68 >...3C 03 hi16(h
39e0: 69 33 32 28 3c 64 61 74 61 3e 29 29 0a 20 20 20 i32(<data>)).
39f0: 2a 09 09 09 09 09 33 34 20 36 33 20 6c 6f 31 36 *.....34 63 lo16
3a00: 28 68 69 33 32 28 3c 64 61 74 61 3e 29 29 0a 20 (hi32(<data>)).
3a10: 20 20 2a 09 09 09 09 09 30 30 20 30 33 20 31 43 *.....00 03 1C
3a20: 20 33 38 0a 20 20 20 2a 09 09 09 09 09 33 34 20 38. *.....34
3a30: 36 33 20 68 69 31 36 28 6c 6f 33 32 28 3c 64 61 63 hi16(lo32(<da
3a40: 74 61 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 30 ta>)). *.....0
3a50: 30 20 30 33 20 31 43 20 33 38 0a 20 20 20 2a 09 0 03 1C 38. *.
3a60: 09 09 09 09 33 34 20 36 33 20 6c 6f 31 36 28 6c ....34 63 lo16(l
3a70: 6f 33 32 28 3c 64 61 74 61 3e 29 29 0a 20 20 20 o32(<data>)).
3a80: 2a 20 20 20 20 73 64 20 24 33 2c 30 28 24 32 29 * sd $3,0($2)
3a90: 09 09 09 46 43 20 34 33 20 30 30 20 30 30 0a 20 ...FC 43 00 00.
3aa0: 20 20 2a 20 20 20 20 64 6c 69 20 24 32 35 2c 3c * dli $25,<
3ab0: 61 64 64 72 65 73 73 3e 09 09 33 43 20 31 39 20 address>..3C 19
3ac0: 68 69 31 36 28 68 69 33 32 28 3c 61 64 64 72 65 hi16(hi32(<addre
3ad0: 73 73 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 33 ss>)). *.....3
3ae0: 37 20 33 39 20 6c 6f 31 36 28 68 69 33 32 28 3c 7 39 lo16(hi32(<
3af0: 61 64 64 72 65 73 73 3e 29 29 0a 20 20 20 2a 09 address>)). *.
3b00: 09 09 09 09 30 30 20 31 39 20 43 43 20 33 38 0a ....00 19 CC 38.
3b10: 20 20 20 2a 09 09 09 09 09 33 37 20 33 39 20 68 *.....37 39 h
3b20: 69 31 36 28 6c 6f 33 32 28 3c 61 64 64 72 65 73 i16(lo32(<addres
3b30: 73 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 30 30 s>)). *.....00
3b40: 20 31 39 20 43 43 20 33 38 0a 20 20 20 2a 09 09 19 CC 38. *..
3b50: 09 09 09 33 37 20 33 39 20 6c 6f 31 36 28 6c 6f ...37 39 lo16(lo
3b60: 33 32 28 3c 61 64 64 72 65 73 73 3e 29 29 0a 20 32(<address>)).
3b70: 20 20 2a 20 20 20 20 6a 20 24 32 35 09 09 09 09 * j $25....
3b80: 30 33 20 32 30 20 30 30 20 30 38 0a 20 20 20 2a 03 20 00 08. *
3b90: 20 20 20 20 6e 6f 70 09 09 09 09 30 30 20 30 30 nop....00 00
3ba0: 20 30 30 20 30 30 0a 20 20 20 2a 2f 0a 20 20 2f 00 00. */. /
3bb0: 2a 20 57 68 61 74 20 61 62 6f 75 74 20 62 69 67 * What about big
3bc0: 20 65 6e 64 69 61 6e 20 2f 20 6c 69 74 74 6c 65 endian / little
3bd0: 20 65 6e 64 69 61 6e 20 3f 3f 20 2a 2f 0a 20 20 endian ?? */.
3be0: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
3bf0: 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 33 43 tion + 0) = 0x3C
3c00: 30 32 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 02;. *(short *)
3c10: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 (function + 2)
3c20: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
3c30: 29 20 76 61 72 69 61 62 6c 65 20 3e 3e 20 34 38 ) variable >> 48
3c40: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
3c50: 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 20 function + 4) =
3c60: 30 78 33 34 34 32 3b 0a 20 20 2a 28 73 68 6f 72 0x3442;. *(shor
3c70: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
3c80: 20 36 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 64 6) = ((unsigned
3c90: 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 20 long) variable
3ca0: 3e 3e 20 33 32 29 20 26 20 30 78 66 66 66 66 3b >> 32) & 0xffff;
3cb0: 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 . *(int *) (f
3cc0: 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 unction + 8) = 0
3cd0: 78 30 30 30 32 31 34 33 38 3b 0a 20 20 2a 28 73 x00021438;. *(s
3ce0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
3cf0: 6e 20 2b 31 32 29 20 3d 20 30 78 33 34 34 32 3b n +12) = 0x3442;
3d00: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3d10: 75 6e 63 74 69 6f 6e 20 2b 31 34 29 20 3d 20 28 unction +14) = (
3d20: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
3d30: 76 61 72 69 61 62 6c 65 20 3e 3e 20 31 36 29 20 variable >> 16)
3d40: 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e & 0xffff;. *(in
3d50: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
3d60: 20 2b 31 36 29 20 3d 20 30 78 30 30 30 32 31 34 +16) = 0x000214
3d70: 33 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 38;. *(short *)
3d80: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
3d90: 3d 20 30 78 33 34 34 32 3b 0a 20 20 2a 28 73 68 = 0x3442;. *(sh
3da0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3db0: 20 2b 32 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 +22) = (unsigne
3dc0: 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 d long) variable
3dd0: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 73 & 0xffff;. *(s
3de0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
3df0: 6e 20 2b 32 34 29 20 3d 20 30 78 33 43 30 33 3b n +24) = 0x3C03;
3e00: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3e10: 75 6e 63 74 69 6f 6e 20 2b 32 36 29 20 3d 20 28 unction +26) = (
3e20: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d
3e30: 61 74 61 20 3e 3e 20 34 38 3b 0a 20 20 2a 28 73 ata >> 48;. *(s
3e40: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
3e50: 6e 20 2b 32 38 29 20 3d 20 30 78 33 34 36 33 3b n +28) = 0x3463;
3e60: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3e70: 75 6e 63 74 69 6f 6e 20 2b 33 30 29 20 3d 20 28 unction +30) = (
3e80: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
3e90: 64 61 74 61 20 3e 3e 20 33 32 29 20 26 20 30 78 data >> 32) & 0x
3ea0: 66 66 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 ffff;. *(int *)
3eb0: 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 (function +32
3ec0: 29 20 3d 20 30 78 30 30 30 33 31 43 33 38 3b 0a ) = 0x00031C38;.
3ed0: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
3ee0: 6e 63 74 69 6f 6e 20 2b 33 36 29 20 3d 20 30 78 nction +36) = 0x
3ef0: 33 34 36 33 3b 0a 20 20 2a 28 73 68 6f 72 74 20 3463;. *(short
3f00: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 38 *) (function +38
3f10: 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 64 20 6c ) = ((unsigned l
3f20: 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 31 36 29 ong) data >> 16)
3f30: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 & 0xffff;. *(i
3f40: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
3f50: 6e 20 2b 34 30 29 20 3d 20 30 78 30 30 30 33 31 n +40) = 0x00031
3f60: 43 33 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a C38;. *(short *
3f70: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 34 29 ) (function +44)
3f80: 20 3d 20 30 78 33 34 36 33 3b 0a 20 20 2a 28 73 = 0x3463;. *(s
3f90: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
3fa0: 6e 20 2b 34 36 29 20 3d 20 28 75 6e 73 69 67 6e n +46) = (unsign
3fb0: 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 26 20 ed long) data &
3fc0: 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e 74 20 0xffff;. *(int
3fd0: 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
3fe0: 34 38 29 20 3d 20 30 78 46 43 34 33 30 30 30 30 48) = 0xFC430000
3ff0: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
4000: 66 75 6e 63 74 69 6f 6e 20 2b 35 32 29 20 3d 20 function +52) =
4010: 30 78 33 43 31 39 3b 0a 20 20 2a 28 73 68 6f 72 0x3C19;. *(shor
4020: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
4030: 35 34 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 54) = (unsigned
4040: 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 20 3e 3e long) address >>
4050: 20 34 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 48;. *(short *
4060: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 36 29 ) (function +56)
4070: 20 3d 20 30 78 33 37 33 39 3b 0a 20 20 2a 28 73 = 0x3739;. *(s
4080: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
4090: 6e 20 2b 35 38 29 20 3d 20 28 28 75 6e 73 69 67 n +58) = ((unsig
40a0: 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 ned long) addres
40b0: 73 20 3e 3e 20 33 32 29 20 26 20 30 78 66 66 66 s >> 32) & 0xfff
40c0: 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 f;. *(int *)
40d0: 28 66 75 6e 63 74 69 6f 6e 20 2b 36 30 29 20 3d (function +60) =
40e0: 20 30 78 30 30 31 39 43 43 33 38 3b 0a 20 20 2a 0x0019CC38;. *
40f0: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
4100: 69 6f 6e 20 2b 36 34 29 20 3d 20 30 78 33 37 33 ion +64) = 0x373
4110: 39 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 9;. *(short *)
4120: 28 66 75 6e 63 74 69 6f 6e 20 2b 36 36 29 20 3d (function +66) =
4130: 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ((unsigned long
4140: 29 20 61 64 64 72 65 73 73 20 3e 3e 20 31 36 29 ) address >> 16)
4150: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 & 0xffff;. *(i
4160: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
4170: 6e 20 2b 36 38 29 20 3d 20 30 78 30 30 31 39 43 n +68) = 0x0019C
4180: 43 33 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a C38;. *(short *
4190: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 37 32 29 ) (function +72)
41a0: 20 3d 20 30 78 33 37 33 39 3b 0a 20 20 2a 28 73 = 0x3739;. *(s
41b0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
41c0: 6e 20 2b 37 34 29 20 3d 20 28 75 6e 73 69 67 6e n +74) = (unsign
41d0: 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 ed long) address
41e0: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 & 0xffff;. *(i
41f0: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
4200: 6e 20 2b 37 36 29 20 3d 20 30 78 30 33 32 30 30 n +76) = 0x03200
4210: 30 30 38 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 008;. *(int *)
4220: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 38 30 29 (function +80)
4230: 20 3d 20 30 78 30 30 30 30 30 30 30 30 3b 0a 23 = 0x00000000;.#
4240: 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 define is_tramp(
4250: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
4260: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
4270: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
4280: 29 20 3d 3d 20 30 78 33 43 30 32 20 26 26 20 5c ) == 0x3C02 && \
4290: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
42a0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
42b0: 20 2b 20 34 29 20 3d 3d 20 30 78 33 34 34 32 20 + 4) == 0x3442
42c0: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
42d0: 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 d int *) (func
42e0: 74 69 6f 6e 20 2b 20 38 29 20 3d 3d 20 30 78 30 tion + 8) == 0x0
42f0: 30 30 32 31 34 33 38 20 26 26 20 5c 0a 20 20 2a 0021438 && \. *
4300: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
4310: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 *) (function +12
4320: 29 20 3d 3d 20 30 78 33 34 34 32 20 26 26 20 5c ) == 0x3442 && \
4330: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
4340: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
4350: 20 2b 31 36 29 20 3d 3d 20 30 78 30 30 30 32 31 +16) == 0x00021
4360: 34 33 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 438 && \. *(uns
4370: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
4380: 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 3d function +20) ==
4390: 20 30 78 33 34 34 32 20 26 26 20 5c 0a 20 20 2a 0x3442 && \. *
43a0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
43b0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 *) (function +24
43c0: 29 20 3d 3d 20 30 78 33 43 30 33 20 26 26 20 5c ) == 0x3C03 && \
43d0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
43e0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
43f0: 20 2b 32 38 29 20 3d 3d 20 30 78 33 34 36 33 20 +28) == 0x3463
4400: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
4410: 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 d int *) (func
4420: 74 69 6f 6e 20 2b 33 32 29 20 3d 3d 20 30 78 30 tion +32) == 0x0
4430: 30 30 33 31 43 33 38 20 26 26 20 5c 0a 20 20 2a 0031C38 && \. *
4440: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
4450: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 36 *) (function +36
4460: 29 20 3d 3d 20 30 78 33 34 36 33 20 26 26 20 5c ) == 0x3463 && \
4470: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
4480: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
4490: 20 2b 34 30 29 20 3d 3d 20 30 78 30 30 30 33 31 +40) == 0x00031
44a0: 43 33 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 C38 && \. *(uns
44b0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
44c0: 66 75 6e 63 74 69 6f 6e 20 2b 34 34 29 20 3d 3d function +44) ==
44d0: 20 30 78 33 34 36 33 20 26 26 20 5c 0a 20 20 2a 0x3463 && \. *
44e0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
44f0: 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 38 (function +48
4500: 29 20 3d 3d 20 30 78 46 43 34 33 30 30 30 30 20 ) == 0xFC430000
4510: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
4520: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
4530: 74 69 6f 6e 20 2b 35 32 29 20 3d 3d 20 30 78 33 tion +52) == 0x3
4540: 43 31 39 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 C19 && \. *(uns
4550: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
4560: 66 75 6e 63 74 69 6f 6e 20 2b 35 36 29 20 3d 3d function +56) ==
4570: 20 30 78 33 37 33 39 20 26 26 20 5c 0a 20 20 2a 0x3739 && \. *
4580: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
4590: 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 36 30 (function +60
45a0: 29 20 3d 3d 20 30 78 30 30 31 39 43 43 33 38 20 ) == 0x0019CC38
45b0: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
45c0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
45d0: 74 69 6f 6e 20 2b 36 34 29 20 3d 3d 20 30 78 33 tion +64) == 0x3
45e0: 37 33 39 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 739 && \. *(uns
45f0: 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 igned int *) (
4600: 66 75 6e 63 74 69 6f 6e 20 2b 36 38 29 20 3d 3d function +68) ==
4610: 20 30 78 30 30 31 39 43 43 33 38 20 26 26 20 5c 0x0019CC38 && \
4620: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
4630: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
4640: 20 2b 37 32 29 20 3d 3d 20 30 78 33 37 33 39 20 +72) == 0x3739
4650: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
4660: 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 d int *) (func
4670: 74 69 6f 6e 20 2b 37 36 29 20 3d 3d 20 30 78 30 tion +76) == 0x0
4680: 33 32 30 30 30 30 38 20 26 26 20 5c 0a 20 20 2a 3200008 && \. *
4690: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
46a0: 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 38 30 (function +80
46b0: 29 20 3d 3d 20 30 78 30 30 30 30 30 30 30 30 0a ) == 0x00000000.
46c0: 23 64 65 66 69 6e 65 20 68 69 6c 6f 28 77 6f 72 #define hilo(wor
46d0: 64 33 2c 77 6f 72 64 32 2c 77 6f 72 64 31 2c 77 d3,word2,word1,w
46e0: 6f 72 64 30 29 20 20 5c 0a 20 20 28 28 28 75 6e ord0) \. (((un
46f0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f signed long) (wo
4700: 72 64 33 29 20 3c 3c 20 34 38 29 20 7c 20 28 28 rd3) << 48) | ((
4710: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 unsigned long) (
4720: 77 6f 72 64 32 29 20 3c 3c 20 33 32 29 20 7c 20 word2) << 32) |
4730: 5c 0a 20 20 20 28 28 75 6e 73 69 67 6e 65 64 20 \. ((unsigned
4740: 6c 6f 6e 67 29 20 28 77 6f 72 64 31 29 20 3c 3c long) (word1) <<
4750: 20 31 36 29 20 7c 20 28 75 6e 73 69 67 6e 65 64 16) | (unsigned
4760: 20 6c 6f 6e 67 29 20 28 77 6f 72 64 30 29 29 0a long) (word0)).
4770: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 #define tramp_ad
4780: 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 dress(function)
4790: 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 \. hilo(*(unsi
47a0: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
47b0: 75 6e 63 74 69 6f 6e 20 2b 35 34 29 2c 20 5c 0a unction +54), \.
47c0: 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 *(unsigne
47d0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
47e0: 74 69 6f 6e 20 2b 35 38 29 2c 20 5c 0a 20 20 20 tion +58), \.
47f0: 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 *(unsigned s
4800: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
4810: 6e 20 2b 36 36 29 2c 20 5c 0a 20 20 20 20 20 20 n +66), \.
4820: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
4830: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
4840: 37 34 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 74)).#define tra
4850: 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 mp_variable(func
4860: 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 tion) \. hilo(
4870: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
4880: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
4890: 32 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 2), \. *(u
48a0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
48b0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 2c (function + 6),
48c0: 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 6e 73 69 \. *(unsi
48d0: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
48e0: 75 6e 63 74 69 6f 6e 20 2b 31 34 29 2c 20 5c 0a unction +14), \.
48f0: 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 *(unsigne
4900: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
4910: 74 69 6f 6e 20 2b 32 32 29 29 0a 23 64 65 66 69 tion +22)).#defi
4920: 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 ne tramp_data(fu
4930: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c nction) \. hil
4940: 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f o(*(unsigned sho
4950: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
4960: 2b 32 36 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a +26), \. *
4970: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
4980: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 30 *) (function +30
4990: 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 6e ), \. *(un
49a0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
49b0: 28 66 75 6e 63 74 69 6f 6e 20 2b 33 38 29 2c 20 (function +38),
49c0: 5c 0a 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 \. *(unsig
49d0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
49e0: 6e 63 74 69 6f 6e 20 2b 34 36 29 29 0a 23 65 6e nction +46)).#en
49f0: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 69 70 dif.#ifdef __mip
4a00: 73 36 34 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 s64__. /* funct
4a10: 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 6c 64 20 ion:. * ld
4a20: 24 32 2c 32 34 28 24 32 35 29 09 09 09 44 46 20 $2,24($25)...DF
4a30: 32 32 20 30 30 20 31 38 0a 20 20 20 2a 20 20 20 22 00 18. *
4a40: 20 6c 64 20 24 33 2c 33 32 28 24 32 35 29 09 09 ld $3,32($25)..
4a50: 09 44 46 20 32 33 20 30 30 20 32 30 0a 20 20 20 .DF 23 00 20.
4a60: 2a 20 20 20 20 73 64 20 24 33 2c 30 28 24 32 29 * sd $3,0($2)
4a70: 09 09 09 46 43 20 34 33 20 30 30 20 30 30 0a 20 ...FC 43 00 00.
4a80: 20 20 2a 20 20 20 20 6c 64 20 24 32 35 2c 34 30 * ld $25,40
4a90: 28 24 32 35 29 09 09 09 44 46 20 33 39 20 30 30 ($25)...DF 39 00
4aa0: 20 32 38 0a 20 20 20 2a 20 20 20 20 6a 20 24 32 28. * j $2
4ab0: 35 09 09 09 09 30 33 20 32 30 20 30 30 20 30 38 5....03 20 00 08
4ac0: 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 09 09 09 . * nop....
4ad0: 30 30 20 30 30 20 30 30 20 30 30 0a 20 20 20 2a 00 00 00 00. *
4ae0: 20 20 20 20 2e 64 77 6f 72 64 20 3c 76 61 72 69 .dword <vari
4af0: 61 62 6c 65 3e 09 09 3c 76 61 72 69 61 62 6c 65 able>..<variable
4b00: 3e 0a 20 20 20 2a 20 20 20 20 2e 64 77 6f 72 64 >. * .dword
4b10: 20 3c 64 61 74 61 3e 09 09 09 3c 64 61 74 61 3e <data>...<data>
4b20: 0a 20 20 20 2a 20 20 20 20 2e 64 77 6f 72 64 20 . * .dword
4b30: 3c 61 64 64 72 65 73 73 3e 09 09 3c 61 64 64 72 <address>..<addr
4b40: 65 73 73 3e 0a 20 20 20 2a 2f 0a 20 20 2f 2a 20 ess>. */. /*
4b50: 57 68 61 74 20 61 62 6f 75 74 20 62 69 67 20 65 What about big e
4b60: 6e 64 69 61 6e 20 2f 20 6c 69 74 74 6c 65 20 65 ndian / little e
4b70: 6e 64 69 61 6e 20 3f 3f 20 2a 2f 0a 20 20 2a 28 ndian ?? */. *(
4b80: 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 20 20 20 long *)
4b90: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 (function + 0)
4ba0: 3d 20 30 78 44 46 32 32 30 30 31 38 44 46 32 33 = 0xDF220018DF23
4bb0: 30 30 32 30 4c 3b 0a 20 20 2a 28 6c 6f 6e 67 20 0020L;. *(long
4bc0: 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e *) (fun
4bd0: 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 78 46 ction + 8) = 0xF
4be0: 43 34 33 30 30 30 30 44 46 33 39 30 30 32 38 4c C430000DF390028L
4bf0: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 20 ;. *(long *)
4c00: 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e (function
4c10: 20 2b 31 36 29 20 3d 20 30 78 30 33 32 30 30 30 +16) = 0x032000
4c20: 30 38 30 30 30 30 30 30 30 30 4c 3b 0a 20 20 2a 0800000000L;. *
4c30: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a (unsigned long *
4c40: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 ) (function +24)
4c50: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
4c60: 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 2a g) variable;. *
4c70: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a (unsigned long *
4c80: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 ) (function +32)
4c90: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
4ca0: 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 75 6e 73 g) data;. *(uns
4cb0: 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 28 66 igned long *) (f
4cc0: 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d 20 28 unction +40) = (
4cd0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 unsigned long) a
4ce0: 64 64 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 20 ddress;.#define
4cf0: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
4d00: 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a n) \. *(long *
4d10: 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 ) (func
4d20: 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 44 tion + 0) == 0xD
4d30: 46 32 32 30 30 31 38 44 46 32 33 30 30 32 30 4c F220018DF230020L
4d40: 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a && \. *(long *
4d50: 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 ) (func
4d60: 74 69 6f 6e 20 2b 20 38 29 20 3d 3d 20 30 78 46 tion + 8) == 0xF
4d70: 43 34 33 30 30 30 30 44 46 33 39 30 30 32 38 4c C430000DF390028L
4d80: 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a && \. *(long *
4d90: 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 ) (func
4da0: 74 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 30 tion +16) == 0x0
4db0: 33 32 30 30 30 30 38 30 30 30 30 30 30 30 30 4c 320000800000000L
4dc0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
4dd0: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
4de0: 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 \. *(unsigned
4df0: 20 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 long *) (functi
4e00: 6f 6e 20 2b 34 30 29 0a 23 64 65 66 69 6e 65 20 on +40).#define
4e10: 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 tramp_variable(f
4e20: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 unction) \. *(
4e30: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 unsigned long *)
4e40: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 0a (function +24).
4e50: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
4e60: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
4e70: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e *(unsigned lon
4e80: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
4e90: 33 32 29 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 32).#endif.#if d
4ea0: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f efined(__sparc__
4eb0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f ) && !defined(__
4ec0: 73 70 61 72 63 36 34 5f 5f 29 0a 20 20 2f 2a 20 sparc64__). /*
4ed0: 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 function:. *
4ee0: 20 20 73 65 74 68 69 20 25 68 69 28 3c 76 61 72 sethi %hi(<var
4ef0: 69 61 62 6c 65 3e 29 2c 25 67 31 09 30 33 30 30 iable>),%g1.0300
4f00: 30 30 30 30 20 7c 20 28 3c 76 61 72 69 61 62 6c 0000 | (<variabl
4f10: 65 3e 20 3e 3e 20 31 30 29 0a 20 20 20 2a 20 20 e> >> 10). *
4f20: 20 20 73 65 74 68 69 20 25 68 69 28 3c 64 61 74 sethi %hi(<dat
4f30: 61 3e 29 2c 25 67 32 09 09 30 35 30 30 30 30 30 a>),%g2..0500000
4f40: 30 20 7c 20 28 3c 64 61 74 61 3e 20 3e 3e 20 31 0 | (<data> >> 1
4f50: 30 29 0a 20 20 20 2a 20 20 20 20 6f 72 20 25 67 0). * or %g
4f60: 32 2c 25 6c 6f 28 3c 64 61 74 61 3e 29 2c 25 67 2,%lo(<data>),%g
4f70: 32 09 09 38 34 31 30 41 30 30 30 20 7c 20 28 3c 2..8410A000 | (<
4f80: 64 61 74 61 3e 20 26 20 30 78 33 66 66 29 0a 20 data> & 0x3ff).
4f90: 20 20 2a 20 20 20 20 73 74 20 25 67 32 2c 5b 25 * st %g2,[%
4fa0: 67 31 2b 25 6c 6f 28 3c 76 61 72 69 61 62 6c 65 g1+%lo(<variable
4fb0: 3e 29 5d 09 43 34 32 30 36 30 30 30 20 7c 20 28 >)].C4206000 | (
4fc0: 3c 76 61 72 69 61 62 6c 65 3e 20 26 20 30 78 33 <variable> & 0x3
4fd0: 66 66 29 0a 20 20 20 2a 20 20 20 20 73 65 74 68 ff). * seth
4fe0: 69 20 25 68 69 28 3c 61 64 64 72 65 73 73 3e 29 i %hi(<address>)
4ff0: 2c 25 67 31 09 30 33 30 30 30 30 30 30 20 7c 20 ,%g1.03000000 |
5000: 28 3c 61 64 64 72 65 73 73 3e 20 3e 3e 20 31 30 (<address> >> 10
5010: 29 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 25 67 ). * jmp %g
5020: 31 2b 25 6c 6f 28 3c 61 64 64 72 65 73 73 3e 29 1+%lo(<address>)
5030: 09 09 38 31 43 30 36 30 30 30 20 7c 20 28 3c 61 ..81C06000 | (<a
5040: 64 64 72 65 73 73 3e 20 26 20 30 78 33 66 66 29 ddress> & 0x3ff)
5050: 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 09 09 09 . * nop....
5060: 30 31 30 30 30 30 30 30 0a 20 20 20 2a 2f 0a 23 01000000. */.#
5070: 64 65 66 69 6e 65 20 68 69 28 77 6f 72 64 29 20 define hi(word)
5080: 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ((unsigned long
5090: 29 20 28 77 6f 72 64 29 20 3e 3e 20 31 30 29 0a ) (word) >> 10).
50a0: 23 64 65 66 69 6e 65 20 6c 6f 28 77 6f 72 64 29 #define lo(word)
50b0: 20 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ((unsigned lon
50c0: 67 29 20 28 77 6f 72 64 29 20 26 20 30 78 33 66 g) (word) & 0x3f
50d0: 66 29 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 f). *(long *) (
50e0: 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 function + 0) =
50f0: 30 78 30 33 30 30 30 30 30 30 20 7c 20 68 69 28 0x03000000 | hi(
5100: 76 61 72 69 61 62 6c 65 29 3b 0a 20 20 2a 28 6c variable);. *(l
5110: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
5120: 20 2b 20 34 29 20 3d 20 30 78 30 35 30 30 30 30 + 4) = 0x050000
5130: 30 30 20 7c 20 68 69 28 64 61 74 61 29 3b 0a 20 00 | hi(data);.
5140: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
5150: 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 78 38 34 tion + 8) = 0x84
5160: 31 30 41 30 30 30 20 7c 20 6c 6f 28 64 61 74 61 10A000 | lo(data
5170: 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 );. *(long *) (
5180: 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 function +12) =
5190: 30 78 43 34 32 30 36 30 30 30 20 7c 20 6c 6f 28 0xC4206000 | lo(
51a0: 76 61 72 69 61 62 6c 65 29 3b 0a 20 20 2a 28 6c variable);. *(l
51b0: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
51c0: 20 2b 31 36 29 20 3d 20 30 78 30 33 30 30 30 30 +16) = 0x030000
51d0: 30 30 20 7c 20 68 69 28 61 64 64 72 65 73 73 29 00 | hi(address)
51e0: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
51f0: 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 unction +20) = 0
5200: 78 38 31 43 30 36 30 30 30 20 7c 20 6c 6f 28 61 x81C06000 | lo(a
5210: 64 64 72 65 73 73 29 3b 0a 20 20 2a 28 6c 6f 6e ddress);. *(lon
5220: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
5230: 32 34 29 20 3d 20 30 78 30 31 30 30 30 30 30 30 24) = 0x01000000
5240: 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 ;.#define is_tra
5250: 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a mp(function) \.
5260: 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 (*(long *) (fu
5270: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 26 20 30 78 nction + 0) & 0x
5280: 66 66 63 30 30 30 30 30 29 20 3d 3d 20 30 78 30 ffc00000) == 0x0
5290: 33 30 30 30 30 30 30 20 26 26 20 5c 0a 20 20 28 3000000 && \. (
52a0: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
52b0: 69 6f 6e 20 2b 20 34 29 20 26 20 30 78 66 66 63 ion + 4) & 0xffc
52c0: 30 30 30 30 30 29 20 3d 3d 20 30 78 30 35 30 30 00000) == 0x0500
52d0: 30 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 0000 && \. (*(l
52e0: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
52f0: 20 2b 20 38 29 20 26 20 30 78 66 66 66 66 66 63 + 8) & 0xfffffc
5300: 30 30 29 20 3d 3d 20 30 78 38 34 31 30 41 30 30 00) == 0x8410A00
5310: 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 0 && \. (*(long
5320: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
5330: 32 29 20 26 20 30 78 66 66 66 66 66 63 30 30 29 2) & 0xfffffc00)
5340: 20 3d 3d 20 30 78 43 34 32 30 36 30 30 30 20 26 == 0xC4206000 &
5350: 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 & \. (*(long *)
5360: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 (function +16)
5370: 26 20 30 78 66 66 63 30 30 30 30 30 29 20 3d 3d & 0xffc00000) ==
5380: 20 30 78 30 33 30 30 30 30 30 30 20 26 26 20 5c 0x03000000 && \
5390: 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 . (*(long *) (f
53a0: 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 26 20 30 unction +20) & 0
53b0: 78 66 66 66 66 66 63 30 30 29 20 3d 3d 20 30 78 xfffffc00) == 0x
53c0: 38 31 43 30 36 30 30 30 20 26 26 20 5c 0a 20 20 81C06000 && \.
53d0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
53e0: 74 69 6f 6e 20 2b 32 34 29 20 20 20 20 20 20 20 tion +24)
53f0: 20 20 20 20 20 20 20 20 3d 3d 20 30 78 30 31 30 == 0x010
5400: 30 30 30 30 30 0a 23 64 65 66 69 6e 65 20 68 69 00000.#define hi
5410: 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f 77 6f 72 64 lo(hiword,loword
5420: 29 20 20 28 28 28 68 69 77 6f 72 64 29 20 3c 3c ) (((hiword) <<
5430: 20 31 30 29 20 7c 20 28 28 6c 6f 77 6f 72 64 29 10) | ((loword)
5440: 20 26 20 30 78 33 66 66 29 29 0a 23 64 65 66 69 & 0x3ff)).#defi
5450: 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 ne tramp_address
5460: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
5470: 68 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 hilo(*(long *) (
5480: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 2c 20 2a function +16), *
5490: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
54a0: 6f 6e 20 2b 32 30 29 29 0a 23 64 65 66 69 6e 65 on +20)).#define
54b0: 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 tramp_variable(
54c0: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 function) \. h
54d0: 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ilo(*(long *) (f
54e0: 75 6e 63 74 69 6f 6e 20 2b 20 30 29 2c 20 2a 28 unction + 0), *(
54f0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
5500: 6e 20 2b 31 32 29 29 0a 23 64 65 66 69 6e 65 20 n +12)).#define
5510: 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 tramp_data(funct
5520: 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a ion) \. hilo(*
5530: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
5540: 6f 6e 20 2b 20 34 29 2c 20 2a 28 6c 6f 6e 67 20 on + 4), *(long
5550: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 *) (function + 8
5560: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 )).#endif.#ifdef
5570: 20 5f 5f 73 70 61 72 63 36 34 5f 5f 0a 20 20 2f __sparc64__. /
5580: 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a * function:. *
5590: 20 20 20 20 72 64 20 25 70 63 2c 25 67 31 09 09 rd %pc,%g1..
55a0: 09 38 33 34 31 34 30 30 30 0a 20 20 20 2a 20 20 .83414000. *
55b0: 20 20 6c 64 78 20 5b 25 67 31 2b 32 34 5d 2c 25 ldx [%g1+24],%
55c0: 67 32 09 09 43 34 35 38 36 30 31 38 0a 20 20 20 g2..C4586018.
55d0: 2a 20 20 20 20 6c 64 78 20 5b 25 67 31 2b 33 32 * ldx [%g1+32
55e0: 5d 2c 25 67 33 09 09 43 36 35 38 36 30 32 30 0a ],%g3..C6586020.
55f0: 20 20 20 2a 20 20 20 20 6c 64 78 20 5b 25 67 31 * ldx [%g1
5600: 2b 34 30 5d 2c 25 67 31 09 09 43 32 35 38 36 30 +40],%g1..C25860
5610: 32 38 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 25 28. * jmp %
5620: 67 31 09 09 09 09 38 31 43 30 34 30 30 30 0a 20 g1....81C04000.
5630: 20 20 2a 20 20 20 20 73 74 78 20 25 67 33 2c 5b * stx %g3,[
5640: 25 67 32 5d 09 09 09 43 36 37 30 38 30 30 30 0a %g2]...C6708000.
5650: 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 68 69 * .long hi
5660: 67 68 33 32 28 3c 76 61 72 69 61 62 6c 65 3e 29 gh32(<variable>)
5670: 09 3c 76 61 72 69 61 62 6c 65 3e 20 3e 3e 20 33 .<variable> >> 3
5680: 32 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 2. * .long
5690: 6c 6f 77 33 32 28 3c 76 61 72 69 61 62 6c 65 3e low32(<variable>
56a0: 29 09 09 3c 76 61 72 69 61 62 6c 65 3e 20 26 20 )..<variable> &
56b0: 30 78 66 66 66 66 66 66 66 66 0a 20 20 20 2a 20 0xffffffff. *
56c0: 20 20 20 2e 6c 6f 6e 67 20 68 69 67 68 33 32 28 .long high32(
56d0: 3c 64 61 74 61 3e 29 09 09 3c 64 61 74 61 3e 20 <data>)..<data>
56e0: 3e 3e 20 33 32 0a 20 20 20 2a 20 20 20 20 2e 6c >> 32. * .l
56f0: 6f 6e 67 20 6c 6f 77 33 32 28 3c 64 61 74 61 3e ong low32(<data>
5700: 29 09 09 3c 64 61 74 61 3e 20 26 20 30 78 66 66 )..<data> & 0xff
5710: 66 66 66 66 66 66 0a 20 20 20 2a 20 20 20 20 2e ffffff. * .
5720: 6c 6f 6e 67 20 68 69 67 68 33 32 28 3c 61 64 64 long high32(<add
5730: 72 65 73 73 3e 29 09 09 3c 61 64 64 72 65 73 73 ress>)..<address
5740: 3e 20 3e 3e 20 33 32 0a 20 20 20 2a 20 20 20 20 > >> 32. *
5750: 2e 6c 6f 6e 67 20 6c 6f 77 33 32 28 3c 61 64 64 .long low32(<add
5760: 72 65 73 73 3e 29 09 09 3c 61 64 64 72 65 73 73 ress>)..<address
5770: 3e 20 26 20 30 78 66 66 66 66 66 66 66 66 0a 20 > & 0xffffffff.
5780: 20 20 2a 2f 0a 20 20 2a 28 69 6e 74 20 2a 29 20 */. *(int *)
5790: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 (function + 0)
57a0: 3d 20 30 78 38 33 34 31 34 30 30 30 3b 0a 20 20 = 0x83414000;.
57b0: 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 *(int *) (funct
57c0: 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 43 34 35 ion + 4) = 0xC45
57d0: 38 36 30 31 38 3b 0a 20 20 2a 28 69 6e 74 20 2a 86018;. *(int *
57e0: 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 ) (function + 8
57f0: 29 20 3d 20 30 78 43 36 35 38 36 30 32 30 3b 0a ) = 0xC6586020;.
5800: 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e *(int *) (fun
5810: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 78 43 ction +12) = 0xC
5820: 32 35 38 36 30 32 38 3b 0a 20 20 2a 28 69 6e 74 2586028;. *(int
5830: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
5840: 31 36 29 20 3d 20 30 78 38 31 43 30 34 30 30 30 16) = 0x81C04000
5850: 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 ;. *(int *) (f
5860: 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 unction +20) = 0
5870: 78 43 36 37 30 38 30 30 30 3b 0a 20 20 2a 28 6c xC6708000;. *(l
5880: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
5890: 20 2b 32 34 29 20 3d 20 28 6c 6f 6e 67 29 20 76 +24) = (long) v
58a0: 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 6c 6f 6e ariable;. *(lon
58b0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
58c0: 33 32 29 20 3d 20 28 6c 6f 6e 67 29 20 64 61 74 32) = (long) dat
58d0: 61 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 a;. *(long *) (
58e0: 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d 20 function +40) =
58f0: 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a (long) address;.
5900: 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 #define is_tramp
5910: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
5920: 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 *(int *) (funct
5930: 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 38 33 ion + 0) == 0x83
5940: 34 31 34 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 414000 && \. *(
5950: 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 69 6f int *) (functio
5960: 6e 20 2b 20 34 29 20 3d 3d 20 30 78 43 34 35 38 n + 4) == 0xC458
5970: 36 30 31 38 20 26 26 20 5c 0a 20 20 2a 28 69 6e 6018 && \. *(in
5980: 74 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 t *) (function
5990: 2b 20 38 29 20 3d 3d 20 30 78 43 36 35 38 36 30 + 8) == 0xC65860
59a0: 32 30 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 20 && \. *(int
59b0: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
59c0: 32 29 20 3d 3d 20 30 78 43 32 35 38 36 30 32 38 2) == 0xC2586028
59d0: 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 && \. *(int *)
59e0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 (function +16)
59f0: 20 3d 3d 20 30 78 38 31 43 30 34 30 30 30 20 26 == 0x81C04000 &
5a00: 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 & \. *(int *)
5a10: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d (function +20) =
5a20: 3d 20 30 78 43 36 37 30 38 30 30 30 0a 23 64 65 = 0xC6708000.#de
5a30: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
5a40: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
5a50: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
5a60: 63 74 69 6f 6e 20 2b 34 30 29 0a 23 64 65 66 69 ction +40).#defi
5a70: 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c ne tramp_variabl
5a80: 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 e(function) \.
5a90: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
5aa0: 74 69 6f 6e 20 2b 32 34 29 0a 23 64 65 66 69 6e tion +24).#defin
5ab0: 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e e tramp_data(fun
5ac0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f ction) \. *(lo
5ad0: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
5ae0: 2b 33 32 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 +32).#endif.#ifd
5af0: 65 66 20 5f 5f 61 6c 70 68 61 5f 5f 0a 20 20 2f ef __alpha__. /
5b00: 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a * function:. *
5b10: 20 20 20 20 62 72 20 24 31 2c 66 75 6e 63 74 69 br $1,functi
5b20: 6f 6e 2e 2e 6e 67 09 30 30 20 30 30 20 32 30 20 on..ng.00 00 20
5b30: 43 30 0a 20 20 20 2a 20 66 75 6e 63 74 69 6f 6e C0. * function
5b40: 2e 2e 6e 67 3a 0a 20 20 20 2a 20 20 20 20 6c 64 ..ng:. * ld
5b50: 71 20 24 32 2c 32 30 28 24 31 29 09 09 31 34 20 q $2,20($1)..14
5b60: 30 30 20 34 31 20 41 34 0a 20 20 20 2a 20 20 20 00 41 A4. *
5b70: 20 6c 64 71 20 24 33 2c 32 38 28 24 31 29 09 09 ldq $3,28($1)..
5b80: 31 43 20 30 30 20 36 31 20 41 34 0a 20 20 20 2a 1C 00 61 A4. *
5b90: 20 20 20 20 6c 64 71 20 24 32 37 2c 33 36 28 24 ldq $27,36($
5ba0: 31 29 09 09 32 34 20 30 30 20 36 31 20 41 37 0a 1)..24 00 61 A7.
5bb0: 20 20 20 2a 20 20 20 20 73 74 71 20 24 32 2c 30 * stq $2,0
5bc0: 28 24 33 29 09 09 30 30 20 30 30 20 34 33 20 42 ($3)..00 00 43 B
5bd0: 34 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 24 33 4. * jmp $3
5be0: 31 2c 28 24 32 37 29 2c 30 09 09 30 30 20 30 30 1,($27),0..00 00
5bf0: 20 46 42 20 36 42 0a 20 20 20 2a 20 20 20 20 2e FB 6B. * .
5c00: 71 75 61 64 20 3c 64 61 74 61 3e 09 09 3c 64 61 quad <data>..<da
5c10: 74 61 3e 0a 20 20 20 2a 20 20 20 20 2e 71 75 61 ta>. * .qua
5c20: 64 20 3c 76 61 72 69 61 62 6c 65 3e 09 3c 76 61 d <variable>.<va
5c30: 72 69 61 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 riable>. *
5c40: 2e 71 75 61 64 20 3c 61 64 64 72 65 73 73 3e 09 .quad <address>.
5c50: 09 3c 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f .<address>. */
5c60: 0a 20 20 7b 20 73 74 61 74 69 63 20 69 6e 74 20 . { static int
5c70: 63 6f 64 65 20 5b 36 5d 20 3d 0a 20 20 20 20 20 code [6] =.
5c80: 20 7b 20 30 78 43 30 32 30 30 30 30 30 2c 20 30 { 0xC0200000, 0
5c90: 78 41 34 34 31 30 30 31 34 2c 20 30 78 41 34 36 xA4410014, 0xA46
5ca0: 31 30 30 31 43 2c 20 30 78 41 37 36 31 30 30 32 1001C, 0xA761002
5cb0: 34 2c 20 30 78 42 34 34 33 30 30 30 30 2c 20 30 4, 0xB4430000, 0
5cc0: 78 36 42 46 42 30 30 30 30 20 7d 3b 0a 20 20 20 x6BFB0000 };.
5cd0: 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 20 int i;. for
5ce0: 28 69 3d 30 3b 20 69 3c 36 3b 20 69 2b 2b 29 20 (i=0; i<6; i++)
5cf0: 7b 20 28 28 69 6e 74 20 2a 29 20 66 75 6e 63 74 { ((int *) funct
5d00: 69 6f 6e 29 5b 69 5d 20 3d 20 63 6f 64 65 5b 69 ion)[i] = code[i
5d10: 5d 3b 20 7d 0a 20 20 20 20 28 28 6c 6f 6e 67 20 ]; }. ((long
5d20: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d 20 *) function)[3]
5d30: 3d 20 28 6c 6f 6e 67 29 20 64 61 74 61 3b 0a 20 = (long) data;.
5d40: 20 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e ((long *) fun
5d50: 63 74 69 6f 6e 29 5b 34 5d 20 3d 20 28 6c 6f 6e ction)[4] = (lon
5d60: 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 20 g) variable;.
5d70: 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 ((long *) funct
5d80: 69 6f 6e 29 5b 35 5d 20 3d 20 28 6c 6f 6e 67 29 ion)[5] = (long)
5d90: 20 61 64 64 72 65 73 73 3b 0a 20 20 7d 0a 23 64 address;. }.#d
5da0: 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 efine is_tramp(f
5db0: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 unction) \. ((
5dc0: 69 6e 74 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 int *) function)
5dd0: 5b 30 5d 20 3d 3d 20 30 78 43 30 32 30 30 30 30 [0] == 0xC020000
5de0: 30 20 26 26 20 5c 0a 20 20 28 28 69 6e 74 20 2a 0 && \. ((int *
5df0: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 31 5d 20 3d ) function)[1] =
5e00: 3d 20 30 78 41 34 34 31 30 30 31 34 20 26 26 20 = 0xA4410014 &&
5e10: 5c 0a 20 20 28 28 69 6e 74 20 2a 29 20 66 75 6e \. ((int *) fun
5e20: 63 74 69 6f 6e 29 5b 32 5d 20 3d 3d 20 30 78 41 ction)[2] == 0xA
5e30: 34 36 31 30 30 31 43 20 26 26 20 5c 0a 20 20 28 461001C && \. (
5e40: 28 69 6e 74 20 2a 29 20 66 75 6e 63 74 69 6f 6e (int *) function
5e50: 29 5b 33 5d 20 3d 3d 20 30 78 41 37 36 31 30 30 )[3] == 0xA76100
5e60: 32 34 20 26 26 20 5c 0a 20 20 28 28 69 6e 74 20 24 && \. ((int
5e70: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d 20 *) function)[4]
5e80: 3d 3d 20 30 78 42 34 34 33 30 30 30 30 20 26 26 == 0xB4430000 &&
5e90: 20 5c 0a 20 20 28 28 69 6e 74 20 2a 29 20 66 75 \. ((int *) fu
5ea0: 6e 63 74 69 6f 6e 29 5b 35 5d 20 3d 3d 20 30 78 nction)[5] == 0x
5eb0: 36 42 46 42 30 30 30 30 0a 23 64 65 66 69 6e 65 6BFB0000.#define
5ec0: 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 tramp_address(f
5ed0: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 unction) \. ((
5ee0: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
5ef0: 29 5b 35 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 )[5].#define tra
5f00: 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 mp_variable(func
5f10: 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e tion) \. ((lon
5f20: 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 g *) function)[4
5f30: 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f ].#define tramp_
5f40: 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 data(function)
5f50: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
5f60: 6e 63 74 69 6f 6e 29 5b 33 5d 0a 23 65 6e 64 69 nction)[3].#endi
5f70: 66 0a 23 69 66 64 65 66 20 5f 5f 68 70 70 61 6f f.#ifdef __hppao
5f80: 6c 64 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 ld__. /* functi
5f90: 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 6c 64 69 6c on:. * ldil
5fa0: 20 4c 27 3c 64 61 74 61 3e 2c 25 72 32 30 09 09 L'<data>,%r20..
5fb0: 32 32 38 30 30 30 30 30 20 7c 20 68 69 28 3c 64 22800000 | hi(<d
5fc0: 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 6c 64 ata>). * ld
5fd0: 69 6c 20 4c 27 3c 76 61 72 69 61 62 6c 65 3e 2c il L'<variable>,
5fe0: 25 72 31 39 09 09 32 32 36 30 30 30 30 30 20 7c %r19..22600000 |
5ff0: 20 68 69 28 3c 76 61 72 69 61 62 6c 65 3e 29 0a hi(<variable>).
6000: 20 20 20 2a 20 20 20 20 6c 64 6f 20 52 27 3c 64 * ldo R'<d
6010: 61 74 61 3e 28 25 72 32 30 29 2c 25 72 32 30 09 ata>(%r20),%r20.
6020: 09 33 36 39 34 30 30 30 30 20 7c 20 6c 6f 28 3c .36940000 | lo(<
6030: 64 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 73 data>). * s
6040: 74 77 20 25 72 32 30 2c 52 27 3c 76 61 72 69 61 tw %r20,R'<varia
6050: 62 6c 65 3e 28 25 72 31 39 29 09 36 41 37 34 30 ble>(%r19).6A740
6060: 30 30 30 20 7c 20 6c 6f 28 3c 76 61 72 69 61 62 000 | lo(<variab
6070: 6c 65 3e 29 0a 20 20 20 2a 20 20 20 20 6c 64 69 le>). * ldi
6080: 6c 20 4c 27 3c 61 64 64 72 65 73 73 3e 2c 25 72 l L'<address>,%r
6090: 32 31 09 09 32 32 41 30 30 30 30 30 20 7c 20 68 21..22A00000 | h
60a0: 69 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 20 20 i(<address>).
60b0: 2a 20 20 20 20 6c 64 6f 20 52 27 3c 61 64 64 72 * ldo R'<addr
60c0: 65 73 73 3e 28 25 72 32 31 29 2c 25 72 32 31 09 ess>(%r21),%r21.
60d0: 33 36 42 35 30 30 30 30 20 7c 20 6c 6f 28 3c 61 36B50000 | lo(<a
60e0: 64 64 72 65 73 73 3e 29 0a 20 20 20 2a 20 20 20 ddress>). *
60f0: 20 62 62 2c 3e 3d 2c 6e 20 25 72 32 31 2c 33 30 bb,>=,n %r21,30
6100: 2c 66 75 6e 63 74 69 6f 6e 32 09 43 37 44 35 43 ,function2.C7D5C
6110: 30 31 32 0a 20 20 20 2a 20 20 20 20 64 65 70 69 012. * depi
6120: 20 30 2c 33 31 2c 32 2c 25 72 32 31 09 09 44 36 0,31,2,%r21..D6
6130: 41 30 31 43 31 45 0a 20 20 20 2a 20 20 20 20 6c A01C1E. * l
6140: 64 77 20 34 28 30 2c 25 72 32 31 29 2c 25 72 31 dw 4(0,%r21),%r1
6150: 39 09 09 34 41 42 33 30 30 30 38 0a 20 20 20 2a 9..4AB30008. *
6160: 20 20 20 20 6c 64 77 20 30 28 30 2c 25 72 32 31 ldw 0(0,%r21
6170: 29 2c 25 72 32 31 09 09 34 41 42 35 30 30 30 30 ),%r21..4AB50000
6180: 0a 20 20 20 2a 20 66 75 6e 63 74 69 6f 6e 32 3a . * function2:
6190: 0a 20 20 20 2a 20 20 20 20 6c 64 73 69 64 20 28 . * ldsid (
61a0: 30 2c 25 72 32 31 29 2c 25 72 31 09 09 30 32 41 0,%r21),%r1..02A
61b0: 30 31 30 41 31 0a 20 20 20 2a 20 20 20 20 6d 74 010A1. * mt
61c0: 73 70 20 25 72 31 2c 25 73 72 30 09 09 09 30 30 sp %r1,%sr0...00
61d0: 30 31 31 38 32 30 0a 20 20 20 2a 20 20 20 20 62 011820. * b
61e0: 65 2c 6e 20 30 28 25 73 72 30 2c 25 72 32 31 29 e,n 0(%sr0,%r21)
61f0: 09 09 45 32 41 30 30 30 30 32 0a 20 20 20 2a 20 ..E2A00002. *
6200: 20 20 20 6e 6f 70 09 09 09 09 30 38 30 30 30 32 nop....080002
6210: 34 30 0a 20 20 20 2a 2f 0a 20 20 2f 2a 20 57 68 40. */. /* Wh
6220: 65 6e 20 64 65 63 6f 64 69 6e 67 20 61 20 32 31 en decoding a 21
6230: 2d 62 69 74 20 61 72 67 75 6d 65 6e 74 20 69 6e -bit argument in
6240: 20 61 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c an instruction,
6250: 20 74 68 65 20 68 70 70 61 20 70 65 72 66 6f 72 the hppa perfor
6260: 6d 73 0a 20 20 20 2a 20 74 68 65 20 66 6f 6c 6c ms. * the foll
6270: 6f 77 69 6e 67 20 62 69 74 20 6d 61 6e 69 70 75 owing bit manipu
6280: 6c 61 74 69 6f 6e 3a 0a 20 20 20 2a 20 61 73 73 lation:. * ass
6290: 65 6d 62 6c 65 32 31 3a 20 78 5b 32 30 5d 2e 2e emble21: x[20]..
62a0: 2e 78 5b 30 5d 0a 20 20 20 2a 20 20 20 20 20 20 .x[0]. *
62b0: 20 2d 2d 3e 20 78 5b 30 5d 20 78 5b 31 31 5d 2e --> x[0] x[11].
62c0: 2e 2e 78 5b 31 5d 20 78 5b 31 35 5d 2e 2e 78 5b ..x[1] x[15]..x[
62d0: 31 34 5d 20 78 5b 32 30 5d 2e 2e 2e 78 5b 31 36 14] x[20]...x[16
62e0: 5d 20 78 5b 31 33 5d 2e 2e 78 5b 31 32 5d 0a 20 ] x[13]..x[12].
62f0: 20 20 2a 20 57 68 65 6e 20 65 6e 63 6f 64 69 6e * When encodin
6300: 67 20 61 20 32 31 2d 62 69 74 20 61 72 67 75 6d g a 21-bit argum
6310: 65 6e 74 20 69 6e 74 6f 20 61 6e 20 69 6e 73 74 ent into an inst
6320: 72 75 63 74 69 6f 6e 2c 20 77 65 20 6e 65 65 64 ruction, we need
6330: 20 74 68 65 0a 20 20 20 2a 20 74 6f 20 70 65 72 the. * to per
6340: 66 6f 72 6d 20 74 68 65 20 72 65 76 65 72 73 65 form the reverse
6350: 20 70 65 72 6d 75 74 61 74 69 6f 6e 3a 0a 20 20 permutation:.
6360: 20 2a 20 70 65 72 6d 75 74 65 32 31 3a 20 20 79 * permute21: y
6370: 5b 32 30 5d 2e 2e 2e 79 5b 30 5d 0a 20 20 20 2a [20]...y[0]. *
6380: 20 20 20 20 20 20 20 2d 2d 3e 20 79 5b 36 5d 2e --> y[6].
6390: 2e 2e 79 5b 32 5d 20 79 5b 38 5d 2e 2e 79 5b 37 ..y[2] y[8]..y[7
63a0: 5d 20 79 5b 31 5d 2e 2e 79 5b 30 5d 20 79 5b 31 ] y[1]..y[0] y[1
63b0: 39 5d 2e 2e 2e 79 5b 39 5d 20 79 5b 32 30 5d 0a 9]...y[9] y[20].
63c0: 20 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 61 73 */.#define as
63d0: 73 65 6d 62 6c 65 32 31 28 78 29 20 20 5c 0a 20 semble21(x) \.
63e0: 20 28 28 28 28 78 29 20 26 20 30 78 31 29 20 3c ((((x) & 0x1) <
63f0: 3c 20 32 30 29 20 7c 20 28 28 28 78 29 20 26 20 < 20) | (((x) &
6400: 30 78 46 46 45 29 20 3c 3c 20 38 29 20 7c 20 5c 0xFFE) << 8) | \
6410: 0a 20 20 20 28 28 28 78 29 20 26 20 30 78 43 30 . (((x) & 0xC0
6420: 30 30 29 20 3e 3e 20 37 29 20 7c 20 28 28 28 78 00) >> 7) | (((x
6430: 29 20 26 20 30 78 31 46 30 30 30 30 29 20 3e 3e ) & 0x1F0000) >>
6440: 20 31 34 29 20 7c 20 28 28 28 78 29 20 26 20 30 14) | (((x) & 0
6450: 78 33 30 30 30 29 20 3e 3e 20 31 32 29 29 0a 23 x3000) >> 12)).#
6460: 64 65 66 69 6e 65 20 70 65 72 6d 75 74 65 32 31 define permute21
6470: 28 79 29 20 20 5c 0a 20 20 28 28 28 28 79 29 20 (y) \. ((((y)
6480: 26 20 30 78 37 43 29 20 3c 3c 20 31 34 29 20 7c & 0x7C) << 14) |
6490: 20 28 28 28 79 29 20 26 20 30 78 31 38 30 29 20 (((y) & 0x180)
64a0: 3c 3c 20 37 29 20 7c 20 28 28 28 79 29 20 26 20 << 7) | (((y) &
64b0: 30 78 33 29 20 3c 3c 20 31 32 29 20 7c 20 5c 0a 0x3) << 12) | \.
64c0: 20 20 20 28 28 28 79 29 20 26 20 30 78 46 46 45 (((y) & 0xFFE
64d0: 30 30 29 20 3e 3e 20 38 29 20 7c 20 28 28 28 79 00) >> 8) | (((y
64e0: 29 20 26 20 30 78 31 30 30 30 30 30 29 20 3e 3e ) & 0x100000) >>
64f0: 20 32 30 29 29 0a 23 64 65 66 69 6e 65 20 68 69 20)).#define hi
6500: 28 77 6f 72 64 29 20 20 70 65 72 6d 75 74 65 32 (word) permute2
6510: 31 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 1((unsigned long
6520: 29 20 28 77 6f 72 64 29 20 3e 3e 20 31 31 29 0a ) (word) >> 11).
6530: 23 64 65 66 69 6e 65 20 6c 6f 28 77 6f 72 64 29 #define lo(word)
6540: 20 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f (((unsigned lo
6550: 6e 67 29 20 28 77 6f 72 64 29 20 26 20 30 78 37 ng) (word) & 0x7
6560: 46 46 29 20 3c 3c 20 31 29 0a 20 20 2a 28 6c 6f FF) << 1). *(lo
6570: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6580: 2b 20 30 29 20 3d 20 30 78 32 32 38 30 30 30 30 + 0) = 0x2280000
6590: 30 20 7c 20 68 69 28 64 61 74 61 29 3b 0a 20 20 0 | hi(data);.
65a0: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
65b0: 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 32 32 36 ion + 4) = 0x226
65c0: 30 30 30 30 30 20 7c 20 68 69 28 76 61 72 69 61 00000 | hi(varia
65d0: 62 6c 65 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a ble);. *(long *
65e0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 ) (function + 8)
65f0: 20 3d 20 30 78 33 36 39 34 30 30 30 30 20 7c 20 = 0x36940000 |
6600: 6c 6f 28 64 61 74 61 29 3b 0a 20 20 2a 28 6c 6f lo(data);. *(lo
6610: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6620: 2b 31 32 29 20 3d 20 30 78 36 41 37 34 30 30 30 +12) = 0x6A74000
6630: 30 20 7c 20 6c 6f 28 76 61 72 69 61 62 6c 65 29 0 | lo(variable)
6640: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
6650: 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 unction +16) = 0
6660: 78 32 32 41 30 30 30 30 30 20 7c 20 68 69 28 61 x22A00000 | hi(a
6670: 64 64 72 65 73 73 29 3b 0a 20 20 2a 28 6c 6f 6e ddress);. *(lon
6680: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6690: 32 30 29 20 3d 20 30 78 33 36 42 35 30 30 30 30 20) = 0x36B50000
66a0: 20 7c 20 6c 6f 28 61 64 64 72 65 73 73 29 3b 0a | lo(address);.
66b0: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
66c0: 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 78 43 ction +24) = 0xC
66d0: 37 44 35 43 30 31 32 3b 0a 20 20 2a 28 6c 6f 6e 7D5C012;. *(lon
66e0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
66f0: 32 38 29 20 3d 20 30 78 44 36 41 30 31 43 31 45 28) = 0xD6A01C1E
6700: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
6710: 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d 20 30 unction +32) = 0
6720: 78 34 41 42 33 30 30 30 38 3b 0a 20 20 2a 28 6c x4AB30008;. *(l
6730: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
6740: 20 2b 33 36 29 20 3d 20 30 78 34 41 42 35 30 30 +36) = 0x4AB500
6750: 30 30 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 00;. *(long *)
6760: 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d (function +40) =
6770: 20 30 78 30 32 41 30 31 30 41 31 3b 0a 20 20 2a 0x02A010A1;. *
6780: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
6790: 6f 6e 20 2b 34 34 29 20 3d 20 30 78 30 30 30 31 on +44) = 0x0001
67a0: 31 38 32 30 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 1820;. *(long *
67b0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 38 29 ) (function +48)
67c0: 20 3d 20 30 78 45 32 41 30 30 30 30 32 3b 0a 20 = 0xE2A00002;.
67d0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
67e0: 74 69 6f 6e 20 2b 35 32 29 20 3d 20 30 78 30 38 tion +52) = 0x08
67f0: 30 30 30 32 34 30 3b 0a 23 64 65 66 69 6e 65 20 000240;.#define
6800: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
6810: 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 29 20 n) \. ((long)
6820: 66 75 6e 63 74 69 6f 6e 20 26 20 33 29 20 3d 3d function & 3) ==
6830: 20 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 0 && \. (*(lon
6840: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6850: 20 30 29 20 26 20 30 78 66 66 65 30 30 30 30 30 0) & 0xffe00000
6860: 29 20 3d 3d 20 30 78 32 32 38 30 30 30 30 30 20 ) == 0x22800000
6870: 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a && \. (*(long *
6880: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 ) (function + 4)
6890: 20 26 20 30 78 66 66 65 30 30 30 30 30 29 20 3d & 0xffe00000) =
68a0: 3d 20 30 78 32 32 36 30 30 30 30 30 20 26 26 20 = 0x22600000 &&
68b0: 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 \. (*(long *) (
68c0: 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 26 20 function + 8) &
68d0: 30 78 66 66 66 66 66 30 30 30 29 20 3d 3d 20 30 0xfffff000) == 0
68e0: 78 33 36 39 34 30 30 30 30 20 26 26 20 5c 0a 20 x36940000 && \.
68f0: 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e (*(long *) (fun
6900: 63 74 69 6f 6e 20 2b 31 32 29 20 26 20 30 78 66 ction +12) & 0xf
6910: 66 66 66 66 30 30 30 29 20 3d 3d 20 30 78 36 41 ffff000) == 0x6A
6920: 37 34 30 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 740000 && \. (*
6930: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
6940: 6f 6e 20 2b 31 36 29 20 26 20 30 78 66 66 65 30 on +16) & 0xffe0
6950: 30 30 30 30 29 20 3d 3d 20 30 78 32 32 41 30 30 0000) == 0x22A00
6960: 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 000 && \. (*(lo
6970: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6980: 2b 32 30 29 20 26 20 30 78 66 66 66 66 66 30 30 +20) & 0xfffff00
6990: 30 29 20 3d 3d 20 30 78 33 36 42 35 30 30 30 30 0) == 0x36B50000
69a0: 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a && \. *(long *
69b0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 ) (function +24)
69c0: 20 3d 3d 20 30 78 43 37 44 35 43 30 31 32 20 26 == 0xC7D5C012 &
69d0: 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 & \. *(long *)
69e0: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d (function +28) =
69f0: 3d 20 30 78 44 36 41 30 31 43 31 45 20 26 26 20 = 0xD6A01C1E &&
6a00: 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 \. *(long *) (f
6a10: 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d 3d 20 unction +32) ==
6a20: 30 78 34 41 42 33 30 30 30 38 20 26 26 20 5c 0a 0x4AB30008 && \.
6a30: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
6a40: 63 74 69 6f 6e 20 2b 33 36 29 20 3d 3d 20 30 78 ction +36) == 0x
6a50: 34 41 42 35 30 30 30 30 20 26 26 20 5c 0a 20 20 4AB50000 && \.
6a60: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
6a70: 69 6f 6e 20 2b 34 30 29 20 3d 3d 20 30 78 30 32 ion +40) == 0x02
6a80: 41 30 31 30 41 31 20 26 26 20 5c 0a 20 20 2a 28 A010A1 && \. *(
6a90: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
6aa0: 6e 20 2b 34 34 29 20 3d 3d 20 30 78 30 30 30 31 n +44) == 0x0001
6ab0: 31 38 32 30 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 1820 && \. *(lo
6ac0: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6ad0: 2b 34 38 29 20 3d 3d 20 30 78 45 32 41 30 30 30 +48) == 0xE2A000
6ae0: 30 32 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 02 && \. *(long
6af0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 *) (function +5
6b00: 32 29 20 3d 3d 20 30 78 30 38 30 30 30 32 34 30 2) == 0x08000240
6b10: 0a 23 64 65 66 69 6e 65 20 68 69 6c 6f 28 68 69 .#define hilo(hi
6b20: 77 6f 72 64 2c 6c 6f 77 6f 72 64 29 20 20 5c 0a word,loword) \.
6b30: 20 20 28 28 61 73 73 65 6d 62 6c 65 32 31 28 28 ((assemble21((
6b40: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 unsigned long) (
6b50: 68 69 77 6f 72 64 29 29 20 3c 3c 20 31 31 29 20 hiword)) << 11)
6b60: 7c 20 5c 0a 20 20 20 28 28 28 75 6e 73 69 67 6e | \. (((unsign
6b70: 65 64 20 6c 6f 6e 67 29 20 28 6c 6f 77 6f 72 64 ed long) (loword
6b80: 29 20 26 20 30 78 46 46 45 29 20 3e 3e 20 31 29 ) & 0xFFE) >> 1)
6b90: 20 5c 0a 20 20 29 0a 23 64 65 66 69 6e 65 20 74 \. ).#define t
6ba0: 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e ramp_address(fun
6bb0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f ction) \. hilo
6bc0: 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 (*(long *) (func
6bd0: 74 69 6f 6e 20 2b 31 36 29 2c 20 2a 28 6c 6f 6e tion +16), *(lon
6be0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6bf0: 32 30 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 20)).#define tra
6c00: 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 mp_variable(func
6c10: 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 tion) \. hilo(
6c20: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
6c30: 69 6f 6e 20 2b 20 34 29 2c 20 2a 28 6c 6f 6e 67 ion + 4), *(long
6c40: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
6c50: 32 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 2)).#define tram
6c60: 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 p_data(function)
6c70: 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e \. hilo(*(lon
6c80: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6c90: 20 30 29 2c 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 0), *(long *) (
6ca0: 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 29 0a 23 function + 8)).#
6cb0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 68 endif.#ifdef __h
6cc0: 70 70 61 6e 65 77 5f 5f 0a 20 20 2f 2a 20 66 75 ppanew__. /* fu
6cd0: 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 nction:. *
6ce0: 2e 6c 6f 6e 67 20 20 20 74 72 61 6d 70 0a 20 20 .long tramp.
6cf0: 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 20 20 63 6c * .long cl
6d00: 6f 73 75 72 65 0a 20 20 20 2a 20 63 6c 6f 73 75 osure. * closu
6d10: 72 65 3a 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e re:. * .lon
6d20: 67 20 20 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 g <variable>.
6d30: 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 20 20 3c * .long <
6d40: 64 61 74 61 3e 0a 20 20 20 2a 20 20 20 20 2e 6c data>. * .l
6d50: 6f 6e 67 20 20 20 3c 61 64 64 72 65 73 73 3e 0a ong <address>.
6d60: 20 20 20 2a 2f 0a 20 20 7b 20 2f 2a 20 77 6f 72 */. { /* wor
6d70: 6b 20 61 72 6f 75 6e 64 20 61 20 62 75 67 20 69 k around a bug i
6d80: 6e 20 67 63 63 20 33 2e 2a 20 2a 2f 0a 20 20 20 n gcc 3.* */.
6d90: 20 76 6f 69 64 2a 20 74 72 61 6d 70 5f 61 64 64 void* tramp_add
6da0: 72 65 73 73 20 3d 20 26 74 72 61 6d 70 3b 0a 20 ress = &tramp;.
6db0: 20 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 *(long *) (fu
6dc0: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 28 28 nction + 0) = ((
6dd0: 6c 6f 6e 67 20 2a 29 20 28 28 63 68 61 72 2a 29 long *) ((char*)
6de0: 74 72 61 6d 70 5f 61 64 64 72 65 73 73 2d 32 29 tramp_address-2)
6df0: 29 5b 30 5d 3b 0a 20 20 20 20 2a 28 6c 6f 6e 67 )[0];. *(long
6e00: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
6e10: 34 29 20 3d 20 28 6c 6f 6e 67 29 20 28 66 75 6e 4) = (long) (fun
6e20: 63 74 69 6f 6e 20 2b 20 38 29 3b 0a 20 20 20 20 ction + 8);.
6e30: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
6e40: 69 6f 6e 20 2b 20 38 29 20 3d 20 28 6c 6f 6e 67 ion + 8) = (long
6e50: 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 20 20 ) variable;.
6e60: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
6e70: 69 6f 6e 20 2b 31 32 29 20 3d 20 28 6c 6f 6e 67 ion +12) = (long
6e80: 29 20 64 61 74 61 3b 0a 20 20 20 20 2a 28 6c 6f ) data;. *(lo
6e90: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6ea0: 2b 31 36 29 20 3d 20 28 6c 6f 6e 67 29 20 61 64 +16) = (long) ad
6eb0: 64 72 65 73 73 3b 0a 20 20 7d 0a 23 64 65 66 69 dress;. }.#defi
6ec0: 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 ne is_tramp(func
6ed0: 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e tion) \. ((lon
6ee0: 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 30 g *) function)[0
6ef0: 5d 20 3d 3d 20 28 28 6c 6f 6e 67 20 2a 29 20 28 ] == ((long *) (
6f00: 28 63 68 61 72 2a 29 74 72 61 6d 70 5f 61 64 64 (char*)tramp_add
6f10: 72 65 73 73 2d 32 29 29 5b 30 5d 0a 23 64 65 66 ress-2))[0].#def
6f20: 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 ine tramp_addres
6f30: 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 s(function) \.
6f40: 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 ((long *) funct
6f50: 69 6f 6e 29 5b 34 5d 0a 23 64 65 66 69 6e 65 20 ion)[4].#define
6f60: 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 tramp_variable(f
6f70: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 unction) \. ((
6f80: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
6f90: 29 5b 32 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 )[2].#define tra
6fa0: 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f 6e mp_data(function
6fb0: 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 ) \. ((long *)
6fc0: 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d 0a 23 65 function)[3].#e
6fd0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 61 72 ndif.#ifdef __ar
6fe0: 6d 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f m__. /* functio
6ff0: 6e 3a 0a 20 20 20 2a 20 20 20 20 73 74 6d 66 64 n:. * stmfd
7000: 20 20 20 73 70 21 2c 7b 72 30 7d 09 09 09 45 39 sp!,{r0}...E9
7010: 32 44 30 30 30 31 0a 20 20 20 2a 20 20 20 20 6c 2D0001. * l
7020: 64 72 20 20 20 20 20 72 30 2c 5b 70 63 2c 23 5f dr r0,[pc,#_
7030: 64 61 74 61 2d 2e 2d 38 5d 09 09 45 35 39 46 30 data-.-8]..E59F0
7040: 30 31 34 0a 20 20 20 2a 20 20 20 20 6c 64 72 20 014. * ldr
7050: 20 20 20 20 69 70 2c 5b 72 30 2c 23 30 5d 09 09 ip,[r0,#0]..
7060: 09 45 35 39 30 43 30 30 30 0a 20 20 20 2a 20 20 .E590C000. *
7070: 20 20 6c 64 72 20 20 20 20 20 72 30 2c 5b 70 63 ldr r0,[pc
7080: 2c 23 5f 76 61 72 69 61 62 6c 65 2d 2e 2d 38 5d ,#_variable-.-8]
7090: 09 09 45 35 39 46 30 30 31 30 0a 20 20 20 2a 20 ..E59F0010. *
70a0: 20 20 20 73 74 72 20 20 20 20 20 69 70 2c 5b 72 str ip,[r
70b0: 30 2c 23 30 5d 09 09 09 45 35 38 30 43 30 30 30 0,#0]...E580C000
70c0: 0a 20 20 20 2a 20 20 20 20 6c 64 6d 66 64 20 20 . * ldmfd
70d0: 20 73 70 21 2c 7b 72 30 7d 5e 09 09 09 45 38 46 sp!,{r0}^...E8F
70e0: 44 30 30 30 31 0a 20 20 20 2a 20 20 20 20 6c 64 D0001. * ld
70f0: 72 20 20 20 20 20 69 70 2c 5b 70 63 2c 23 5f 66 r ip,[pc,#_f
7100: 75 6e 63 74 69 6f 6e 2d 2e 2d 38 5d 09 09 45 35 unction-.-8]..E5
7110: 39 46 43 30 30 38 0a 20 20 20 2a 20 20 20 20 6c 9FC008. * l
7120: 64 72 20 20 20 20 20 70 63 2c 5b 69 70 2c 23 30 dr pc,[ip,#0
7130: 5d 09 09 09 45 35 39 43 46 30 30 30 0a 20 20 20 ]...E59CF000.
7140: 2a 20 5f 64 61 74 61 3a 0a 20 20 20 2a 20 20 20 * _data:. *
7150: 20 2e 77 6f 72 64 20 20 20 3c 64 61 74 61 3e 09 .word <data>.
7160: 09 09 09 3c 64 61 74 61 3e 0a 20 20 20 2a 20 5f ...<data>. * _
7170: 76 61 72 69 61 62 6c 65 3a 0a 20 20 20 2a 20 20 variable:. *
7180: 20 20 2e 77 6f 72 64 20 20 20 3c 76 61 72 69 61 .word <varia
7190: 62 6c 65 3e 09 09 09 3c 76 61 72 69 61 62 6c 65 ble>...<variable
71a0: 3e 0a 20 20 20 2a 20 5f 66 75 6e 63 74 69 6f 6e >. * _function
71b0: 3a 0a 20 20 20 2a 20 20 20 20 2e 77 6f 72 64 20 :. * .word
71c0: 20 20 3c 61 64 64 72 65 73 73 3e 09 09 09 3c 61 <address>...<a
71d0: 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f 0a 20 20 ddress>. */.
71e0: 7b 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 63 6f { static long co
71f0: 64 65 20 5b 38 5d 20 3d 0a 20 20 20 20 20 20 7b de [8] =. {
7200: 20 30 78 45 39 32 44 30 30 30 31 2c 20 30 78 45 0xE92D0001, 0xE
7210: 35 39 46 30 30 31 34 2c 20 30 78 45 35 39 30 43 59F0014, 0xE590C
7220: 30 30 30 2c 20 30 78 45 35 39 46 30 30 31 30 2c 000, 0xE59F0010,
7230: 0a 20 20 20 20 20 20 20 20 30 78 45 35 38 30 43 . 0xE580C
7240: 30 30 30 2c 20 30 78 45 38 46 44 30 30 30 31 2c 000, 0xE8FD0001,
7250: 20 30 78 45 35 39 46 43 30 30 38 2c 20 30 78 45 0xE59FC008, 0xE
7260: 35 39 43 46 30 30 30 0a 20 20 20 20 20 20 7d 3b 59CF000. };
7270: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 . int i;.
7280: 66 6f 72 20 28 69 3d 30 3b 20 69 3c 38 3b 20 69 for (i=0; i<8; i
7290: 2b 2b 29 20 7b 20 28 28 6c 6f 6e 67 20 2a 29 20 ++) { ((long *)
72a0: 66 75 6e 63 74 69 6f 6e 29 5b 69 5d 20 3d 20 63 function)[i] = c
72b0: 6f 64 65 5b 69 5d 3b 20 7d 0a 20 20 20 20 28 28 ode[i]; }. ((
72c0: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
72d0: 29 5b 38 5d 20 3d 20 28 6c 6f 6e 67 29 20 64 61 )[8] = (long) da
72e0: 74 61 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a ta;. ((long *
72f0: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 39 5d 20 3d ) function)[9] =
7300: 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 (long) variable
7310: 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a 29 20 ;. ((long *)
7320: 66 75 6e 63 74 69 6f 6e 29 5b 31 30 5d 20 3d 20 function)[10] =
7330: 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a (long) address;.
7340: 20 20 7d 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 }.#define is_t
7350: 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 ramp(function)
7360: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
7370: 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 30 78 nction)[0] == 0x
7380: 45 39 32 44 30 30 30 31 20 26 26 20 5c 0a 20 20 E92D0001 && \.
7390: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
73a0: 6f 6e 29 5b 31 5d 20 3d 3d 20 30 78 45 35 39 46 on)[1] == 0xE59F
73b0: 30 30 31 34 20 26 26 20 5c 0a 20 20 28 28 6c 6f 0014 && \. ((lo
73c0: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
73d0: 32 5d 20 3d 3d 20 30 78 45 35 39 30 43 30 30 30 2] == 0xE590C000
73e0: 20 26 26 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a && \. ((long *
73f0: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d 20 3d ) function)[3] =
7400: 3d 20 30 78 45 35 39 46 30 30 31 30 20 26 26 20 = 0xE59F0010 &&
7410: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
7420: 6e 63 74 69 6f 6e 29 5b 34 5d 20 3d 3d 20 30 78 nction)[4] == 0x
7430: 45 35 38 30 43 30 30 30 20 26 26 20 5c 0a 20 20 E580C000 && \.
7440: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
7450: 6f 6e 29 5b 35 5d 20 3d 3d 20 30 78 45 38 46 44 on)[5] == 0xE8FD
7460: 30 30 30 31 20 26 26 20 5c 0a 20 20 28 28 6c 6f 0001 && \. ((lo
7470: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
7480: 36 5d 20 3d 3d 20 30 78 45 35 39 46 43 30 30 38 6] == 0xE59FC008
7490: 20 26 26 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a && \. ((long *
74a0: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 37 5d 20 3d ) function)[7] =
74b0: 3d 20 30 78 45 35 39 43 46 30 30 30 0a 23 64 65 = 0xE59CF000.#de
74c0: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
74d0: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
74e0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
74f0: 74 69 6f 6e 29 5b 31 30 5d 0a 23 64 65 66 69 6e tion)[10].#defin
7500: 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 e tramp_variable
7510: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
7520: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
7530: 6f 6e 29 5b 39 5d 0a 23 64 65 66 69 6e 65 20 74 on)[9].#define t
7540: 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 ramp_data(functi
7550: 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 on) \. ((long
7560: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 38 5d 0a *) function)[8].
7570: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
7580: 72 73 36 30 30 30 73 79 73 76 34 5f 5f 0a 20 20 rs6000sysv4__.
7590: 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 /* function:.
75a0: 2a 20 20 20 20 7b 6c 69 75 7c 6c 69 73 7d 20 31 * {liu|lis} 1
75b0: 31 2c 68 69 31 36 28 3c 76 61 72 69 61 62 6c 65 1,hi16(<variable
75c0: 3e 29 09 09 33 44 20 36 30 20 68 69 31 36 28 3c >)..3D 60 hi16(<
75d0: 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 variable>). *
75e0: 20 20 20 7b 6f 72 69 6c 7c 6f 72 69 7d 20 31 31 {oril|ori} 11
75f0: 2c 31 31 2c 6c 6f 31 36 28 3c 76 61 72 69 61 62 ,11,lo16(<variab
7600: 6c 65 3e 29 09 36 31 20 36 42 20 6c 6f 31 36 28 le>).61 6B lo16(
7610: 3c 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a <variable>). *
7620: 20 20 20 20 7b 6c 69 75 7c 6c 69 73 7d 20 31 32 {liu|lis} 12
7630: 2c 68 69 31 36 28 3c 64 61 74 61 3e 29 09 09 33 ,hi16(<data>)..3
7640: 44 20 38 30 20 68 69 31 36 28 3c 64 61 74 61 3e D 80 hi16(<data>
7650: 29 0a 20 20 20 2a 20 20 20 20 7b 6f 72 69 6c 7c ). * {oril|
7660: 6f 72 69 7d 20 31 32 2c 31 32 2c 6c 6f 31 36 28 ori} 12,12,lo16(
7670: 3c 64 61 74 61 3e 29 09 09 36 31 20 38 43 20 6c <data>)..61 8C l
7680: 6f 31 36 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a o16(<data>). *
7690: 20 20 20 20 7b 73 74 7c 73 74 77 7d 20 31 32 2c {st|stw} 12,
76a0: 30 28 31 31 29 09 09 09 39 31 20 38 42 20 30 30 0(11)...91 8B 00
76b0: 20 30 30 0a 20 20 20 2a 20 20 20 20 7b 6c 69 75 00. * {liu
76c0: 7c 6c 69 73 7d 20 30 2c 68 69 31 36 28 3c 61 64 |lis} 0,hi16(<ad
76d0: 64 72 65 73 73 3e 29 09 09 33 43 20 30 30 20 68 dress>)..3C 00 h
76e0: 69 31 36 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 i16(<address>).
76f0: 20 20 2a 20 20 20 20 7b 6f 72 69 6c 7c 6f 72 69 * {oril|ori
7700: 7d 20 30 2c 30 2c 6c 6f 31 36 28 3c 61 64 64 72 } 0,0,lo16(<addr
7710: 65 73 73 3e 29 09 09 36 30 20 30 30 20 6c 6f 31 ess>)..60 00 lo1
7720: 36 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 20 20 6(<address>).
7730: 2a 20 20 20 20 6d 74 63 74 72 20 30 09 09 09 09 * mtctr 0....
7740: 09 37 43 20 30 39 20 30 33 20 41 36 0a 20 20 20 .7C 09 03 A6.
7750: 2a 20 20 20 20 62 63 74 72 09 09 09 09 09 34 45 * bctr.....4E
7760: 20 38 30 20 30 34 20 32 30 0a 20 20 20 2a 2f 0a 80 04 20. */.
7770: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
7780: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 nction + 0) = 0x
7790: 33 44 36 30 3b 0a 20 20 2a 28 73 68 6f 72 74 20 3D60;. *(short
77a0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 *) (function + 2
77b0: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ) = (unsigned lo
77c0: 6e 67 29 20 76 61 72 69 61 62 6c 65 20 3e 3e 20 ng) variable >>
77d0: 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 16;. *(short *)
77e0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 (function + 4)
77f0: 3d 20 30 78 36 31 36 42 3b 0a 20 20 2a 28 73 68 = 0x616B;. *(sh
7800: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
7810: 20 2b 20 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 + 6) = (unsigne
7820: 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 d long) variable
7830: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 73 & 0xffff;. *(s
7840: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
7850: 6e 20 2b 20 38 29 20 3d 20 30 78 33 44 38 30 3b n + 8) = 0x3D80;
7860: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
7870: 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 28 unction +10) = (
7880: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d
7890: 61 74 61 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 ata >> 16;. *(s
78a0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
78b0: 6e 20 2b 31 32 29 20 3d 20 30 78 36 31 38 43 3b n +12) = 0x618C;
78c0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
78d0: 75 6e 63 74 69 6f 6e 20 2b 31 34 29 20 3d 20 28 unction +14) = (
78e0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d
78f0: 61 74 61 20 26 20 30 78 66 66 66 66 3b 0a 20 20 ata & 0xffff;.
7900: 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 *(long *) (func
7910: 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 39 31 tion +16) = 0x91
7920: 38 42 30 30 30 30 3b 0a 20 20 2a 28 73 68 6f 72 8B0000;. *(shor
7930: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7940: 32 30 29 20 3d 20 30 78 33 43 30 30 3b 0a 20 20 20) = 0x3C00;.
7950: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
7960: 74 69 6f 6e 20 2b 32 32 29 20 3d 20 28 75 6e 73 tion +22) = (uns
7970: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 igned long) addr
7980: 65 73 73 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 ess >> 16;. *(s
7990: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
79a0: 6e 20 2b 32 34 29 20 3d 20 30 78 36 30 30 30 3b n +24) = 0x6000;
79b0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
79c0: 75 6e 63 74 69 6f 6e 20 2b 32 36 29 20 3d 20 28 unction +26) = (
79d0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 unsigned long) a
79e0: 64 64 72 65 73 73 20 26 20 30 78 66 66 66 66 3b ddress & 0xffff;
79f0: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 . *(long *) (f
7a00: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 unction +28) = 0
7a10: 78 37 43 30 39 30 33 41 36 3b 0a 20 20 2a 28 6c x7C0903A6;. *(l
7a20: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
7a30: 6e 20 2b 33 32 29 20 3d 20 30 78 34 45 38 30 30 n +32) = 0x4E800
7a40: 34 32 30 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 420;.#define is_
7a50: 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 tramp(function)
7a60: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
7a70: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
7a80: 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 33 44 36 on + 0) == 0x3D6
7a90: 30 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 0 && \. *(unsig
7aa0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
7ab0: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d 20 30 nction + 4) == 0
7ac0: 78 36 31 36 42 20 26 26 20 5c 0a 20 20 2a 28 75 x616B && \. *(u
7ad0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
7ae0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
7af0: 3d 3d 20 30 78 33 44 38 30 20 26 26 20 5c 0a 20 == 0x3D80 && \.
7b00: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
7b10: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7b20: 31 32 29 20 3d 3d 20 30 78 36 31 38 43 20 26 26 12) == 0x618C &&
7b30: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
7b40: 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 long *) (functi
7b50: 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 39 31 38 on +16) == 0x918
7b60: 42 30 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 75 B0000 && \. *(u
7b70: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
7b80: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
7b90: 3d 3d 20 30 78 33 43 30 30 20 26 26 20 5c 0a 20 == 0x3C00 && \.
7ba0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
7bb0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7bc0: 32 34 29 20 3d 3d 20 30 78 36 30 30 30 20 26 26 24) == 0x6000 &&
7bd0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
7be0: 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 long *) (functi
7bf0: 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 37 43 30 on +28) == 0x7C0
7c00: 39 30 33 41 36 20 26 26 20 5c 0a 20 20 2a 28 75 903A6 && \. *(u
7c10: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 nsigned long *)
7c20: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 (function +32)
7c30: 3d 3d 20 30 78 34 45 38 30 30 34 32 30 0a 23 64 == 0x4E800420.#d
7c40: 65 66 69 6e 65 20 68 69 6c 6f 28 68 69 77 6f 72 efine hilo(hiwor
7c50: 64 2c 6c 6f 77 6f 72 64 29 20 20 5c 0a 20 20 28 d,loword) \. (
7c60: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
7c70: 20 28 68 69 77 6f 72 64 29 20 3c 3c 20 31 36 29 (hiword) << 16)
7c80: 20 7c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e | (unsigned lon
7c90: 67 29 20 28 6c 6f 77 6f 72 64 29 29 0a 23 64 65 g) (loword)).#de
7ca0: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
7cb0: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
7cc0: 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 hilo(*(unsigne
7cd0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
7ce0: 74 69 6f 6e 20 2b 32 32 29 2c 20 2a 28 75 6e 73 tion +22), *(uns
7cf0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
7d00: 66 75 6e 63 74 69 6f 6e 20 2b 32 36 29 29 0a 23 function +26)).#
7d10: 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 define tramp_var
7d20: 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 iable(function)
7d30: 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 \. hilo(*(unsi
7d40: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
7d50: 75 6e 63 74 69 6f 6e 20 2b 20 32 29 2c 20 2a 28 unction + 2), *(
7d60: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a unsigned short *
7d70: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 ) (function + 6)
7d80: 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f ).#define tramp_
7d90: 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 data(function)
7da0: 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 \. hilo(*(unsig
7db0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
7dc0: 6e 63 74 69 6f 6e 20 2b 31 30 29 2c 20 2a 28 75 nction +10), *(u
7dd0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
7de0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 29 (function +14))
7df0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
7e00: 5f 72 73 36 30 30 30 61 69 78 5f 5f 0a 20 20 2f _rs6000aix__. /
7e10: 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a * function:. *
7e20: 20 20 20 20 2e 6c 6f 6e 67 20 2e 74 72 61 6d 70 .long .tramp
7e30: 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 2e . * .long .
7e40: 6d 79 74 6f 63 0a 20 20 20 2a 20 20 20 20 2e 6c mytoc. * .l
7e50: 6f 6e 67 20 30 0a 20 20 20 2a 20 2e 6d 79 74 6f ong 0. * .myto
7e60: 63 3a 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 c:. * .long
7e70: 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 20 2a <variable>. *
7e80: 20 20 20 20 2e 6c 6f 6e 67 20 3c 64 61 74 61 3e .long <data>
7e90: 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 3c . * .long <
7ea0: 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f 0a 20 address>. */.
7eb0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
7ec0: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 28 28 6c ction + 0) = ((l
7ed0: 6f 6e 67 20 2a 29 20 26 74 72 61 6d 70 29 5b 30 ong *) &tramp)[0
7ee0: 5d 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 ];. *(long *)
7ef0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
7f00: 20 28 6c 6f 6e 67 29 20 28 66 75 6e 63 74 69 6f (long) (functio
7f10: 6e 20 2b 20 31 32 29 3b 0a 20 20 2a 28 6c 6f 6e n + 12);. *(lon
7f20: 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 g *) (function
7f30: 2b 20 38 29 20 3d 20 30 3b 0a 20 20 2a 28 6c 6f + 8) = 0;. *(lo
7f40: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
7f50: 20 2b 31 32 29 20 3d 20 28 6c 6f 6e 67 29 20 76 +12) = (long) v
7f60: 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 6c 6f 6e ariable;. *(lon
7f70: 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 g *) (function
7f80: 2b 31 36 29 20 3d 20 28 6c 6f 6e 67 29 20 64 61 +16) = (long) da
7f90: 74 61 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 ta;. *(long *)
7fa0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
7fb0: 3d 20 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 = (long) address
7fc0: 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 ;.#define is_tra
7fd0: 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a mp(function) \.
7fe0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
7ff0: 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 28 28 6c 6f tion)[0] == ((lo
8000: 6e 67 20 2a 29 20 26 74 72 61 6d 70 29 5b 30 5d ng *) &tramp)[0]
8010: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
8020: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
8030: 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 \. ((long *)
8040: 66 75 6e 63 74 69 6f 6e 29 5b 35 5d 0a 23 64 65 function)[5].#de
8050: 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 fine tramp_varia
8060: 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ble(function) \
8070: 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e . ((long *) fun
8080: 63 74 69 6f 6e 29 5b 33 5d 0a 23 64 65 66 69 6e ction)[3].#defin
8090: 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e e tramp_data(fun
80a0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f ction) \. ((lo
80b0: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
80c0: 34 5d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 4].#endif.#ifdef
80d0: 20 5f 5f 6d 38 38 6b 5f 5f 0a 20 20 2f 2a 20 66 __m88k__. /* f
80e0: 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 unction:. *
80f0: 20 6f 72 2e 75 20 20 20 20 23 72 31 33 2c 23 72 or.u #r13,#r
8100: 30 2c 68 69 31 36 28 3c 76 61 72 69 61 62 6c 65 0,hi16(<variable
8110: 3e 29 09 35 44 20 41 30 20 68 69 31 36 28 3c 76 >).5D A0 hi16(<v
8120: 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 20 ariable>). *
8130: 20 20 6f 72 20 20 20 20 20 20 23 72 31 33 2c 23 or #r13,#
8140: 72 31 33 2c 6c 6f 31 36 28 3c 76 61 72 69 61 62 r13,lo16(<variab
8150: 6c 65 3e 29 09 35 39 20 41 44 20 6c 6f 31 36 28 le>).59 AD lo16(
8160: 3c 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a <variable>). *
8170: 20 20 20 20 6f 72 2e 75 20 20 20 20 23 72 31 30 or.u #r10
8180: 2c 23 72 30 2c 68 69 31 36 28 3c 64 61 74 61 3e ,#r0,hi16(<data>
8190: 29 09 09 35 44 20 34 30 20 68 69 31 36 28 3c 64 )..5D 40 hi16(<d
81a0: 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 6f 72 ata>). * or
81b0: 20 20 20 20 20 20 23 72 31 30 2c 23 72 31 30 2c #r10,#r10,
81c0: 6c 6f 31 36 28 3c 64 61 74 61 3e 29 09 09 35 39 lo16(<data>)..59
81d0: 20 34 41 20 6c 6f 31 36 28 3c 64 61 74 61 3e 29 4A lo16(<data>)
81e0: 0a 20 20 20 2a 20 20 20 20 73 74 20 20 20 20 20 . * st
81f0: 20 23 72 31 30 2c 23 72 30 2c 23 72 31 33 09 09 #r10,#r0,#r13..
8200: 09 46 35 20 34 30 20 32 34 20 30 44 0a 20 20 20 .F5 40 24 0D.
8210: 2a 20 20 20 20 6f 72 2e 75 20 20 20 20 23 72 31 * or.u #r1
8220: 33 2c 23 72 30 2c 68 69 31 36 28 3c 61 64 64 72 3,#r0,hi16(<addr
8230: 65 73 73 3e 29 09 35 44 20 41 30 20 68 69 31 36 ess>).5D A0 hi16
8240: 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 20 20 2a (<address>). *
8250: 20 20 20 20 6f 72 20 20 20 20 20 20 23 72 31 33 or #r13
8260: 2c 23 72 31 33 2c 6c 6f 31 36 28 3c 61 64 64 72 ,#r13,lo16(<addr
8270: 65 73 73 3e 29 09 35 39 20 41 44 20 6c 6f 31 36 ess>).59 AD lo16
8280: 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 20 20 2a (<address>). *
8290: 20 20 20 20 6a 6d 70 20 20 20 20 20 23 72 31 33 jmp #r13
82a0: 09 09 09 09 46 34 20 30 30 20 43 30 20 30 44 0a ....F4 00 C0 0D.
82b0: 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 20 */. *(short
82c0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
82d0: 29 20 3d 20 30 78 35 44 41 30 3b 0a 20 20 2a 28 ) = 0x5DA0;. *(
82e0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
82f0: 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 67 on + 2) = (unsig
8300: 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 ned long) variab
8310: 6c 65 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 le >> 16;. *(sh
8320: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
8330: 20 2b 20 34 29 20 3d 20 30 78 35 39 41 44 3b 0a + 4) = 0x59AD;.
8340: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
8350: 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 75 nction + 6) = (u
8360: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 nsigned long) va
8370: 72 69 61 62 6c 65 20 26 20 30 78 66 66 66 66 3b riable & 0xffff;
8380: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
8390: 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 unction + 8) = 0
83a0: 78 35 44 34 30 3b 0a 20 20 2a 28 73 68 6f 72 74 x5D40;. *(short
83b0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
83c0: 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 0) = (unsigned l
83d0: 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 31 36 3b ong) data >> 16;
83e0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
83f0: 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 unction +12) = 0
8400: 78 35 39 34 41 3b 0a 20 20 2a 28 73 68 6f 72 74 x594A;. *(short
8410: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
8420: 34 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 4) = (unsigned l
8430: 6f 6e 67 29 20 64 61 74 61 20 26 20 30 78 66 66 ong) data & 0xff
8440: 66 66 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 ff;. *(long *)
8450: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 (function +16)
8460: 3d 20 30 78 46 35 34 30 32 34 30 44 3b 0a 20 20 = 0xF540240D;.
8470: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
8480: 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 35 44 tion +20) = 0x5D
8490: 41 30 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 A0;. *(short *)
84a0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 20 (function +22)
84b0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
84c0: 29 20 61 64 64 72 65 73 73 20 3e 3e 20 31 36 3b ) address >> 16;
84d0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
84e0: 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 unction +24) = 0
84f0: 78 35 39 41 44 3b 0a 20 20 2a 28 73 68 6f 72 74 x59AD;. *(short
8500: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
8510: 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6) = (unsigned l
8520: 6f 6e 67 29 20 61 64 64 72 65 73 73 20 26 20 30 ong) address & 0
8530: 78 66 66 66 66 3b 0a 20 20 2a 28 6c 6f 6e 67 20 xffff;. *(long
8540: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
8550: 38 29 20 3d 20 30 78 46 34 30 30 43 30 30 44 3b 8) = 0xF400C00D;
8560: 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d .#define is_tram
8570: 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 p(function) \.
8580: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
8590: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
85a0: 20 30 29 20 3d 3d 20 30 78 35 44 41 30 20 26 26 0) == 0x5DA0 &&
85b0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
85c0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
85d0: 6f 6e 20 2b 20 34 29 20 3d 3d 20 30 78 35 39 41 on + 4) == 0x59A
85e0: 44 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 D && \. *(unsig
85f0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
8600: 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 3d 20 30 nction + 8) == 0
8610: 78 35 44 34 30 20 26 26 20 5c 0a 20 20 2a 28 75 x5D40 && \. *(u
8620: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
8630: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 (function +12)
8640: 3d 3d 20 30 78 35 39 34 41 20 26 26 20 5c 0a 20 == 0x594A && \.
8650: 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 *(unsigned long
8660: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
8670: 31 36 29 20 3d 3d 20 30 78 46 35 34 30 32 34 30 16) == 0xF540240
8680: 44 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 D && \. *(unsig
8690: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
86a0: 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 3d 20 30 nction +20) == 0
86b0: 78 35 44 41 30 20 26 26 20 5c 0a 20 20 2a 28 75 x5DA0 && \. *(u
86c0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
86d0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 (function +24)
86e0: 3d 3d 20 30 78 35 39 41 44 20 26 26 20 5c 0a 20 == 0x59AD && \.
86f0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 *(unsigned long
8700: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
8710: 32 38 29 20 3d 3d 20 30 78 46 34 30 30 43 30 30 28) == 0xF400C00
8720: 44 0a 23 64 65 66 69 6e 65 20 68 69 6c 6f 28 68 D.#define hilo(h
8730: 69 77 6f 72 64 2c 6c 6f 77 6f 72 64 29 20 20 5c iword,loword) \
8740: 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c . (((unsigned l
8750: 6f 6e 67 29 20 28 68 69 77 6f 72 64 29 20 3c 3c ong) (hiword) <<
8760: 20 31 36 29 20 7c 20 28 75 6e 73 69 67 6e 65 64 16) | (unsigned
8770: 20 6c 6f 6e 67 29 20 28 6c 6f 77 6f 72 64 29 29 long) (loword))
8780: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
8790: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
87a0: 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 \. hilo(*(uns
87b0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
87c0: 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 2c 20 2a function +22), *
87d0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
87e0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 36 *) (function +26
87f0: 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 )).#define tramp
8800: 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 _variable(functi
8810: 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 on) \. hilo(*(
8820: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a unsigned short *
8830: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 ) (function + 2)
8840: 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f , *(unsigned sho
8850: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
8860: 2b 20 36 29 29 0a 23 64 65 66 69 6e 65 20 74 72 + 6)).#define tr
8870: 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f amp_data(functio
8880: 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 n) \. hilo(*(u
8890: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
88a0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 2c (function +10),
88b0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
88c0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
88d0: 31 34 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 14)).#endif.#ifd
88e0: 65 66 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a 20 20 ef __convex__.
88f0: 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 /* function:.
8900: 2a 20 20 20 20 6c 64 2e 77 20 23 3c 64 61 74 61 * ld.w #<data
8910: 3e 2c 73 31 09 09 09 09 31 31 43 39 20 3c 64 61 >,s1....11C9 <da
8920: 74 61 3e 0a 20 20 20 2a 20 20 20 20 73 74 2e 77 ta>. * st.w
8930: 20 73 31 2c 3c 76 61 72 69 61 62 6c 65 3e 09 09 s1,<variable>..
8940: 09 33 36 34 31 20 3c 76 61 72 69 61 62 6c 65 3e .3641 <variable>
8950: 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 3c 61 64 . * jmp <ad
8960: 64 72 65 73 73 3e 09 09 09 09 30 31 34 30 20 3c dress>....0140 <
8970: 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 20 20 20 address>. *
8980: 20 64 73 2e 68 20 30 09 09 09 09 09 30 30 30 30 ds.h 0.....0000
8990: 0a 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 . */. *(short
89a0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
89b0: 30 29 20 3d 20 30 78 31 31 43 39 3b 0a 20 20 2a 0) = 0x11C9;. *
89c0: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
89d0: 69 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 ion + 2) = (unsi
89e0: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 3b gned long) data;
89f0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
8a00: 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 30 unction + 6) = 0
8a10: 78 33 36 34 31 3b 0a 20 20 2a 28 6c 6f 6e 67 20 x3641;. *(long
8a20: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
8a30: 38 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 8) = (unsigned l
8a40: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 ong) variable;.
8a50: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
8a60: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 78 30 ction +12) = 0x0
8a70: 31 34 30 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 140;. *(long *)
8a80: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 (function +14)
8a90: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
8aa0: 67 29 20 61 64 64 72 65 73 73 3b 0a 20 20 2a 28 g) address;. *(
8ab0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
8ac0: 6f 6e 20 2b 31 38 29 20 3d 20 30 78 30 30 30 30 on +18) = 0x0000
8ad0: 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 ;.#define is_tra
8ae0: 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a mp(function) \.
8af0: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f *(unsigned sho
8b00: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
8b10: 2b 20 30 29 20 3d 3d 20 30 78 31 31 43 39 20 26 + 0) == 0x11C9 &
8b20: 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 & \. *(unsigned
8b30: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
8b40: 69 6f 6e 20 2b 20 36 29 20 3d 3d 20 30 78 33 36 ion + 6) == 0x36
8b50: 34 31 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 41 && \. *(unsi
8b60: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
8b70: 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 unction +12) ==
8b80: 30 78 30 31 34 30 20 26 26 20 5c 0a 20 20 2a 28 0x0140 && \. *(
8b90: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a unsigned short *
8ba0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 ) (function +18)
8bb0: 20 3d 3d 20 30 78 30 30 30 30 0a 23 64 65 66 69 == 0x0000.#defi
8bc0: 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 ne tramp_address
8bd0: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
8be0: 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 *(long *) (func
8bf0: 74 69 6f 6e 20 2b 31 34 29 0a 23 64 65 66 69 6e tion +14).#defin
8c00: 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 e tramp_variable
8c10: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
8c20: 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 *(long *) (func
8c30: 74 69 6f 6e 20 2b 20 38 29 0a 23 64 65 66 69 6e tion + 8).#defin
8c40: 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e e tramp_data(fun
8c50: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f ction) \. *(lo
8c60: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
8c70: 20 2b 20 32 29 0a 23 65 6e 64 69 66 0a 23 69 66 + 2).#endif.#if
8c80: 64 65 66 20 5f 5f 69 61 36 34 5f 5f 0a 20 20 2f def __ia64__. /
8c90: 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a * function:. *
8ca0: 20 20 20 20 64 61 74 61 38 20 20 20 74 72 61 6d data8 tram
8cb0: 70 0a 20 20 20 2a 20 20 20 20 64 61 74 61 38 20 p. * data8
8cc0: 20 20 63 6c 6f 73 75 72 65 0a 20 20 20 2a 20 63 closure. * c
8cd0: 6c 6f 73 75 72 65 3a 0a 20 20 20 2a 20 20 20 20 losure:. *
8ce0: 64 61 74 61 38 20 20 20 3c 61 64 64 72 65 73 73 data8 <address
8cf0: 3e 0a 20 20 20 2a 20 20 20 20 64 61 74 61 38 20 >. * data8
8d00: 20 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 20 <variable>.
8d10: 2a 20 20 20 20 64 61 74 61 38 20 20 20 3c 64 61 * data8 <da
8d20: 74 61 3e 0a 20 20 20 2a 2f 0a 20 20 2a 28 6c 6f ta>. */. *(lo
8d30: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
8d40: 2b 20 30 29 20 3d 20 28 6c 6f 6e 67 29 20 26 74 + 0) = (long) &t
8d50: 72 61 6d 70 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a ramp;. *(long *
8d60: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 ) (function + 8)
8d70: 20 3d 20 28 6c 6f 6e 67 29 20 28 66 75 6e 63 74 = (long) (funct
8d80: 69 6f 6e 20 2b 20 31 36 29 3b 0a 20 20 2a 28 6c ion + 16);. *(l
8d90: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
8da0: 20 2b 31 36 29 20 3d 20 28 6c 6f 6e 67 29 20 61 +16) = (long) a
8db0: 64 64 72 65 73 73 3b 0a 20 20 2a 28 6c 6f 6e 67 ddress;. *(long
8dc0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
8dd0: 34 29 20 3d 20 28 6c 6f 6e 67 29 20 76 61 72 69 4) = (long) vari
8de0: 61 62 6c 65 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a able;. *(long *
8df0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 ) (function +32)
8e00: 20 3d 20 28 6c 6f 6e 67 29 20 64 61 74 61 3b 0a = (long) data;.
8e10: 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 #define is_tramp
8e20: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
8e30: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
8e40: 6f 6e 29 5b 30 5d 20 3d 3d 20 28 6c 6f 6e 67 29 on)[0] == (long)
8e50: 20 26 74 72 61 6d 70 0a 23 64 65 66 69 6e 65 20 &tramp.#define
8e60: 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 tramp_address(fu
8e70: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c nction) \. ((l
8e80: 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 ong *) function)
8e90: 5b 32 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 6d [2].#define tram
8ea0: 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 p_variable(funct
8eb0: 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 ion) \. ((long
8ec0: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d *) function)[3]
8ed0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 .#define tramp_d
8ee0: 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ata(function) \
8ef0: 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e . ((long *) fun
8f00: 63 74 69 6f 6e 29 5b 34 5d 0a 23 65 6e 64 69 66 ction)[4].#endif
8f10: 0a 23 69 66 64 65 66 20 5f 5f 78 38 36 5f 36 34 .#ifdef __x86_64
8f20: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
8f30: 3a 0a 20 20 20 2a 20 20 20 20 6d 6f 76 61 62 73 :. * movabs
8f40: 71 20 24 3c 64 61 74 61 3e 2c 25 72 61 78 09 09 q $<data>,%rax..
8f50: 34 38 20 42 38 20 3c 64 61 74 61 3e 0a 20 20 20 48 B8 <data>.
8f60: 2a 20 20 20 20 6d 6f 76 61 62 73 71 20 25 72 61 * movabsq %ra
8f70: 78 2c 20 3c 76 61 72 69 61 62 6c 65 3e 09 34 38 x, <variable>.48
8f80: 20 41 33 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 A3 <variable>.
8f90: 20 20 2a 20 20 20 20 6d 6f 76 61 62 73 71 20 24 * movabsq $
8fa0: 3c 61 64 64 72 65 73 73 3e 2c 25 72 61 78 09 09 <address>,%rax..
8fb0: 34 38 20 42 38 20 3c 61 64 64 72 65 73 73 3e 0a 48 B8 <address>.
8fc0: 20 20 20 2a 20 20 20 20 6a 6d 70 20 2a 25 72 61 * jmp *%ra
8fd0: 78 09 09 09 46 46 20 45 30 0a 20 20 20 2a 2f 0a x...FF E0. */.
8fe0: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
8ff0: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 nction + 0) = 0x
9000: 42 38 34 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 B848;. *(short
9010: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 *) (function + 2
9020: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ) = (unsigned lo
9030: 6e 67 29 20 64 61 74 61 20 26 20 30 78 66 66 66 ng) data & 0xfff
9040: 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 f;. *(int *)
9050: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
9060: 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 ((unsigned long
9070: 29 20 64 61 74 61 20 3e 3e 20 31 36 29 20 26 20 ) data >> 16) &
9080: 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 2a 28 0xffffffff;. *(
9090: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
90a0: 6f 6e 20 2b 20 38 29 20 3d 20 28 28 75 6e 73 69 on + 8) = ((unsi
90b0: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 gned long) data
90c0: 3e 3e 20 34 38 29 20 26 20 30 78 66 66 66 66 3b >> 48) & 0xffff;
90d0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
90e0: 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 30 unction +10) = 0
90f0: 78 41 33 34 38 3b 0a 20 20 2a 28 69 6e 74 20 2a xA348;. *(int *
9100: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 ) (function +1
9110: 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 2) = (unsigned l
9120: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 20 26 20 ong) variable &
9130: 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 2a 28 0xffffffff;. *(
9140: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
9150: 6f 6e 20 2b 31 36 29 20 3d 20 28 28 75 6e 73 69 on +16) = ((unsi
9160: 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 gned long) varia
9170: 62 6c 65 20 3e 3e 20 33 32 29 20 26 20 30 78 66 ble >> 32) & 0xf
9180: 66 66 66 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f fffffff;. *(sho
9190: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
91a0: 2b 32 30 29 20 3d 20 30 78 42 38 34 38 3b 0a 20 +20) = 0xB848;.
91b0: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
91c0: 63 74 69 6f 6e 20 2b 32 32 29 20 3d 20 28 75 6e ction +22) = (un
91d0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 signed long) add
91e0: 72 65 73 73 20 26 20 30 78 66 66 66 66 3b 0a 20 ress & 0xffff;.
91f0: 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 75 6e *(int *) (fun
9200: 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 28 28 75 ction +24) = ((u
9210: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 nsigned long) ad
9220: 64 72 65 73 73 20 3e 3e 20 31 36 29 20 26 20 30 dress >> 16) & 0
9230: 78 66 66 66 66 66 66 66 66 3b 0a 20 20 2a 28 73 xffffffff;. *(s
9240: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
9250: 6e 20 2b 32 38 29 20 3d 20 28 28 75 6e 73 69 67 n +28) = ((unsig
9260: 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 ned long) addres
9270: 73 20 3e 3e 20 34 38 29 20 26 20 30 78 66 66 66 s >> 48) & 0xfff
9280: 66 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 f;. *(short *)
9290: 28 66 75 6e 63 74 69 6f 6e 20 2b 33 30 29 20 3d (function +30) =
92a0: 20 30 78 45 30 46 46 3b 0a 23 64 65 66 69 6e 65 0xE0FF;.#define
92b0: 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 is_tramp(functi
92c0: 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 on) \. *(unsig
92d0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
92e0: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 nction + 0) == 0
92f0: 78 42 38 34 38 20 26 26 20 5c 0a 20 20 2a 28 75 xB848 && \. *(u
9300: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
9310: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 (function +10)
9320: 3d 3d 20 30 78 41 33 34 38 20 26 26 20 5c 0a 20 == 0xA348 && \.
9330: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
9340: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
9350: 32 30 29 20 3d 3d 20 30 78 42 38 34 38 20 26 26 20) == 0xB848 &&
9360: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
9370: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
9380: 6f 6e 20 2b 33 30 29 20 3d 3d 20 30 78 45 30 46 on +30) == 0xE0F
9390: 46 0a 23 64 65 66 69 6e 65 20 68 69 6c 6f 28 68 F.#define hilo(h
93a0: 69 77 6f 72 64 2c 6c 6f 77 6f 72 64 29 20 20 5c iword,loword) \
93b0: 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c . (((unsigned l
93c0: 6f 6e 67 29 20 28 68 69 77 6f 72 64 29 20 3c 3c ong) (hiword) <<
93d0: 20 33 32 29 20 7c 20 28 75 6e 73 69 67 6e 65 64 32) | (unsigned
93e0: 20 6c 6f 6e 67 29 20 28 6c 6f 77 6f 72 64 29 29 long) (loword))
93f0: 0a 23 64 65 66 69 6e 65 20 68 69 6d 69 64 6c 6f .#define himidlo
9400: 28 68 69 73 68 6f 72 74 2c 6d 69 64 77 6f 72 64 (hishort,midword
9410: 2c 6c 6f 73 68 6f 72 74 29 20 20 5c 0a 20 20 28 ,loshort) \. (
9420: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
9430: 20 28 68 69 73 68 6f 72 74 29 20 3c 3c 20 34 38 (hishort) << 48
9440: 29 20 7c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ) | (unsigned lo
9450: 6e 67 29 20 28 6d 69 64 77 6f 72 64 29 20 3c 3c ng) (midword) <<
9460: 20 31 36 20 5c 0a 20 20 20 7c 20 28 75 6e 73 69 16 \. | (unsi
9470: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 6c 6f 73 68 gned long) (losh
9480: 6f 72 74 29 29 0a 23 64 65 66 69 6e 65 20 74 72 ort)).#define tr
9490: 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e 63 amp_address(func
94a0: 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6d 69 64 tion) \. himid
94b0: 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 lo(*(unsigned sh
94c0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
94d0: 20 2b 32 38 29 2c 20 5c 0a 20 20 20 20 20 20 20 +28), \.
94e0: 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e *(unsigned in
94f0: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
9500: 20 2b 32 34 29 2c 20 5c 0a 20 20 20 20 20 20 20 +24), \.
9510: 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 *(unsigned sh
9520: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
9530: 20 2b 32 32 29 29 0a 23 64 65 66 69 6e 65 20 74 +22)).#define t
9540: 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 ramp_variable(fu
9550: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c nction) \. hil
9560: 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 o(*(unsigned int
9570: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
9580: 36 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6), *(unsigned i
9590: 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 nt *) (function
95a0: 2b 31 32 29 29 0a 23 64 65 66 69 6e 65 20 74 72 +12)).#define tr
95b0: 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f amp_data(functio
95c0: 6e 29 20 20 5c 0a 20 20 68 69 6d 69 64 6c 6f 28 n) \. himidlo(
95d0: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
95e0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
95f0: 38 29 2c 20 5c 0a 20 20 20 20 20 20 20 20 20 20 8), \.
9600: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
9610: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 ) (function +
9620: 34 29 2c 20 5c 0a 20 20 20 20 20 20 20 20 20 20 4), \.
9630: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
9640: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
9650: 32 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 2)).#endif.#ifde
9660: 66 20 5f 5f 73 33 39 30 5f 5f 0a 20 20 2f 2a 20 f __s390__. /*
9670: 66 75 6e 63 74 69 6f 6e 3a 0a 0a 20 20 20 20 20 function:..
9680: 20 20 20 6c 72 20 20 20 20 20 20 25 72 30 2c 25 lr %r0,%
9690: 72 31 33 0a 20 20 20 20 20 20 20 20 62 72 61 73 r13. bras
96a0: 20 20 20 20 25 72 31 33 2c 2e 4c 54 4e 30 5f 30 %r13,.LTN0_0
96b0: 0a 2e 4c 54 30 5f 30 3a 0a 2e 4c 43 30 3a 0a 20 ..LT0_0:..LC0:.
96c0: 20 20 20 20 20 20 20 2e 6c 6f 6e 67 20 20 20 30 .long 0
96d0: 78 37 33 35 35 34 37 31 31 0a 2e 4c 43 31 3a 0a x73554711..LC1:.
96e0: 20 20 20 20 20 20 20 20 2e 6c 6f 6e 67 20 20 20 .long
96f0: 30 78 31 32 33 34 35 36 37 38 0a 2e 4c 43 32 3a 0x12345678..LC2:
9700: 0a 20 20 20 20 20 20 20 20 2e 6c 6f 6e 67 20 20 . .long
9710: 20 30 78 62 61 62 65 62 65 63 30 0a 2e 4c 54 4e 0xbabebec0..LTN
9720: 30 5f 30 3a 0a 20 20 20 20 20 20 20 20 6c 20 20 0_0:. l
9730: 20 20 20 20 20 25 72 31 2c 2e 4c 43 30 2d 2e 4c %r1,.LC0-.L
9740: 54 30 5f 30 28 25 72 31 33 29 0a 20 20 20 20 20 T0_0(%r13).
9750: 20 20 20 6d 76 63 20 20 20 20 20 30 28 34 2c 25 mvc 0(4,%
9760: 72 31 29 2c 2e 4c 43 31 2d 2e 4c 54 30 5f 30 28 r1),.LC1-.LT0_0(
9770: 25 72 31 33 29 0a 20 20 20 20 20 20 20 20 6c 20 %r13). l
9780: 20 20 20 20 20 20 25 72 31 2c 2e 4c 43 32 2d 2e %r1,.LC2-.
9790: 4c 54 31 5f 30 28 25 72 31 33 29 0a 20 20 20 20 LT1_0(%r13).
97a0: 20 20 20 20 6c 72 20 20 20 20 20 20 25 72 31 33 lr %r13
97b0: 2c 25 72 30 0a 20 20 20 20 20 20 20 20 62 72 20 ,%r0. br
97c0: 20 20 20 20 20 25 72 31 0a 20 20 2a 2f 0a 20 20 %r1. */.
97d0: 2f 2a 20 57 68 61 74 20 61 62 6f 75 74 20 62 69 /* What about bi
97e0: 67 20 65 6e 64 69 61 6e 20 2f 20 6c 69 74 74 6c g endian / littl
97f0: 65 20 65 6e 64 69 61 6e 20 3f 3f 20 2a 2f 0a 20 e endian ?? */.
9800: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
9810: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
9820: 20 30 29 20 3d 20 30 78 31 38 30 44 3b 0a 20 20 0) = 0x180D;.
9830: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
9840: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 ) (function +
9850: 32 29 20 3d 20 30 78 41 37 44 35 30 30 30 38 3b 2) = 0xA7D50008;
9860: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
9870: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
9880: 20 2b 20 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 + 6) = (unsigne
9890: 64 20 69 6e 74 29 20 76 61 72 69 61 62 6c 65 3b d int) variable;
98a0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
98b0: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
98c0: 20 2b 31 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 +10) = (unsigne
98d0: 64 20 69 6e 74 29 20 64 61 74 61 3b 0a 20 20 2a d int) data;. *
98e0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
98f0: 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 (function +14
9900: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 69 6e ) = (unsigned in
9910: 74 29 20 61 64 64 72 65 73 73 3b 0a 20 20 2a 28 t) address;. *(
9920: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 unsigned int *)
9930: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 (function +18)
9940: 20 3d 20 30 78 35 38 31 30 44 30 30 30 3b 0a 20 = 0x5810D000;.
9950: 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 *(unsigned int
9960: 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
9970: 32 32 29 20 3d 20 30 78 44 32 30 33 31 30 30 30 22) = 0xD2031000
9980: 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 ;. *(unsigned s
9990: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
99a0: 6e 20 2b 32 36 29 20 3d 20 30 78 44 30 30 34 3b n +26) = 0xD004;
99b0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
99c0: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
99d0: 20 2b 32 38 29 20 3d 20 30 78 35 38 31 30 44 30 +28) = 0x5810D0
99e0: 30 38 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 08;. *(unsigned
99f0: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
9a00: 69 6f 6e 20 2b 33 32 29 20 3d 20 30 78 31 38 44 ion +32) = 0x18D
9a10: 30 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 0;. *(unsigned
9a20: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
9a30: 6f 6e 20 2b 33 34 29 20 3d 20 30 78 30 37 66 31 on +34) = 0x07f1
9a40: 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 ;.#define is_tra
9a50: 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a mp(function) \.
9a60: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 20 20 20 *(short *)
9a70: 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 (function
9a80: 2b 20 30 29 20 3d 3d 20 30 78 31 38 30 44 20 26 + 0) == 0x180D &
9a90: 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 & \. *(int *)
9aa0: 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 (funct
9ab0: 69 6f 6e 20 2b 20 32 29 20 3d 3d 20 30 78 41 37 ion + 2) == 0xA7
9ac0: 44 35 30 30 30 38 20 26 26 20 5c 0a 20 20 2a 28 D50008 && \. *(
9ad0: 69 6e 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 int *)
9ae0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 (function +18)
9af0: 20 3d 3d 20 30 78 35 38 31 30 44 30 30 30 20 26 == 0x5810D000 &
9b00: 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 & \. *(int *)
9b10: 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 (funct
9b20: 69 6f 6e 20 2b 32 32 29 20 3d 3d 20 30 78 44 32 ion +22) == 0xD2
9b30: 30 33 31 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 031000 && \. *(
9b40: 73 68 6f 72 74 20 2a 29 20 20 20 20 20 20 20 20 short *)
9b50: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 36 29 (function +26)
9b60: 20 3d 3d 20 30 78 44 30 30 34 20 26 26 20 5c 0a == 0xD004 && \.
9b70: 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 20 20 *(int *)
9b80: 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 (function
9b90: 2b 32 38 29 20 3d 3d 20 30 78 35 38 31 30 44 30 +28) == 0x5810D0
9ba0: 30 38 20 26 26 20 5c 0a 20 20 2a 28 73 68 6f 72 08 && \. *(shor
9bb0: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 t *) (f
9bc0: 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d 3d 20 unction +32) ==
9bd0: 30 78 31 38 44 30 20 26 26 20 5c 0a 20 20 2a 28 0x18D0 && \. *(
9be0: 73 68 6f 72 74 20 2a 29 20 20 20 20 20 20 20 20 short *)
9bf0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 34 29 (function +34)
9c00: 20 3d 3d 20 30 78 30 37 66 31 0a 23 64 65 66 69 == 0x07f1.#defi
9c10: 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 ne tramp_address
9c20: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
9c30: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
9c40: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 ) (function +14)
9c50: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 .#define tramp_v
9c60: 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e ariable(function
9c70: 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ) \. *(unsigne
9c80: 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 d int *) (functi
9c90: 6f 6e 20 2b 36 29 0a 23 64 65 66 69 6e 65 20 74 on +6).#define t
9ca0: 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 ramp_data(functi
9cb0: 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 on) \. *(unsig
9cc0: 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 ned int *) (func
9cd0: 74 69 6f 6e 20 2b 31 30 29 0a 23 65 6e 64 69 66 tion +10).#endif
9ce0: 0a 0a 20 20 2f 2a 20 33 2e 20 53 65 74 20 6d 65 .. /* 3. Set me
9cf0: 6d 6f 72 79 20 70 72 6f 74 65 63 74 69 6f 6e 20 mory protection
9d00: 74 6f 20 22 65 78 65 63 75 74 61 62 6c 65 22 20 to "executable"
9d10: 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 */..#if !defined
9d20: 28 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c 45 (CODE_EXECUTABLE
9d30: 29 20 26 26 20 64 65 66 69 6e 65 64 28 45 58 45 ) && defined(EXE
9d40: 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 4f CUTABLE_VIA_MPRO
9d50: 54 45 43 54 29 0a 20 20 2f 2a 20 43 61 6c 6c 20 TECT). /* Call
9d60: 6d 70 72 6f 74 65 63 74 20 6f 6e 20 74 68 65 20 mprotect on the
9d70: 70 61 67 65 73 20 74 68 61 74 20 63 6f 6e 74 61 pages that conta
9d80: 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 20 2a 2f in the range. */
9d90: 0a 20 20 7b 20 75 6e 73 69 67 6e 65 64 20 6c 6f . { unsigned lo
9da0: 6e 67 20 73 74 61 72 74 5f 61 64 64 72 20 3d 20 ng start_addr =
9db0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
9dc0: 66 75 6e 63 74 69 6f 6e 3b 0a 20 20 20 20 75 6e function;. un
9dd0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 65 6e 64 5f signed long end_
9de0: 61 64 64 72 20 3d 20 28 75 6e 73 69 67 6e 65 64 addr = (unsigned
9df0: 20 6c 6f 6e 67 29 20 28 66 75 6e 63 74 69 6f 6e long) (function
9e00: 20 2b 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 29 + TRAMP_LENGTH)
9e10: 3b 0a 20 20 20 20 73 74 61 72 74 5f 61 64 64 72 ;. start_addr
9e20: 20 3d 20 73 74 61 72 74 5f 61 64 64 72 20 26 20 = start_addr &
9e30: 2d 70 61 67 65 73 69 7a 65 3b 0a 20 20 20 20 65 -pagesize;. e
9e40: 6e 64 5f 61 64 64 72 20 3d 20 28 65 6e 64 5f 61 nd_addr = (end_a
9e50: 64 64 72 20 2b 20 70 61 67 65 73 69 7a 65 2d 31 ddr + pagesize-1
9e60: 29 20 26 20 2d 70 61 67 65 73 69 7a 65 3b 0a 20 ) & -pagesize;.
9e70: 20 20 7b 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 {unsigned long
9e80: 20 6c 65 6e 20 3d 20 65 6e 64 5f 61 64 64 72 20 len = end_addr
9e90: 2d 20 73 74 61 72 74 5f 61 64 64 72 3b 0a 23 69 - start_addr;.#i
9ea0: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 4d f defined(HAVE_M
9eb0: 41 43 48 5f 56 4d 29 0a 20 20 20 20 69 66 20 28 ACH_VM). if (
9ec0: 76 6d 5f 70 72 6f 74 65 63 74 28 74 61 73 6b 5f vm_protect(task_
9ed0: 73 65 6c 66 28 29 2c 73 74 61 72 74 5f 61 64 64 self(),start_add
9ee0: 72 2c 6c 65 6e 2c 30 2c 56 4d 5f 50 52 4f 54 5f r,len,0,VM_PROT_
9ef0: 52 45 41 44 7c 56 4d 5f 50 52 4f 54 5f 57 52 49 READ|VM_PROT_WRI
9f00: 54 45 7c 56 4d 5f 50 52 4f 54 5f 45 58 45 43 55 TE|VM_PROT_EXECU
9f10: 54 45 29 20 21 3d 20 4b 45 52 4e 5f 53 55 43 43 TE) != KERN_SUCC
9f20: 45 53 53 29 0a 23 65 6c 73 65 0a 23 69 66 20 64 ESS).#else.#if d
9f30: 65 66 69 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f efined(__convex_
9f40: 5f 29 0a 20 20 20 20 2f 2a 20 43 6f 6e 76 65 78 _). /* Convex
9f50: 20 4f 53 20 63 61 6c 6c 73 20 69 74 20 60 6d 72 OS calls it `mr
9f60: 65 6d 61 70 28 29 27 2e 20 2a 2f 0a 20 20 20 20 emap()'. */.
9f70: 6d 72 65 6d 61 70 28 73 74 61 72 74 5f 61 64 64 mremap(start_add
9f80: 72 2c 20 26 6c 65 6e 2c 20 50 52 4f 54 5f 52 45 r, &len, PROT_RE
9f90: 41 44 7c 50 52 4f 54 5f 57 52 49 54 45 7c 50 52 AD|PROT_WRITE|PR
9fa0: 4f 54 5f 45 58 45 43 2c 20 4d 41 50 5f 50 52 49 OT_EXEC, MAP_PRI
9fb0: 56 41 54 45 29 3b 0a 20 20 20 20 69 66 20 28 30 VATE);. if (0
9fc0: 29 0a 23 65 6c 73 65 0a 23 69 66 20 64 65 66 69 ).#else.#if defi
9fd0: 6e 65 64 28 48 41 56 45 5f 53 59 53 5f 4d 38 38 ned(HAVE_SYS_M88
9fe0: 4b 42 43 53 5f 48 29 0a 20 20 20 20 69 66 20 28 KBCS_H). if (
9ff0: 6d 65 6d 63 74 6c 28 73 74 61 72 74 5f 61 64 64 memctl(start_add
a000: 72 2c 20 6c 65 6e 2c 20 4d 43 54 5f 54 45 58 54 r, len, MCT_TEXT
a010: 29 20 3d 3d 20 2d 31 29 0a 23 65 6c 73 65 0a 20 ) == -1).#else.
a020: 20 20 20 69 66 20 28 6d 70 72 6f 74 65 63 74 28 if (mprotect(
a030: 28 76 6f 69 64 2a 29 73 74 61 72 74 5f 61 64 64 (void*)start_add
a040: 72 2c 20 6c 65 6e 2c 20 50 52 4f 54 5f 52 45 41 r, len, PROT_REA
a050: 44 7c 50 52 4f 54 5f 57 52 49 54 45 7c 50 52 4f D|PROT_WRITE|PRO
a060: 54 5f 45 58 45 43 29 20 3c 20 30 29 0a 23 65 6e T_EXEC) < 0).#en
a070: 64 69 66 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 dif.#endif.#endi
a080: 66 0a 20 20 20 20 20 20 7b 20 66 70 72 69 6e 74 f. { fprint
a090: 66 28 73 74 64 65 72 72 2c 22 74 72 61 6d 70 6f f(stderr,"trampo
a0a0: 6c 69 6e 65 3a 20 63 61 6e 6e 6f 74 20 6d 61 6b line: cannot mak
a0b0: 65 20 6d 65 6d 6f 72 79 20 65 78 65 63 75 74 61 e memory executa
a0c0: 62 6c 65 5c 6e 22 29 3b 20 61 62 6f 72 74 28 29 ble\n"); abort()
a0d0: 3b 20 7d 0a 20 20 7d 7d 0a 23 65 6e 64 69 66 0a ; }. }}.#endif.
a0e0: 0a 20 20 2f 2a 20 34 2e 20 46 6c 75 73 68 20 69 . /* 4. Flush i
a0f0: 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 63 68 65 nstruction cache
a100: 20 2a 2f 0a 20 20 2f 2a 20 57 65 20 6e 65 65 64 */. /* We need
a110: 20 74 68 69 73 20 62 65 63 61 75 73 65 20 73 6f this because so
a120: 6d 65 20 43 50 55 73 20 68 61 76 65 20 73 65 70 me CPUs have sep
a130: 61 72 61 74 65 20 64 61 74 61 20 63 61 63 68 65 arate data cache
a140: 20 61 6e 64 20 69 6e 73 74 72 75 63 74 69 6f 6e and instruction
a150: 0a 20 20 20 2a 20 63 61 63 68 65 2e 20 54 68 65 . * cache. The
a160: 20 66 72 65 73 68 6c 79 20 62 75 69 6c 74 20 74 freshly built t
a170: 72 61 6d 70 6f 6c 69 6e 65 20 69 73 20 76 69 73 rampoline is vis
a180: 69 62 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 ible to the data
a190: 20 63 61 63 68 65 2c 20 62 75 74 20 6e 6f 74 0a cache, but not.
a1a0: 20 20 20 2a 20 6d 61 79 62 65 20 6e 6f 74 20 74 * maybe not t
a1b0: 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f o the instructio
a1c0: 6e 20 63 61 63 68 65 2e 20 54 68 69 73 20 69 73 n cache. This is
a1d0: 20 68 61 69 72 79 2e 0a 20 20 20 2a 2f 0a 23 69 hairy.. */.#i
a1e0: 66 20 21 28 64 65 66 69 6e 65 64 28 5f 5f 68 70 f !(defined(__hp
a1f0: 70 61 6e 65 77 5f 5f 29 20 7c 7c 20 64 65 66 69 panew__) || defi
a200: 6e 65 64 28 5f 5f 72 73 36 30 30 30 61 69 78 5f ned(__rs6000aix_
a210: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f _) || defined(__
a220: 69 61 36 34 5f 5f 29 29 0a 20 20 2f 2a 20 4f 6e ia64__)). /* On
a230: 6c 79 20 6e 65 65 64 65 64 20 69 66 20 77 65 20 ly needed if we
a240: 72 65 61 6c 6c 79 20 73 65 74 20 75 70 20 6d 61 really set up ma
a250: 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74 69 6f chine instructio
a260: 6e 73 2e 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f ns. */.#ifdef __
a270: 69 33 38 36 5f 5f 0a 23 69 66 20 64 65 66 69 6e i386__.#if defin
a280: 65 64 28 5f 57 49 4e 33 32 29 0a 20 20 77 68 69 ed(_WIN32). whi
a290: 6c 65 20 28 21 46 6c 75 73 68 49 6e 73 74 72 75 le (!FlushInstru
a2a0: 63 74 69 6f 6e 43 61 63 68 65 28 47 65 74 43 75 ctionCache(GetCu
a2b0: 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29 2c 66 rrentProcess(),f
a2c0: 75 6e 63 74 69 6f 6e 2c 54 52 41 4d 50 5f 4c 45 unction,TRAMP_LE
a2d0: 4e 47 54 48 29 29 0a 20 20 20 20 63 6f 6e 74 69 NGTH)). conti
a2e0: 6e 75 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 nue;.#endif.#end
a2f0: 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 36 38 6b if.#ifdef __m68k
a300: 5f 5f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e __.#if defined(N
a310: 65 58 54 29 20 26 26 20 64 65 66 69 6e 65 64 28 eXT) && defined(
a320: 5f 5f 47 4e 55 43 5f 5f 29 0a 20 20 5f 5f 61 73 __GNUC__). __as
a330: 6d 5f 5f 20 5f 5f 76 6f 6c 61 74 69 6c 65 5f 5f m__ __volatile__
a340: 20 28 22 74 72 61 70 20 23 32 22 29 3b 0a 23 65 ("trap #2");.#e
a350: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
a360: 28 41 4d 49 47 41 29 0a 20 20 43 61 63 68 65 43 (AMIGA). CacheC
a370: 6c 65 61 72 45 28 66 75 6e 63 74 69 6f 6e 2c 54 learE(function,T
a380: 52 41 4d 50 5f 4c 45 4e 47 54 48 2c 43 41 43 52 RAMP_LENGTH,CACR
a390: 46 5f 43 6c 65 61 72 49 7c 43 41 43 52 46 5f 43 F_ClearI|CACRF_C
a3a0: 6c 65 61 72 44 29 3b 0a 23 65 6e 64 69 66 0a 23 learD);.#endif.#
a3b0: 69 66 20 64 65 66 69 6e 65 64 28 61 70 6f 6c 6c if defined(apoll
a3c0: 6f 29 0a 20 20 63 61 63 68 65 5f 24 63 6c 65 61 o). cache_$clea
a3d0: 72 28 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 r();.#endif.#if
a3e0: 64 65 66 69 6e 65 64 28 68 70 75 78 29 0a 20 20 defined(hpux).
a3f0: 63 61 63 68 65 63 74 6c 28 43 43 5f 49 50 55 52 cachectl(CC_IPUR
a400: 47 45 2c 66 75 6e 63 74 69 6f 6e 2c 54 52 41 4d GE,function,TRAM
a410: 50 5f 4c 45 4e 47 54 48 29 3b 0a 23 65 6e 64 69 P_LENGTH);.#endi
a420: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f f.#if defined(__
a430: 4e 65 74 42 53 44 5f 5f 29 20 26 26 20 64 65 66 NetBSD__) && def
a440: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 20 ined(__GNUC__).
a450: 20 7b 20 72 65 67 69 73 74 65 72 20 75 6e 73 69 { register unsi
a460: 67 6e 65 64 20 6c 6f 6e 67 20 5f 62 65 67 20 5f gned long _beg _
a470: 5f 61 73 6d 5f 5f 20 28 22 25 61 31 22 29 20 3d _asm__ ("%a1") =
a480: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long)
a490: 20 66 75 6e 63 74 69 6f 6e 3b 0a 20 20 20 20 72 function;. r
a4a0: 65 67 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64 egister unsigned
a4b0: 20 6c 6f 6e 67 20 5f 6c 65 6e 20 5f 5f 61 73 6d long _len __asm
a4c0: 5f 5f 20 28 22 25 64 31 22 29 20 3d 20 54 52 41 __ ("%d1") = TRA
a4d0: 4d 50 5f 4c 45 4e 47 54 48 3b 0a 20 20 20 20 5f MP_LENGTH;. _
a4e0: 5f 61 73 6d 5f 5f 20 5f 5f 76 6f 6c 61 74 69 6c _asm__ __volatil
a4f0: 65 5f 5f 20 28 0a 20 20 20 20 20 20 22 6d 6f 76 e__ (. "mov
a500: 65 25 2e 6c 20 25 23 30 78 38 30 30 30 30 30 30 e%.l %#0x8000000
a510: 34 2c 25 2f 64 30 5c 6e 5c 74 22 20 2f 2a 20 43 4,%/d0\n\t" /* C
a520: 43 5f 45 58 54 50 55 52 47 45 20 7c 20 43 5f 49 C_EXTPURGE | C_I
a530: 50 55 52 47 45 20 2a 2f 0a 20 20 20 20 20 20 22 PURGE */. "
a540: 74 72 61 70 20 23 31 32 22 20 20 20 20 20 20 20 trap #12"
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f /
a560: 2a 20 6b 65 72 6e 65 6c 20 63 61 6c 6c 20 60 63 * kernel call `c
a570: 61 63 68 65 63 74 6c 27 20 2a 2f 0a 20 20 20 20 achectl' */.
a580: 20 20 3a 0a 20 20 20 20 20 20 3a 20 22 61 22 20 :. : "a"
a590: 28 5f 62 65 67 29 2c 20 22 64 22 20 28 5f 6c 65 (_beg), "d" (_le
a5a0: 6e 29 0a 20 20 20 20 20 20 3a 20 22 25 61 30 22 n). : "%a0"
a5b0: 2c 20 22 25 61 31 22 2c 20 22 25 64 30 22 2c 20 , "%a1", "%d0",
a5c0: 22 25 64 31 22 20 20 20 20 2f 2a 20 63 61 6c 6c "%d1" /* call
a5d0: 2d 75 73 65 64 20 72 65 67 69 73 74 65 72 73 20 -used registers
a5e0: 2a 2f 0a 20 20 20 20 20 20 29 3b 0a 20 20 7d 0a */. );. }.
a5f0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
a600: 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 26 26 ed(__linux__) &&
a610: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f defined(__GNUC_
a620: 5f 29 0a 20 20 7b 20 72 65 67 69 73 74 65 72 20 _). { register
a630: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 5f 62 unsigned long _b
a640: 65 67 20 5f 5f 61 73 6d 5f 5f 20 28 22 25 64 31 eg __asm__ ("%d1
a650: 22 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c ") = (unsigned l
a660: 6f 6e 67 29 20 66 75 6e 63 74 69 6f 6e 3b 0a 20 ong) function;.
a670: 20 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69 register unsi
a680: 67 6e 65 64 20 6c 6f 6e 67 20 5f 6c 65 6e 20 5f gned long _len _
a690: 5f 61 73 6d 5f 5f 20 28 22 25 64 34 22 29 20 3d _asm__ ("%d4") =
a6a0: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 2b 20 TRAMP_LENGTH +
a6b0: 33 32 3b 0a 20 20 20 20 5f 5f 61 73 6d 5f 5f 20 32;. __asm__
a6c0: 5f 5f 76 6f 6c 61 74 69 6c 65 5f 5f 20 28 0a 20 __volatile__ (.
a6d0: 20 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 "move%.l %#
a6e0: 31 32 33 2c 25 2f 64 30 5c 6e 5c 74 22 0a 20 20 123,%/d0\n\t".
a6f0: 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 31 "move%.l %#1
a700: 2c 25 2f 64 32 5c 6e 5c 74 22 0a 20 20 20 20 20 ,%/d2\n\t".
a710: 20 22 6d 6f 76 65 25 2e 6c 20 25 23 33 2c 25 2f "move%.l %#3,%/
a720: 64 33 5c 6e 5c 74 22 0a 20 20 20 20 20 20 22 74 d3\n\t". "t
a730: 72 61 70 20 25 23 30 22 0a 20 20 20 20 20 20 3a rap %#0". :
a740: 0a 20 20 20 20 20 20 3a 20 22 64 22 20 28 5f 62 . : "d" (_b
a750: 65 67 29 2c 20 22 64 22 20 28 5f 6c 65 6e 29 0a eg), "d" (_len).
a760: 20 20 20 20 20 20 3a 20 22 25 64 30 22 2c 20 22 : "%d0", "
a770: 25 64 32 22 2c 20 22 25 64 33 22 0a 20 20 20 20 %d2", "%d3".
a780: 20 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a );. }.#endif.
a790: 23 69 66 20 64 65 66 69 6e 65 64 28 41 55 58 29 #if defined(AUX)
a7a0: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e && defined(__GN
a7b0: 55 43 5f 5f 29 0a 20 20 2f 2a 20 73 79 73 6d 36 UC__). /* sysm6
a7c0: 38 6b 28 31 30 35 2c 20 61 64 64 72 2c 20 73 63 8k(105, addr, sc
a7d0: 6f 70 65 2c 20 63 61 63 68 65 2c 20 6c 65 6e 29 ope, cache, len)
a7e0: 20 2a 2f 0a 20 20 5f 5f 61 73 6d 5f 5f 20 5f 5f */. __asm__ __
a7f0: 76 6f 6c 61 74 69 6c 65 5f 5f 20 28 0a 20 20 20 volatile__ (.
a800: 20 22 6d 6f 76 65 25 2e 6c 20 25 31 2c 25 2f 73 "move%.l %1,%/s
a810: 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 20 22 6d 6f p@-\n\t". "mo
a820: 76 65 25 2e 6c 20 25 23 33 2c 25 2f 73 70 40 2d ve%.l %#3,%/sp@-
a830: 5c 6e 5c 74 22 0a 20 20 20 20 22 6d 6f 76 65 25 \n\t". "move%
a840: 2e 6c 20 25 23 31 2c 25 2f 73 70 40 2d 5c 6e 5c .l %#1,%/sp@-\n\
a850: 74 22 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 t". "move%.l
a860: 25 30 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 %0,%/sp@-\n\t".
a870: 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 31 30 "move%.l %#10
a880: 35 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 20 5,%/sp@-\n\t".
a890: 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 30 2c 25 "move%.l %#0,%
a8a0: 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 20 22 /sp@-\n\t". "
a8b0: 6d 6f 76 65 25 2e 6c 20 25 23 33 38 2c 25 2f 73 move%.l %#38,%/s
a8c0: 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 20 22 74 72 p@-\n\t". "tr
a8d0: 61 70 20 25 23 30 5c 6e 5c 74 22 0a 20 20 20 20 ap %#0\n\t".
a8e0: 22 61 64 64 25 2e 6c 20 25 23 32 34 2c 25 2f 73 "add%.l %#24,%/s
a8f0: 70 22 0a 20 20 20 20 3a 0a 20 20 20 20 3a 20 22 p". :. : "
a900: 72 22 20 28 66 75 6e 63 74 69 6f 6e 29 2c 20 22 r" (function), "
a910: 67 22 20 28 28 69 6e 74 29 54 52 41 4d 50 5f 4c g" ((int)TRAMP_L
a920: 45 4e 47 54 48 29 0a 20 20 20 20 3a 20 22 25 64 ENGTH). : "%d
a930: 30 22 0a 20 20 20 20 29 3b 0a 23 65 6e 64 69 66 0". );.#endif
a940: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
a950: 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c 7c ned(__mips__) ||
a960: 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e defined(__mipsn
a970: 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 32__) || defined
a980: 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 20 20 63 (__mips64__). c
a990: 61 63 68 65 66 6c 75 73 68 28 66 75 6e 63 74 69 acheflush(functi
a9a0: 6f 6e 2c 54 52 41 4d 50 5f 4c 45 4e 47 54 48 2c on,TRAMP_LENGTH,
a9b0: 49 43 41 43 48 45 29 3b 0a 20 20 2f 2a 20 67 66 ICACHE);. /* gf
a9c0: 6f 72 74 68 2d 30 2e 33 2e 30 20 75 73 65 73 20 orth-0.3.0 uses
a9d0: 42 43 41 43 48 45 20 69 6e 73 74 65 61 64 20 6f BCACHE instead o
a9e0: 66 20 49 43 41 43 48 45 2e 20 57 68 79 3f 3f 20 f ICACHE. Why??
a9f0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 */.#endif.#if de
aa00: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 fined(__sparc__)
aa10: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 || defined(__sp
aa20: 61 72 63 36 34 5f 5f 29 0a 20 20 2f 2a 20 54 68 arc64__). /* Th
aa30: 69 73 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 is assumes that
aa40: 74 68 65 20 74 72 61 6d 70 6f 6c 69 6e 65 20 66 the trampoline f
aa50: 69 74 73 20 69 6e 20 61 74 20 6d 6f 73 74 20 66 its in at most f
aa60: 6f 75 72 20 63 61 63 68 65 20 6c 69 6e 65 73 2e our cache lines.
aa70: 20 2a 2f 0a 20 20 5f 5f 54 52 5f 63 6c 65 61 72 */. __TR_clear
aa80: 5f 63 61 63 68 65 5f 34 28 66 75 6e 63 74 69 6f _cache_4(functio
aa90: 6e 2c 66 75 6e 63 74 69 6f 6e 2b 54 52 41 4d 50 n,function+TRAMP
aaa0: 5f 4c 45 4e 47 54 48 2d 31 29 3b 0a 23 65 6e 64 _LENGTH-1);.#end
aab0: 69 66 0a 23 69 66 64 65 66 20 5f 5f 61 6c 70 68 if.#ifdef __alph
aac0: 61 5f 5f 0a 20 20 5f 5f 54 52 5f 63 6c 65 61 72 a__. __TR_clear
aad0: 5f 63 61 63 68 65 28 29 3b 0a 23 65 6e 64 69 66 _cache();.#endif
aae0: 0a 23 69 66 64 65 66 20 5f 5f 68 70 70 61 5f 5f .#ifdef __hppa__
aaf0: 0a 20 20 2f 2a 20 54 68 69 73 20 61 73 73 75 6d . /* This assum
ab00: 65 73 20 74 68 61 74 20 74 68 65 20 74 72 61 6d es that the tram
ab10: 70 6f 6c 69 6e 65 20 66 69 74 73 20 69 6e 20 61 poline fits in a
ab20: 74 20 6d 6f 73 74 20 74 77 6f 20 63 61 63 68 65 t most two cache
ab30: 20 6c 69 6e 65 73 2e 20 2a 2f 0a 20 20 5f 5f 54 lines. */. __T
ab40: 52 5f 63 6c 65 61 72 5f 63 61 63 68 65 28 66 75 R_clear_cache(fu
ab50: 6e 63 74 69 6f 6e 2c 66 75 6e 63 74 69 6f 6e 2b nction,function+
ab60: 54 52 41 4d 50 5f 4c 45 4e 47 54 48 2d 31 29 3b TRAMP_LENGTH-1);
ab70: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
ab80: 5f 61 72 6d 5f 5f 0a 20 20 2f 2a 20 54 68 69 73 _arm__. /* This
ab90: 20 43 50 55 20 64 6f 65 73 20 6e 6f 74 20 68 61 CPU does not ha
aba0: 76 65 20 61 20 73 65 70 61 72 61 74 65 20 69 6e ve a separate in
abb0: 73 74 72 75 63 74 69 6f 6e 20 63 61 63 68 65 2e struction cache.
abc0: 20 28 49 20 74 68 69 6e 6b 2e 29 20 2a 2f 0a 23 (I think.) */.#
abd0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 72 endif.#ifdef __r
abe0: 73 36 30 30 30 5f 5f 0a 20 20 5f 5f 54 52 5f 63 s6000__. __TR_c
abf0: 6c 65 61 72 5f 63 61 63 68 65 28 66 75 6e 63 74 lear_cache(funct
ac00: 69 6f 6e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 ion);.#endif.#if
ac10: 64 65 66 20 5f 5f 6d 38 38 6b 5f 5f 0a 20 20 73 def __m88k__. s
ac20: 79 73 6d 6f 74 28 53 38 38 43 41 43 48 45 46 4c ysmot(S88CACHEFL
ac30: 55 53 48 50 41 47 45 2c 20 28 75 6e 73 69 67 6e USHPAGE, (unsign
ac40: 65 64 20 6c 6f 6e 67 29 66 75 6e 63 74 69 6f 6e ed long)function
ac50: 20 26 20 2d 70 61 67 65 73 69 7a 65 29 3b 0a 23 & -pagesize);.#
ac60: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 63 endif.#ifdef __c
ac70: 6f 6e 76 65 78 5f 5f 0a 20 20 5f 5f 54 52 5f 63 onvex__. __TR_c
ac80: 6c 65 61 72 5f 63 61 63 68 65 28 29 3b 0a 23 65 lear_cache();.#e
ac90: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 20 20 2f ndif.#endif.. /
aca0: 2a 20 35 2e 20 52 65 74 75 72 6e 2e 20 2a 2f 0a * 5. Return. */.
acb0: 20 20 72 65 74 75 72 6e 20 28 5f 5f 54 52 5f 66 return (__TR_f
acc0: 75 6e 63 74 69 6f 6e 29 20 28 66 75 6e 63 74 69 unction) (functi
acd0: 6f 6e 20 2b 20 54 52 41 4d 50 5f 42 49 41 53 29 on + TRAMP_BIAS)
ace0: 3b 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 ;.}..#if defined
acf0: 28 5f 5f 53 54 44 43 5f 5f 29 20 7c 7c 20 64 65 (__STDC__) || de
ad00: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 fined(__GNUC__)
ad10: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 70 6c || defined(__cpl
ad20: 75 73 70 6c 75 73 29 0a 76 6f 69 64 20 66 72 65 usplus).void fre
ad30: 65 5f 74 72 61 6d 70 6f 6c 69 6e 65 20 28 5f 5f e_trampoline (__
ad40: 54 52 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 TR_function func
ad50: 74 69 6f 6e 29 0a 23 65 6c 73 65 0a 76 6f 69 64 tion).#else.void
ad60: 20 66 72 65 65 5f 74 72 61 6d 70 6f 6c 69 6e 65 free_trampoline
ad70: 20 28 66 75 6e 63 74 69 6f 6e 29 0a 20 20 5f 5f (function). __
ad80: 54 52 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 TR_function func
ad90: 74 69 6f 6e 3b 0a 23 65 6e 64 69 66 0a 7b 0a 23 tion;.#endif.{.#
ada0: 69 66 20 54 52 41 4d 50 5f 42 49 41 53 0a 20 20 if TRAMP_BIAS.
adb0: 66 75 6e 63 74 69 6f 6e 20 3d 20 28 5f 5f 54 52 function = (__TR
adc0: 5f 66 75 6e 63 74 69 6f 6e 29 28 28 63 68 61 72 _function)((char
add0: 2a 29 66 75 6e 63 74 69 6f 6e 20 2d 20 54 52 41 *)function - TRA
ade0: 4d 50 5f 42 49 41 53 29 3b 0a 23 65 6e 64 69 66 MP_BIAS);.#endif
adf0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 43 4f .#if !defined(CO
ae00: 44 45 5f 45 58 45 43 55 54 41 42 4c 45 29 20 26 DE_EXECUTABLE) &
ae10: 26 20 21 64 65 66 69 6e 65 64 28 45 58 45 43 55 & !defined(EXECU
ae20: 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 4f 54 45 TABLE_VIA_MPROTE
ae30: 43 54 29 0a 20 20 2a 28 63 68 61 72 2a 2a 29 66 CT). *(char**)f
ae40: 75 6e 63 74 69 6f 6e 20 3d 20 66 72 65 65 6c 69 unction = freeli
ae50: 73 74 3b 20 66 72 65 65 6c 69 73 74 20 3d 20 28 st; freelist = (
ae60: 63 68 61 72 2a 29 66 75 6e 63 74 69 6f 6e 3b 0a char*)function;.
ae70: 20 20 2f 2a 20 49 74 20 69 73 20 70 72 6f 62 61 /* It is proba
ae80: 62 6c 79 20 6e 6f 74 20 77 6f 72 74 68 20 63 61 bly not worth ca
ae90: 6c 6c 69 6e 67 20 6d 75 6e 6d 61 70 28 29 20 66 lling munmap() f
aea0: 6f 72 20 65 6e 74 69 72 65 6c 79 20 66 72 65 65 or entirely free
aeb0: 64 20 70 61 67 65 73 2e 20 2a 2f 0a 23 65 6c 73 d pages. */.#els
aec0: 65 0a 20 20 66 72 65 65 28 28 28 63 68 61 72 2a e. free(((char*
aed0: 2a 29 66 75 6e 63 74 69 6f 6e 29 5b 2d 31 5d 29 *)function)[-1])
aee0: 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 23 69 66 20 ;.#endif.}..#if
aef0: 64 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f defined(__STDC__
af00: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 ) || defined(__G
af10: 4e 55 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 NUC__) || define
af20: 64 28 5f 5f 63 70 6c 75 73 70 6c 75 73 29 0a 69 d(__cplusplus).i
af30: 6e 74 20 69 73 5f 74 72 61 6d 70 6f 6c 69 6e 65 nt is_trampoline
af40: 20 28 76 6f 69 64 2a 20 66 75 6e 63 74 69 6f 6e (void* function
af50: 29 0a 23 65 6c 73 65 0a 69 6e 74 20 69 73 5f 74 ).#else.int is_t
af60: 72 61 6d 70 6f 6c 69 6e 65 20 28 66 75 6e 63 74 rampoline (funct
af70: 69 6f 6e 29 0a 20 20 76 6f 69 64 2a 20 66 75 6e ion). void* fun
af80: 63 74 69 6f 6e 3b 0a 23 65 6e 64 69 66 0a 7b 0a ction;.#endif.{.
af90: 23 69 66 64 65 66 20 69 73 5f 74 72 61 6d 70 0a #ifdef is_tramp.
afa0: 23 69 66 64 65 66 20 5f 5f 68 70 70 61 6e 65 77 #ifdef __hppanew
afb0: 5f 5f 0a 20 20 76 6f 69 64 2a 20 74 72 61 6d 70 __. void* tramp
afc0: 5f 61 64 64 72 65 73 73 20 3d 20 26 74 72 61 6d _address = &tram
afd0: 70 3b 0a 20 20 69 66 20 28 21 28 28 28 6c 6f 6e p;. if (!(((lon
afe0: 67 29 66 75 6e 63 74 69 6f 6e 20 26 20 33 29 20 g)function & 3)
aff0: 3d 3d 20 28 54 52 41 4d 50 5f 42 49 41 53 20 26 == (TRAMP_BIAS &
b000: 20 33 29 29 29 20 72 65 74 75 72 6e 20 30 3b 0a 3))) return 0;.
b010: 23 65 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 #endif. return
b020: 28 28 69 73 5f 74 72 61 6d 70 28 28 28 63 68 61 ((is_tramp(((cha
b030: 72 2a 29 66 75 6e 63 74 69 6f 6e 20 2d 20 54 52 r*)function - TR
b040: 41 4d 50 5f 42 49 41 53 29 29 29 20 3f 20 31 20 AMP_BIAS))) ? 1
b050: 3a 20 30 29 3b 0a 23 65 6c 73 65 0a 20 20 61 62 : 0);.#else. ab
b060: 6f 72 74 28 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a ort();.#endif.}.
b070: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 .#if defined(__S
b080: 54 44 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 TDC__) || define
b090: 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 7c 7c 20 64 d(__GNUC__) || d
b0a0: 65 66 69 6e 65 64 28 5f 5f 63 70 6c 75 73 70 6c efined(__cpluspl
b0b0: 75 73 29 0a 5f 5f 54 52 5f 66 75 6e 63 74 69 6f us).__TR_functio
b0c0: 6e 20 74 72 61 6d 70 6f 6c 69 6e 65 5f 61 64 64 n trampoline_add
b0d0: 72 65 73 73 20 28 76 6f 69 64 2a 20 66 75 6e 63 ress (void* func
b0e0: 74 69 6f 6e 29 0a 23 65 6c 73 65 0a 5f 5f 54 52 tion).#else.__TR
b0f0: 5f 66 75 6e 63 74 69 6f 6e 20 74 72 61 6d 70 6f _function trampo
b100: 6c 69 6e 65 5f 61 64 64 72 65 73 73 20 28 66 75 line_address (fu
b110: 6e 63 74 69 6f 6e 29 0a 20 20 76 6f 69 64 2a 20 nction). void*
b120: 66 75 6e 63 74 69 6f 6e 3b 0a 23 65 6e 64 69 66 function;.#endif
b130: 0a 7b 0a 23 69 66 64 65 66 20 74 72 61 6d 70 5f .{.#ifdef tramp_
b140: 61 64 64 72 65 73 73 0a 20 20 72 65 74 75 72 6e address. return
b150: 20 28 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 29 (__TR_function)
b160: 28 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 28 (tramp_address((
b170: 28 63 68 61 72 2a 29 66 75 6e 63 74 69 6f 6e 20 (char*)function
b180: 2d 20 54 52 41 4d 50 5f 42 49 41 53 29 29 29 3b - TRAMP_BIAS)));
b190: 0a 23 65 6c 73 65 0a 20 20 61 62 6f 72 74 28 29 .#else. abort()
b1a0: 3b 0a 23 65 6e 64 69 66 0a 7d 0a 0a 23 69 66 20 ;.#endif.}..#if
b1b0: 64 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f defined(__STDC__
b1c0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 ) || defined(__G
b1d0: 4e 55 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 NUC__) || define
b1e0: 64 28 5f 5f 63 70 6c 75 73 70 6c 75 73 29 0a 76 d(__cplusplus).v
b1f0: 6f 69 64 2a 20 74 72 61 6d 70 6f 6c 69 6e 65 5f oid* trampoline_
b200: 76 61 72 69 61 62 6c 65 20 28 76 6f 69 64 2a 20 variable (void*
b210: 66 75 6e 63 74 69 6f 6e 29 0a 23 65 6c 73 65 0a function).#else.
b220: 76 6f 69 64 2a 20 74 72 61 6d 70 6f 6c 69 6e 65 void* trampoline
b230: 5f 76 61 72 69 61 62 6c 65 20 28 66 75 6e 63 74 _variable (funct
b240: 69 6f 6e 29 0a 20 20 76 6f 69 64 2a 20 66 75 6e ion). void* fun
b250: 63 74 69 6f 6e 3b 0a 23 65 6e 64 69 66 0a 7b 0a ction;.#endif.{.
b260: 23 69 66 64 65 66 20 74 72 61 6d 70 5f 76 61 72 #ifdef tramp_var
b270: 69 61 62 6c 65 0a 20 20 72 65 74 75 72 6e 20 28 iable. return (
b280: 76 6f 69 64 2a 29 28 74 72 61 6d 70 5f 76 61 72 void*)(tramp_var
b290: 69 61 62 6c 65 28 28 28 63 68 61 72 2a 29 66 75 iable(((char*)fu
b2a0: 6e 63 74 69 6f 6e 20 2d 20 54 52 41 4d 50 5f 42 nction - TRAMP_B
b2b0: 49 41 53 29 29 29 3b 0a 23 65 6c 73 65 0a 20 20 IAS)));.#else.
b2c0: 61 62 6f 72 74 28 29 3b 0a 23 65 6e 64 69 66 0a abort();.#endif.
b2d0: 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f }..#if defined(_
b2e0: 5f 53 54 44 43 5f 5f 29 20 7c 7c 20 64 65 66 69 _STDC__) || defi
b2f0: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 7c 7c ned(__GNUC__) ||
b300: 20 64 65 66 69 6e 65 64 28 5f 5f 63 70 6c 75 73 defined(__cplus
b310: 70 6c 75 73 29 0a 76 6f 69 64 2a 20 74 72 61 6d plus).void* tram
b320: 70 6f 6c 69 6e 65 5f 64 61 74 61 20 28 76 6f 69 poline_data (voi
b330: 64 2a 20 66 75 6e 63 74 69 6f 6e 29 0a 23 65 6c d* function).#el
b340: 73 65 0a 76 6f 69 64 2a 20 74 72 61 6d 70 6f 6c se.void* trampol
b350: 69 6e 65 5f 64 61 74 61 20 28 66 75 6e 63 74 69 ine_data (functi
b360: 6f 6e 29 0a 20 20 76 6f 69 64 2a 20 66 75 6e 63 on). void* func
b370: 74 69 6f 6e 3b 0a 23 65 6e 64 69 66 0a 7b 0a 23 tion;.#endif.{.#
b380: 69 66 64 65 66 20 74 72 61 6d 70 5f 64 61 74 61 ifdef tramp_data
b390: 0a 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 2a . return (void*
b3a0: 29 28 74 72 61 6d 70 5f 64 61 74 61 28 28 28 63 )(tramp_data(((c
b3b0: 68 61 72 2a 29 66 75 6e 63 74 69 6f 6e 20 2d 20 har*)function -
b3c0: 54 52 41 4d 50 5f 42 49 41 53 29 29 29 3b 0a 23 TRAMP_BIAS)));.#
b3d0: 65 6c 73 65 0a 20 20 61 62 6f 72 74 28 29 3b 0a else. abort();.
b3e0: 23 65 6e 64 69 66 0a 7d 0a #endif.}.