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 2f 2a 20 41 dif.#endif../* A
06e0: 73 20 6f 66 20 57 69 6e 64 6f 77 73 20 58 50 20 s of Windows XP
06f0: 53 50 20 32 2c 20 6d 61 6c 6c 6f 63 27 64 20 6d SP 2, malloc'd m
0700: 65 6d 6f 72 79 20 69 73 20 6e 6f 74 20 65 78 65 emory is not exe
0710: 63 75 74 61 62 6c 65 20 2a 2f 0a 23 69 66 64 65 cutable */.#ifde
0720: 66 20 5f 57 49 4e 33 32 0a 23 75 6e 64 65 66 20 f _WIN32.#undef
0730: 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c 45 0a CODE_EXECUTABLE.
0740: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 #endif..#ifndef
0750: 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c 45 0a CODE_EXECUTABLE.
0760: 2f 2a 20 48 6f 77 20 64 6f 20 77 65 20 6d 61 6b /* How do we mak
0770: 65 20 74 68 65 20 74 72 61 6d 70 6f 6c 69 6e 65 e the trampoline
0780: 27 73 20 63 6f 64 65 20 65 78 65 63 75 74 61 62 's code executab
0790: 6c 65 3f 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e le? */.#if defin
07a0: 65 64 28 48 41 56 45 5f 4d 41 43 48 5f 56 4d 29 ed(HAVE_MACH_VM)
07b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 6f || defined(__co
07c0: 6e 76 65 78 5f 5f 29 20 7c 7c 20 64 65 66 69 6e nvex__) || defin
07d0: 65 64 28 48 41 56 45 5f 57 4f 52 4b 49 4e 47 5f ed(HAVE_WORKING_
07e0: 4d 50 52 4f 54 45 43 54 29 20 7c 7c 20 64 65 66 MPROTECT) || def
07f0: 69 6e 65 64 28 48 41 56 45 5f 53 59 53 5f 4d 38 ined(HAVE_SYS_M8
0800: 38 4b 42 43 53 5f 48 29 0a 2f 2a 20 6d 70 72 6f 8KBCS_H)./* mpro
0810: 74 65 63 74 28 29 20 5b 6f 72 20 65 71 75 69 76 tect() [or equiv
0820: 61 6c 65 6e 74 5d 20 74 68 65 20 6d 61 6c 6c 6f alent] the mallo
0830: 63 27 65 64 20 61 72 65 61 2e 20 2a 2f 0a 23 64 c'ed area. */.#d
0840: 65 66 69 6e 65 20 45 58 45 43 55 54 41 42 4c 45 efine EXECUTABLE
0850: 5f 56 49 41 5f 4d 50 52 4f 54 45 43 54 0a 23 65 _VIA_MPROTECT.#e
0860: 6c 73 65 0a 23 69 66 64 65 66 20 48 41 56 45 5f lse.#ifdef HAVE_
0870: 4d 4d 41 50 0a 2f 2a 20 55 73 65 20 61 6e 20 6d MMAP./* Use an m
0880: 6d 61 70 27 65 64 20 70 61 67 65 2e 20 2a 2f 0a map'ed page. */.
0890: 23 64 65 66 69 6e 65 20 45 58 45 43 55 54 41 42 #define EXECUTAB
08a0: 4c 45 5f 56 49 41 5f 4d 4d 41 50 0a 23 69 66 64 LE_VIA_MMAP.#ifd
08b0: 65 66 20 48 41 56 45 5f 4d 4d 41 50 5f 41 4e 4f ef HAVE_MMAP_ANO
08c0: 4e 59 4d 4f 55 53 0a 2f 2a 20 55 73 65 20 6d 6d NYMOUS./* Use mm
08d0: 61 70 20 77 69 74 68 20 74 68 65 20 4d 41 50 5f ap with the MAP_
08e0: 41 4e 4f 4e 59 4d 4f 55 53 20 6f 72 20 4d 41 50 ANONYMOUS or MAP
08f0: 5f 41 4e 4f 4e 20 66 6c 61 67 2e 20 2a 2f 0a 23 _ANON flag. */.#
0900: 64 65 66 69 6e 65 20 45 58 45 43 55 54 41 42 4c define EXECUTABL
0910: 45 5f 56 49 41 5f 4d 4d 41 50 5f 41 4e 4f 4e 59 E_VIA_MMAP_ANONY
0920: 4d 4f 55 53 0a 23 65 6c 73 65 0a 2f 2a 20 55 73 MOUS.#else./* Us
0930: 65 20 6d 6d 61 70 20 6f 6e 20 2f 64 65 76 2f 7a e mmap on /dev/z
0940: 65 72 6f 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 ero. */.#define
0950: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d EXECUTABLE_VIA_M
0960: 4d 41 50 5f 44 45 56 5a 45 52 4f 0a 23 65 6e 64 MAP_DEVZERO.#end
0970: 69 66 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 20 if.#else.#ifdef
0980: 48 41 56 45 5f 53 48 4d 0a 2f 2a 20 55 73 65 20 HAVE_SHM./* Use
0990: 61 6e 20 73 68 6d 61 74 27 65 64 20 70 61 67 65 an shmat'ed page
09a0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 45 . */.#define EXE
09b0: 43 55 54 41 42 4c 45 5f 56 49 41 5f 53 48 4d 0a CUTABLE_VIA_SHM.
09c0: 23 65 6c 73 65 0a 23 69 66 64 65 66 20 5f 57 49 #else.#ifdef _WI
09d0: 4e 33 32 0a 2f 2a 20 55 73 65 20 56 69 72 74 75 N32./* Use Virtu
09e0: 61 6c 41 6c 6c 6f 63 20 2a 2f 0a 23 65 6c 73 65 alAlloc */.#else
09f0: 0a 3f 3f 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 .??.#endif.#endi
0a00: 66 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a f.#endif.#endif.
0a10: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 #endif..#include
0a20: 20 3c 73 74 64 69 6f 2e 68 3e 20 2f 2a 20 64 65 <stdio.h> /* de
0a30: 63 6c 61 72 65 73 20 66 70 72 69 6e 74 66 28 29 clares fprintf()
0a40: 20 2a 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 */..#include <s
0a50: 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 ys/types.h>.#inc
0a60: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 20 lude <stdlib.h>
0a70: 2f 2a 20 64 65 63 6c 61 72 65 73 20 61 62 6f 72 /* declares abor
0a80: 74 28 29 2c 20 6d 61 6c 6c 6f 63 28 29 2c 20 66 t(), malloc(), f
0a90: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 ree() */.#ifdef
0aa0: 48 41 56 45 5f 55 4e 49 53 54 44 5f 48 0a 23 69 HAVE_UNISTD_H.#i
0ab0: 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68 nclude <unistd.h
0ac0: 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 >.#endif../* Dec
0ad0: 6c 61 72 65 20 67 65 74 70 61 67 65 73 69 7a 65 lare getpagesize
0ae0: 28 29 2e 20 2a 2f 0a 23 69 66 64 65 66 20 48 41 (). */.#ifdef HA
0af0: 56 45 5f 47 45 54 50 41 47 45 53 49 5a 45 0a 23 VE_GETPAGESIZE.#
0b00: 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 ifdef __cplusplu
0b10: 73 0a 65 78 74 65 72 6e 20 22 43 22 20 52 45 54 s.extern "C" RET
0b20: 47 45 54 50 41 47 45 53 49 5a 45 54 59 50 45 20 GETPAGESIZETYPE
0b30: 67 65 74 70 61 67 65 73 69 7a 65 20 28 76 6f 69 getpagesize (voi
0b40: 64 29 3b 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 d);.#elif define
0b50: 64 28 5f 5f 53 54 44 43 5f 5f 29 0a 65 78 74 65 d(__STDC__).exte
0b60: 72 6e 20 52 45 54 47 45 54 50 41 47 45 53 49 5a rn RETGETPAGESIZ
0b70: 45 54 59 50 45 20 67 65 74 70 61 67 65 73 69 7a ETYPE getpagesiz
0b80: 65 20 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a e (void);.#else.
0b90: 65 78 74 65 72 6e 20 52 45 54 47 45 54 50 41 47 extern RETGETPAG
0ba0: 45 53 49 5a 45 54 59 50 45 20 67 65 74 70 61 67 ESIZETYPE getpag
0bb0: 65 73 69 7a 65 20 28 29 3b 0a 23 65 6e 64 69 66 esize ();.#endif
0bc0: 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 20 48 41 .#else.#ifdef HA
0bd0: 56 45 5f 53 59 53 5f 50 41 52 41 4d 5f 48 0a 23 VE_SYS_PARAM_H.#
0be0: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 70 61 72 include <sys/par
0bf0: 61 6d 2e 68 3e 0a 23 65 6c 73 65 0a 2f 2a 20 4e am.h>.#else./* N
0c00: 6f 74 20 55 6e 69 78 2c 20 65 2e 67 2e 20 6d 69 ot Unix, e.g. mi
0c10: 6e 67 77 33 32 20 2a 2f 0a 23 64 65 66 69 6e 65 ngw32 */.#define
0c20: 20 50 41 47 45 53 49 5a 45 20 34 30 39 36 0a 23 PAGESIZE 4096.#
0c30: 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 67 65 endif.#define ge
0c40: 74 70 61 67 65 73 69 7a 65 28 29 20 50 41 47 45 tpagesize() PAGE
0c50: 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 SIZE.#endif../*
0c60: 44 65 63 6c 61 72 65 20 6d 70 72 6f 74 65 63 74 Declare mprotect
0c70: 28 29 20 6f 72 20 65 71 75 69 76 61 6c 65 6e 74 () or equivalent
0c80: 2e 20 2a 2f 0a 23 69 66 64 65 66 20 45 58 45 43 . */.#ifdef EXEC
0c90: 55 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 4f 54 UTABLE_VIA_MPROT
0ca0: 45 43 54 0a 23 69 66 64 65 66 20 48 41 56 45 5f ECT.#ifdef HAVE_
0cb0: 4d 41 43 48 5f 56 4d 0a 23 69 6e 63 6c 75 64 65 MACH_VM.#include
0cc0: 20 3c 73 79 73 2f 72 65 73 6f 75 72 63 65 2e 68 <sys/resource.h
0cd0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 68 >.#include <mach
0ce0: 2f 6d 61 63 68 5f 69 6e 74 65 72 66 61 63 65 2e /mach_interface.
0cf0: 68 3e 0a 23 69 66 64 65 66 20 4e 65 58 54 0a 23 h>.#ifdef NeXT.#
0d00: 69 6e 63 6c 75 64 65 20 3c 6d 61 63 68 2f 6d 61 include <mach/ma
0d10: 63 68 5f 69 6e 69 74 2e 68 3e 0a 23 65 6e 64 69 ch_init.h>.#endi
0d20: 66 0a 23 69 66 64 65 66 20 5f 5f 6f 73 66 5f 5f f.#ifdef __osf__
0d30: 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 68 5f .#include <mach_
0d40: 69 6e 69 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 init.h>.#endif.#
0d50: 69 6e 63 6c 75 64 65 20 3c 6d 61 63 68 2f 6d 61 include <mach/ma
0d60: 63 68 69 6e 65 2f 76 6d 5f 70 61 72 61 6d 2e 68 chine/vm_param.h
0d70: 3e 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 20 48 >.#else.#ifdef H
0d80: 41 56 45 5f 53 59 53 5f 4d 38 38 4b 42 43 53 5f AVE_SYS_M88KBCS_
0d90: 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f H.#include <sys/
0da0: 6d 38 38 6b 62 63 73 2e 68 3e 0a 23 64 65 66 69 m88kbcs.h>.#defi
0db0: 6e 65 20 67 65 74 70 61 67 65 73 69 7a 65 28 29 ne getpagesize()
0dc0: 20 20 34 30 39 36 20 20 2f 2a 20 3f 3f 20 2a 2f 4096 /* ?? */
0dd0: 0a 23 65 6c 73 65 0a 23 69 6e 63 6c 75 64 65 20 .#else.#include
0de0: 3c 73 79 73 2f 74 79 70 65 73 2e 68 3e 0a 23 69 <sys/types.h>.#i
0df0: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 6d 6d 61 6e nclude <sys/mman
0e00: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 .h>.#endif.#endi
0e10: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 f.#endif../* Dec
0e20: 6c 61 72 65 20 6d 6d 61 70 28 29 2e 20 2a 2f 0a lare mmap(). */.
0e30: 23 69 66 64 65 66 20 45 58 45 43 55 54 41 42 4c #ifdef EXECUTABL
0e40: 45 5f 56 49 41 5f 4d 4d 41 50 0a 23 69 6e 63 6c E_VIA_MMAP.#incl
0e50: 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 ude <sys/types.h
0e60: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f >.#include <sys/
0e70: 6d 6d 61 6e 2e 68 3e 0a 23 69 66 20 21 64 65 66 mman.h>.#if !def
0e80: 69 6e 65 64 28 50 52 4f 54 5f 45 58 45 43 29 20 ined(PROT_EXEC)
0e90: 26 26 20 64 65 66 69 6e 65 64 28 50 52 4f 54 5f && defined(PROT_
0ea0: 45 58 45 43 55 54 45 29 20 2f 2a 20 49 72 69 78 EXECUTE) /* Irix
0eb0: 20 34 2e 30 2e 35 20 6e 65 65 64 73 20 74 68 69 4.0.5 needs thi
0ec0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 52 4f s */.#define PRO
0ed0: 54 5f 45 58 45 43 20 50 52 4f 54 5f 45 58 45 43 T_EXEC PROT_EXEC
0ee0: 55 54 45 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 UTE.#endif.#endi
0ef0: 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 65 20 6f 70 f../* Declare op
0f00: 65 6e 28 29 2e 20 2a 2f 0a 23 69 66 64 65 66 20 en(). */.#ifdef
0f10: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d EXECUTABLE_VIA_M
0f20: 4d 41 50 5f 44 45 56 5a 45 52 4f 0a 23 69 6e 63 MAP_DEVZERO.#inc
0f30: 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e lude <sys/types.
0f40: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 75 6e 69 h>.#include <uni
0f50: 73 74 64 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 std.h>.#include
0f60: 3c 66 63 6e 74 6c 2e 68 3e 0a 23 69 66 64 65 66 <fcntl.h>.#ifdef
0f70: 20 4f 50 45 4e 5f 4e 45 45 44 53 5f 53 59 53 5f OPEN_NEEDS_SYS_
0f80: 46 49 4c 45 5f 48 0a 23 69 6e 63 6c 75 64 65 20 FILE_H.#include
0f90: 3c 73 79 73 2f 66 69 6c 65 2e 68 3e 0a 23 65 6e <sys/file.h>.#en
0fa0: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 dif.#endif../* D
0fb0: 65 63 6c 61 72 65 20 73 68 6d 67 65 74 28 29 2c eclare shmget(),
0fc0: 20 73 68 6d 61 74 28 29 2c 20 73 68 6d 63 74 6c shmat(), shmctl
0fd0: 28 29 2e 20 2a 2f 0a 23 69 66 64 65 66 20 45 58 (). */.#ifdef EX
0fe0: 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 53 48 4d ECUTABLE_VIA_SHM
0ff0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 .#include <sys/t
1000: 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 ypes.h>.#include
1010: 20 3c 73 79 73 2f 69 70 63 2e 68 3e 0a 23 69 6e <sys/ipc.h>.#in
1020: 63 6c 75 64 65 20 3c 73 79 73 2f 73 68 6d 2e 68 clude <sys/shm.h
1030: 3e 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 59 >.#ifdef HAVE_SY
1040: 53 5f 53 59 53 4d 41 43 52 4f 53 5f 48 0a 23 69 S_SYSMACROS_H.#i
1050: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 73 79 73 6d nclude <sys/sysm
1060: 61 63 72 6f 73 2e 68 3e 0a 23 65 6e 64 69 66 0a acros.h>.#endif.
1070: 23 65 6e 64 69 66 0a 0a 2f 2a 20 53 75 70 70 6f #endif../* Suppo
1080: 72 74 20 66 6f 72 20 69 6e 73 74 72 75 63 74 69 rt for instructi
1090: 6f 6e 20 63 61 63 68 65 20 66 6c 75 73 68 2e 20 on cache flush.
10a0: 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 69 33 38 36 */.#ifdef __i386
10b0: 5f 5f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f __.#if defined(_
10c0: 57 49 4e 33 32 29 20 2f 2a 20 57 69 6e 64 6f 77 WIN32) /* Window
10d0: 73 4e 54 20 6f 72 20 57 69 6e 64 6f 77 73 39 35 sNT or Windows95
10e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 49 4e 33 */.#define WIN3
10f0: 32 5f 4c 45 41 4e 5f 41 4e 44 5f 4d 45 41 4e 0a 2_LEAN_AND_MEAN.
1100: 23 64 65 66 69 6e 65 20 57 49 4e 33 32 5f 45 58 #define WIN32_EX
1110: 54 52 41 5f 4c 45 41 4e 0a 23 69 6e 63 6c 75 64 TRA_LEAN.#includ
1120: 65 20 3c 77 69 6e 64 6f 77 73 2e 68 3e 0a 23 65 e <windows.h>.#e
1130: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 ndif.#endif.#ifd
1140: 65 66 20 5f 5f 6d 36 38 6b 5f 5f 0a 23 69 66 20 ef __m68k__.#if
1150: 64 65 66 69 6e 65 64 28 41 4d 49 47 41 29 20 2f defined(AMIGA) /
1160: 2a 20 41 6d 69 67 61 20 72 75 6e 6e 69 6e 67 20 * Amiga running
1170: 41 6d 69 67 61 4f 53 2c 20 6e 6f 74 20 4c 69 6e AmigaOS, not Lin
1180: 75 78 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c ux */.#include <
1190: 65 78 65 63 2f 74 79 70 65 73 2e 68 3e 0a 23 69 exec/types.h>.#i
11a0: 6e 63 6c 75 64 65 20 3c 65 78 65 63 2f 65 78 65 nclude <exec/exe
11b0: 63 62 61 73 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 cbase.h>.#includ
11c0: 65 20 3c 70 72 6f 74 6f 2f 65 78 65 63 2e 68 3e e <proto/exec.h>
11d0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 68 .#endif.#ifdef h
11e0: 70 75 78 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 pux.#include <sy
11f0: 73 2f 63 61 63 68 65 2e 68 3e 0a 23 65 6e 64 69 s/cache.h>.#endi
1200: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 f.#endif.#if def
1210: 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 7c ined(__mips__) |
1220: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 | defined(__mips
1230: 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 n32__) || define
1240: 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 0a 23 69 d(__mips64__).#i
1250: 66 64 65 66 20 75 6c 74 72 69 78 0a 23 69 6e 63 fdef ultrix.#inc
1260: 6c 75 64 65 20 3c 6d 69 70 73 2f 63 61 63 68 65 lude <mips/cache
1270: 63 74 6c 2e 68 3e 0a 23 65 6c 73 65 0a 23 69 66 ctl.h>.#else.#if
1280: 64 65 66 20 6c 69 6e 75 78 0a 23 69 6e 63 6c 75 def linux.#inclu
1290: 64 65 20 3c 61 73 6d 2f 63 61 63 68 65 63 74 6c de <asm/cachectl
12a0: 2e 68 3e 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 .h>.#else.#ifdef
12b0: 20 48 41 56 45 5f 53 59 53 5f 43 41 43 48 45 43 HAVE_SYS_CACHEC
12c0: 54 4c 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 TL_H.#include <s
12d0: 79 73 2f 63 61 63 68 65 63 74 6c 2e 68 3e 0a 23 ys/cachectl.h>.#
12e0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 65 6e endif.#endif.#en
12f0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 dif.#endif.#ifde
1300: 66 20 5f 5f 6d 38 38 6b 5f 5f 0a 23 69 6e 63 6c f __m88k__.#incl
1310: 75 64 65 20 3c 73 79 73 2f 73 79 73 6c 6f 63 61 ude <sys/sysloca
1320: 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a 2f 2a 20 49 l.h>.#endif./* I
1330: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 79 20 66 nline assembly f
1340: 75 6e 63 74 69 6f 6e 20 66 6f 72 20 69 6e 73 74 unction for inst
1350: 72 75 63 74 69 6f 6e 20 63 61 63 68 65 20 66 6c ruction cache fl
1360: 75 73 68 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 ush. */.#if defi
1370: 6e 65 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 7c ned(__sparc__) |
1380: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 | defined(__spar
1390: 63 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 c64__) || define
13a0: 64 28 5f 5f 61 6c 70 68 61 5f 5f 29 20 7c 7c 20 d(__alpha__) ||
13b0: 64 65 66 69 6e 65 64 28 5f 5f 68 70 70 61 6f 6c defined(__hppaol
13c0: 64 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 d__) || defined(
13d0: 5f 5f 72 73 36 30 30 30 73 79 73 76 34 5f 5f 29 __rs6000sysv4__)
13e0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 6f || defined(__co
13f0: 6e 76 65 78 5f 5f 29 0a 23 69 66 64 65 66 20 5f nvex__).#ifdef _
1400: 5f 47 4e 55 43 5f 5f 0a 65 78 74 65 72 6e 20 69 _GNUC__.extern i
1410: 6e 6c 69 6e 65 0a 23 69 66 20 64 65 66 69 6e 65 nline.#if define
1420: 64 28 5f 5f 73 70 61 72 63 5f 5f 29 20 7c 7c 20 d(__sparc__) ||
1430: 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 defined(__sparc6
1440: 34 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 4__).#include "c
1450: 61 63 68 65 2d 73 70 61 72 63 2e 63 22 0a 23 65 ache-sparc.c".#e
1460: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 61 6c ndif.#ifdef __al
1470: 70 68 61 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 22 pha__.#include "
1480: 63 61 63 68 65 2d 61 6c 70 68 61 2e 63 22 0a 23 cache-alpha.c".#
1490: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 68 endif.#ifdef __h
14a0: 70 70 61 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 22 ppa__.#include "
14b0: 63 61 63 68 65 2d 68 70 70 61 2e 63 22 0a 23 65 cache-hppa.c".#e
14c0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 72 73 ndif.#ifdef __rs
14d0: 36 30 30 30 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 6000__.#include
14e0: 22 63 61 63 68 65 2d 72 73 36 30 30 30 2e 63 22 "cache-rs6000.c"
14f0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
1500: 5f 63 6f 6e 76 65 78 5f 5f 0a 23 69 6e 63 6c 75 _convex__.#inclu
1510: 64 65 20 22 63 61 63 68 65 2d 63 6f 6e 76 65 78 de "cache-convex
1520: 2e 63 22 0a 23 65 6e 64 69 66 0a 23 65 6c 73 65 .c".#endif.#else
1530: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 .#if defined(__s
1540: 70 61 72 63 5f 5f 29 20 7c 7c 20 64 65 66 69 6e parc__) || defin
1550: 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a ed(__sparc64__).
1560: 65 78 74 65 72 6e 20 76 6f 69 64 20 5f 5f 54 52 extern void __TR
1570: 5f 63 6c 65 61 72 5f 63 61 63 68 65 5f 34 28 29 _clear_cache_4()
1580: 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 76 ;.#else.extern v
1590: 6f 69 64 20 5f 5f 54 52 5f 63 6c 65 61 72 5f 63 oid __TR_clear_c
15a0: 61 63 68 65 28 29 3b 0a 23 65 6e 64 69 66 0a 23 ache();.#endif.#
15b0: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a endif.#endif../*
15c0: 20 4c 65 6e 67 74 68 20 61 6e 64 20 61 6c 69 67 Length and alig
15d0: 6e 6d 65 6e 74 20 6f 66 20 74 72 61 6d 70 6f 6c nment of trampol
15e0: 69 6e 65 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f ine */.#ifdef __
15f0: 69 33 38 36 5f 5f 0a 23 64 65 66 69 6e 65 20 54 i386__.#define T
1600: 52 41 4d 50 5f 4c 45 4e 47 54 48 20 31 35 0a 23 RAMP_LENGTH 15.#
1610: 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 define TRAMP_ALI
1620: 47 4e 20 31 36 20 20 2f 2a 20 34 20 66 6f 72 20 GN 16 /* 4 for
1630: 61 20 69 33 38 36 2c 20 31 36 20 66 6f 72 20 61 a i386, 16 for a
1640: 20 69 34 38 36 20 2a 2f 0a 23 65 6e 64 69 66 0a i486 */.#endif.
1650: 23 69 66 64 65 66 20 5f 5f 6d 36 38 6b 5f 5f 0a #ifdef __m68k__.
1660: 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 #define TRAMP_LE
1670: 4e 47 54 48 20 31 38 0a 23 64 65 66 69 6e 65 20 NGTH 18.#define
1680: 54 52 41 4d 50 5f 41 4c 49 47 4e 20 31 36 0a 23 TRAMP_ALIGN 16.#
1690: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
16a0: 64 28 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 21 d(__mips__) && !
16b0: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 defined(__mipsn3
16c0: 32 5f 5f 29 0a 23 64 65 66 69 6e 65 20 54 52 41 2__).#define TRA
16d0: 4d 50 5f 4c 45 4e 47 54 48 20 33 32 0a 23 64 65 MP_LENGTH 32.#de
16e0: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
16f0: 20 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 4.#endif.#ifdef
1700: 20 5f 5f 6d 69 70 73 6e 33 32 5f 5f 0a 23 64 65 __mipsn32__.#de
1710: 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 fine TRAMP_LENGT
1720: 48 20 33 36 0a 23 64 65 66 69 6e 65 20 54 52 41 H 36.#define TRA
1730: 4d 50 5f 41 4c 49 47 4e 20 34 0a 23 65 6e 64 69 MP_ALIGN 4.#endi
1740: 66 0a 23 69 66 64 65 66 20 5f 5f 6d 69 70 73 36 f.#ifdef __mips6
1750: 34 6f 6c 64 5f 5f 0a 23 64 65 66 69 6e 65 20 54 4old__.#define T
1760: 52 41 4d 50 5f 4c 45 4e 47 54 48 20 38 34 0a 23 RAMP_LENGTH 84.#
1770: 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 define TRAMP_ALI
1780: 47 4e 20 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 GN 4.#endif.#ifd
1790: 65 66 20 5f 5f 6d 69 70 73 36 34 5f 5f 0a 23 64 ef __mips64__.#d
17a0: 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 efine TRAMP_LENG
17b0: 54 48 20 34 38 0a 23 64 65 66 69 6e 65 20 54 52 TH 48.#define TR
17c0: 41 4d 50 5f 41 4c 49 47 4e 20 38 0a 23 65 6e 64 AMP_ALIGN 8.#end
17d0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
17e0: 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 _sparc__) && !de
17f0: 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f fined(__sparc64_
1800: 5f 29 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 _).#define TRAMP
1810: 5f 4c 45 4e 47 54 48 20 32 38 0a 23 64 65 66 69 _LENGTH 28.#defi
1820: 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 31 ne TRAMP_ALIGN 1
1830: 36 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 6.#endif.#ifdef
1840: 5f 5f 73 70 61 72 63 36 34 5f 5f 0a 23 64 65 66 __sparc64__.#def
1850: 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 ine TRAMP_LENGTH
1860: 20 34 38 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 48.#define TRAM
1870: 50 5f 41 4c 49 47 4e 20 31 36 0a 23 65 6e 64 69 P_ALIGN 16.#endi
1880: 66 0a 23 69 66 64 65 66 20 5f 5f 61 6c 70 68 61 f.#ifdef __alpha
1890: 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 __.#define TRAMP
18a0: 5f 4c 45 4e 47 54 48 20 34 38 0a 23 64 65 66 69 _LENGTH 48.#defi
18b0: 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 38 ne TRAMP_ALIGN 8
18c0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
18d0: 5f 68 70 70 61 6f 6c 64 5f 5f 0a 23 64 65 66 69 _hppaold__.#defi
18e0: 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 ne TRAMP_LENGTH
18f0: 35 36 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 56.#define TRAMP
1900: 5f 41 4c 49 47 4e 20 31 36 0a 23 65 6e 64 69 66 _ALIGN 16.#endif
1910: 0a 23 69 66 64 65 66 20 5f 5f 68 70 70 61 6e 65 .#ifdef __hppane
1920: 77 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d w__.#define TRAM
1930: 50 5f 4c 45 4e 47 54 48 20 32 30 0a 23 64 65 66 P_LENGTH 20.#def
1940: 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 ine TRAMP_ALIGN
1950: 31 36 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 16.#define TRAMP
1960: 5f 42 49 41 53 20 32 0a 23 65 6e 64 69 66 0a 23 _BIAS 2.#endif.#
1970: 69 66 64 65 66 20 5f 5f 61 72 6d 5f 5f 0a 23 64 ifdef __arm__.#d
1980: 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 efine TRAMP_LENG
1990: 54 48 20 34 34 0a 23 64 65 66 69 6e 65 20 54 52 TH 44.#define TR
19a0: 41 4d 50 5f 41 4c 49 47 4e 20 34 0a 23 65 6e 64 AMP_ALIGN 4.#end
19b0: 69 66 0a 23 69 66 64 65 66 20 5f 5f 72 73 36 30 if.#ifdef __rs60
19c0: 30 30 73 79 73 76 34 5f 5f 0a 23 64 65 66 69 6e 00sysv4__.#defin
19d0: 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 33 e TRAMP_LENGTH 3
19e0: 36 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 6.#define TRAMP_
19f0: 41 4c 49 47 4e 20 34 0a 23 65 6e 64 69 66 0a 23 ALIGN 4.#endif.#
1a00: 69 66 64 65 66 20 5f 5f 72 73 36 30 30 30 61 69 ifdef __rs6000ai
1a10: 78 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d x__.#define TRAM
1a20: 50 5f 4c 45 4e 47 54 48 20 32 34 0a 23 64 65 66 P_LENGTH 24.#def
1a30: 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 ine TRAMP_ALIGN
1a40: 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4.#endif.#ifdef
1a50: 5f 5f 6d 38 38 6b 5f 5f 0a 23 64 65 66 69 6e 65 __m88k__.#define
1a60: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 33 32 TRAMP_LENGTH 32
1a70: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 .#define TRAMP_A
1a80: 4c 49 47 4e 20 38 0a 23 65 6e 64 69 66 0a 23 69 LIGN 8.#endif.#i
1a90: 66 64 65 66 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a fdef __convex__.
1aa0: 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 #define TRAMP_LE
1ab0: 4e 47 54 48 20 32 30 0a 23 64 65 66 69 6e 65 20 NGTH 20.#define
1ac0: 54 52 41 4d 50 5f 41 4c 49 47 4e 20 34 0a 23 65 TRAMP_ALIGN 4.#e
1ad0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 69 61 ndif.#ifdef __ia
1ae0: 36 34 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 64__.#define TRA
1af0: 4d 50 5f 4c 45 4e 47 54 48 20 34 30 0a 23 64 65 MP_LENGTH 40.#de
1b00: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
1b10: 20 31 36 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 16.#endif.#ifde
1b20: 66 20 5f 5f 78 38 36 5f 36 34 5f 5f 0a 23 64 65 f __x86_64__.#de
1b30: 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 fine TRAMP_LENGT
1b40: 48 20 33 32 0a 23 64 65 66 69 6e 65 20 54 52 41 H 32.#define TRA
1b50: 4d 50 5f 41 4c 49 47 4e 20 31 36 0a 23 65 6e 64 MP_ALIGN 16.#end
1b60: 69 66 0a 23 69 66 64 65 66 20 5f 5f 73 33 39 30 if.#ifdef __s390
1b70: 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 __.#define TRAMP
1b80: 5f 4c 45 4e 47 54 48 20 33 36 0a 23 64 65 66 69 _LENGTH 36.#defi
1b90: 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 32 ne TRAMP_ALIGN 2
1ba0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 .#endif..#ifndef
1bb0: 20 54 52 41 4d 50 5f 42 49 41 53 0a 23 64 65 66 TRAMP_BIAS.#def
1bc0: 69 6e 65 20 54 52 41 4d 50 5f 42 49 41 53 20 30 ine TRAMP_BIAS 0
1bd0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 .#endif..#if !de
1be0: 66 69 6e 65 64 28 43 4f 44 45 5f 45 58 45 43 55 fined(CODE_EXECU
1bf0: 54 41 42 4c 45 29 20 26 26 20 21 64 65 66 69 6e TABLE) && !defin
1c00: 65 64 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 ed(EXECUTABLE_VI
1c10: 41 5f 4d 50 52 4f 54 45 43 54 29 0a 2f 2a 20 41 A_MPROTECT)./* A
1c20: 49 58 20 64 6f 65 73 6e 27 74 20 73 75 70 70 6f IX doesn't suppo
1c30: 72 74 20 6d 70 72 6f 74 65 63 74 28 29 20 69 6e rt mprotect() in
1c40: 20 6d 61 6c 6c 6f 63 27 65 64 20 6d 65 6d 6f 72 malloc'ed memor
1c50: 79 2e 20 4d 75 73 74 20 67 65 74 20 70 61 67 65 y. Must get page
1c60: 73 20 6f 66 0a 20 2a 20 6d 65 6d 6f 72 79 20 77 s of. * memory w
1c70: 69 74 68 20 65 78 65 63 75 74 65 20 70 65 72 6d ith execute perm
1c80: 69 73 73 69 6f 6e 20 76 69 61 20 6d 6d 61 70 28 ission via mmap(
1c90: 29 2e 20 54 68 65 6e 20 6b 65 65 70 20 61 20 66 ). Then keep a f
1ca0: 72 65 65 20 6c 69 73 74 20 6f 66 0a 20 2a 20 66 ree list of. * f
1cb0: 72 65 65 20 74 72 61 6d 70 6f 6c 69 6e 65 73 2e ree trampolines.
1cc0: 0a 20 2a 2f 0a 73 74 61 74 69 63 20 63 68 61 72 . */.static char
1cd0: 2a 20 66 72 65 65 6c 69 73 74 20 3d 20 4e 55 4c * freelist = NUL
1ce0: 4c 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 L;.#endif..#if d
1cf0: 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f 29 efined(__STDC__)
1d00: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e || defined(__GN
1d10: 55 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 UC__) || defined
1d20: 28 5f 5f 63 70 6c 75 73 70 6c 75 73 29 0a 5f 5f (__cplusplus).__
1d30: 54 52 5f 66 75 6e 63 74 69 6f 6e 20 61 6c 6c 6f TR_function allo
1d40: 63 5f 74 72 61 6d 70 6f 6c 69 6e 65 20 28 5f 5f c_trampoline (__
1d50: 54 52 5f 66 75 6e 63 74 69 6f 6e 20 61 64 64 72 TR_function addr
1d60: 65 73 73 2c 20 76 6f 69 64 2a 20 76 61 72 69 61 ess, void* varia
1d70: 62 6c 65 2c 20 76 6f 69 64 2a 20 64 61 74 61 29 ble, void* data)
1d80: 0a 23 65 6c 73 65 0a 5f 5f 54 52 5f 66 75 6e 63 .#else.__TR_func
1d90: 74 69 6f 6e 20 61 6c 6c 6f 63 5f 74 72 61 6d 70 tion alloc_tramp
1da0: 6f 6c 69 6e 65 20 28 61 64 64 72 65 73 73 2c 20 oline (address,
1db0: 76 61 72 69 61 62 6c 65 2c 20 64 61 74 61 29 0a variable, data).
1dc0: 20 20 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 20 __TR_function
1dd0: 61 64 64 72 65 73 73 3b 0a 20 20 76 6f 69 64 2a address;. void*
1de0: 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 76 6f 69 variable;. voi
1df0: 64 2a 20 64 61 74 61 3b 0a 23 65 6e 64 69 66 0a d* data;.#endif.
1e00: 7b 0a 20 20 63 68 61 72 2a 20 66 75 6e 63 74 69 {. char* functi
1e10: 6f 6e 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 on;..#if !define
1e20: 64 28 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c d(CODE_EXECUTABL
1e30: 45 29 0a 20 20 73 74 61 74 69 63 20 6c 6f 6e 67 E). static long
1e40: 20 70 61 67 65 73 69 7a 65 20 3d 20 30 3b 0a 23 pagesize = 0;.#
1e50: 69 66 20 64 65 66 69 6e 65 64 28 45 58 45 43 55 if defined(EXECU
1e60: 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 5f 44 TABLE_VIA_MMAP_D
1e70: 45 56 5a 45 52 4f 29 0a 20 20 73 74 61 74 69 63 EVZERO). static
1e80: 20 69 6e 74 20 7a 65 72 6f 5f 66 64 3b 0a 23 65 int zero_fd;.#e
1e90: 6e 64 69 66 0a 20 20 2f 2a 20 46 69 72 73 74 2c ndif. /* First,
1ea0: 20 67 65 74 20 74 68 65 20 70 61 67 65 20 73 69 get the page si
1eb0: 7a 65 20 6f 6e 63 65 20 61 6e 64 20 66 6f 72 20 ze once and for
1ec0: 61 6c 6c 2e 20 2a 2f 0a 20 20 69 66 20 28 21 70 all. */. if (!p
1ed0: 61 67 65 73 69 7a 65 29 0a 20 20 20 20 7b 0a 23 agesize). {.#
1ee0: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f if defined(HAVE_
1ef0: 4d 41 43 48 5f 56 4d 29 0a 20 20 20 20 20 20 70 MACH_VM). p
1f00: 61 67 65 73 69 7a 65 20 3d 20 76 6d 5f 70 61 67 agesize = vm_pag
1f10: 65 5f 73 69 7a 65 3b 0a 23 65 6c 73 65 0a 20 20 e_size;.#else.
1f20: 20 20 20 20 70 61 67 65 73 69 7a 65 20 3d 20 67 pagesize = g
1f30: 65 74 70 61 67 65 73 69 7a 65 28 29 3b 0a 23 65 etpagesize();.#e
1f40: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
1f50: 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f (EXECUTABLE_VIA_
1f60: 4d 4d 41 50 5f 44 45 56 5a 45 52 4f 29 0a 20 20 MMAP_DEVZERO).
1f70: 20 20 20 20 7a 65 72 6f 5f 66 64 20 3d 20 6f 70 zero_fd = op
1f80: 65 6e 28 22 2f 64 65 76 2f 7a 65 72 6f 22 2c 4f en("/dev/zero",O
1f90: 5f 52 44 4f 4e 4c 59 2c 30 36 34 34 29 3b 0a 20 _RDONLY,0644);.
1fa0: 20 20 20 20 20 69 66 20 28 7a 65 72 6f 5f 66 64 if (zero_fd
1fb0: 20 3c 20 30 29 0a 20 20 20 20 20 20 20 20 7b 20 < 0). {
1fc0: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 fprintf(stderr,"
1fd0: 74 72 61 6d 70 6f 6c 69 6e 65 3a 20 43 61 6e 6e trampoline: Cann
1fe0: 6f 74 20 6f 70 65 6e 20 2f 64 65 76 2f 7a 65 72 ot open /dev/zer
1ff0: 6f 21 5c 6e 22 29 3b 20 61 62 6f 72 74 28 29 3b o!\n"); abort();
2000: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a }.#endif. }.
2010: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 31 2e 20 #endif.. /* 1.
2020: 41 6c 6c 6f 63 61 74 65 20 72 6f 6f 6d 20 2a 2f Allocate room */
2030: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 43 ..#if !defined(C
2040: 4f 44 45 5f 45 58 45 43 55 54 41 42 4c 45 29 20 ODE_EXECUTABLE)
2050: 26 26 20 21 64 65 66 69 6e 65 64 28 45 58 45 43 && !defined(EXEC
2060: 55 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 4f 54 UTABLE_VIA_MPROT
2070: 45 43 54 29 0a 20 20 69 66 20 28 66 72 65 65 6c ECT). if (freel
2080: 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 0a 20 20 20 ist == NULL).
2090: 20 7b 20 2f 2a 20 47 65 74 20 61 20 6e 65 77 20 { /* Get a new
20a0: 70 61 67 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 page. */. c
20b0: 68 61 72 2a 20 70 61 67 65 3b 0a 23 69 66 64 65 har* page;.#ifde
20c0: 66 20 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 f EXECUTABLE_VIA
20d0: 5f 4d 4d 41 50 5f 41 4e 4f 4e 59 4d 4f 55 53 0a _MMAP_ANONYMOUS.
20e0: 20 20 20 20 20 20 70 61 67 65 20 3d 20 6d 6d 61 page = mma
20f0: 70 28 30 2c 20 70 61 67 65 73 69 7a 65 2c 20 50 p(0, pagesize, P
2100: 52 4f 54 5f 52 45 41 44 20 7c 20 50 52 4f 54 5f ROT_READ | PROT_
2110: 57 52 49 54 45 20 7c 20 50 52 4f 54 5f 45 58 45 WRITE | PROT_EXE
2120: 43 2c 20 4d 41 50 5f 41 4e 4f 4e 59 4d 4f 55 53 C, MAP_ANONYMOUS
2130: 20 7c 20 4d 41 50 5f 56 41 52 49 41 42 4c 45 2c | MAP_VARIABLE,
2140: 20 2d 31 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a -1, 0);.#endif.
2150: 23 69 66 64 65 66 20 45 58 45 43 55 54 41 42 4c #ifdef EXECUTABL
2160: 45 5f 56 49 41 5f 4d 4d 41 50 5f 44 45 56 5a 45 E_VIA_MMAP_DEVZE
2170: 52 4f 0a 20 20 20 20 20 20 70 61 67 65 20 3d 20 RO. page =
2180: 6d 6d 61 70 28 30 2c 20 70 61 67 65 73 69 7a 65 mmap(0, pagesize
2190: 2c 20 50 52 4f 54 5f 52 45 41 44 20 7c 20 50 52 , PROT_READ | PR
21a0: 4f 54 5f 57 52 49 54 45 20 7c 20 50 52 4f 54 5f OT_WRITE | PROT_
21b0: 45 58 45 43 2c 20 4d 41 50 5f 50 52 49 56 41 54 EXEC, MAP_PRIVAT
21c0: 45 2c 20 7a 65 72 6f 5f 66 64 2c 20 30 29 3b 0a E, zero_fd, 0);.
21d0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 45 58 #endif.#ifdef EX
21e0: 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 53 48 4d ECUTABLE_VIA_SHM
21f0: 0a 20 20 20 20 20 20 69 6e 74 20 73 68 6d 69 64 . int shmid
2200: 20 3d 20 73 68 6d 67 65 74 28 49 50 43 5f 50 52 = shmget(IPC_PR
2210: 49 56 41 54 45 2c 20 70 61 67 65 73 69 7a 65 2c IVATE, pagesize,
2220: 20 30 37 30 30 7c 49 50 43 5f 43 52 45 41 54 29 0700|IPC_CREAT)
2230: 3b 0a 20 20 20 20 20 20 69 66 20 28 73 68 6d 69 ;. if (shmi
2240: 64 3c 30 29 0a 20 20 20 20 20 20 20 20 7b 20 70 d<0). { p
2250: 61 67 65 20 3d 20 28 63 68 61 72 2a 29 28 2d 31 age = (char*)(-1
2260: 29 3b 20 7d 0a 20 20 20 20 20 20 65 6c 73 65 0a ); }. else.
2270: 20 20 20 20 20 20 20 20 7b 20 70 61 67 65 20 3d { page =
2280: 20 73 68 6d 61 74 28 73 68 6d 69 64 2c 20 30 2c shmat(shmid, 0,
2290: 20 30 29 3b 20 73 68 6d 63 74 6c 28 73 68 6d 69 0); shmctl(shmi
22a0: 64 2c 20 49 50 43 5f 52 4d 49 44 2c 20 30 29 3b d, IPC_RMID, 0);
22b0: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 }.#endif.#ifdef
22c0: 20 5f 57 49 4e 33 32 0a 20 20 20 20 20 20 70 61 _WIN32. pa
22d0: 67 65 20 3d 20 56 69 72 74 75 61 6c 41 6c 6c 6f ge = VirtualAllo
22e0: 63 28 4e 55 4c 4c 2c 20 70 61 67 65 73 69 7a 65 c(NULL, pagesize
22f0: 2c 20 4d 45 4d 5f 43 4f 4d 4d 49 54 2c 20 50 41 , MEM_COMMIT, PA
2300: 47 45 5f 45 58 45 43 55 54 45 5f 52 45 41 44 57 GE_EXECUTE_READW
2310: 52 49 54 45 29 3b 0a 20 20 20 20 20 20 69 66 20 RITE);. if
2320: 28 70 61 67 65 20 3d 3d 20 30 29 0a 20 20 20 20 (page == 0).
2330: 20 20 09 7b 20 70 61 67 65 20 3d 20 28 63 68 61 .{ page = (cha
2340: 72 2a 29 28 2d 31 29 3b 20 7d 0a 23 65 6e 64 69 r*)(-1); }.#endi
2350: 66 0a 20 20 20 20 20 20 69 66 20 28 70 61 67 65 f. if (page
2360: 20 3d 3d 20 28 63 68 61 72 2a 29 28 2d 31 29 29 == (char*)(-1))
2370: 0a 20 20 20 20 20 20 20 20 7b 20 66 70 72 69 6e . { fprin
2380: 74 66 28 73 74 64 65 72 72 2c 22 74 72 61 6d 70 tf(stderr,"tramp
2390: 6f 6c 69 6e 65 3a 20 4f 75 74 20 6f 66 20 76 69 oline: Out of vi
23a0: 72 74 75 61 6c 20 6d 65 6d 6f 72 79 21 5c 6e 22 rtual memory!\n"
23b0: 29 3b 20 61 62 6f 72 74 28 29 3b 20 7d 0a 20 20 ); abort(); }.
23c0: 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 74 20 77 /* Fill it w
23d0: 69 74 68 20 66 72 65 65 20 74 72 61 6d 70 6f 6c ith free trampol
23e0: 69 6e 65 73 2e 20 2a 2f 0a 20 20 20 20 20 20 7b ines. */. {
23f0: 20 63 68 61 72 2a 2a 20 6c 61 73 74 20 3d 20 26 char** last = &
2400: 66 72 65 65 6c 69 73 74 3b 0a 20 20 20 20 20 20 freelist;.
2410: 20 20 63 68 61 72 2a 20 70 61 67 65 5f 65 6e 64 char* page_end
2420: 20 3d 20 70 61 67 65 20 2b 20 70 61 67 65 73 69 = page + pagesi
2430: 7a 65 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c ze;. whil
2440: 65 20 28 70 61 67 65 2b 54 52 41 4d 50 5f 4c 45 e (page+TRAMP_LE
2450: 4e 47 54 48 20 3c 3d 20 70 61 67 65 5f 65 6e 64 NGTH <= page_end
2460: 29 0a 20 20 20 20 20 20 20 20 20 20 7b 20 2a 6c ). { *l
2470: 61 73 74 20 3d 20 70 61 67 65 3b 20 6c 61 73 74 ast = page; last
2480: 20 3d 20 28 63 68 61 72 2a 2a 29 70 61 67 65 3b = (char**)page;
2490: 20 70 61 67 65 20 2b 3d 20 54 52 41 4d 50 5f 4c page += TRAMP_L
24a0: 45 4e 47 54 48 3b 20 7d 0a 20 20 20 20 20 20 20 ENGTH; }.
24b0: 20 2a 6c 61 73 74 20 3d 20 4e 55 4c 4c 3b 0a 20 *last = NULL;.
24c0: 20 20 20 7d 20 7d 0a 20 20 66 75 6e 63 74 69 6f } }. functio
24d0: 6e 20 3d 20 66 72 65 65 6c 69 73 74 3b 20 66 72 n = freelist; fr
24e0: 65 65 6c 69 73 74 20 3d 20 2a 28 63 68 61 72 2a eelist = *(char*
24f0: 2a 29 66 72 65 65 6c 69 73 74 3b 0a 23 65 6c 73 *)freelist;.#els
2500: 65 0a 20 20 7b 20 63 68 61 72 2a 20 72 6f 6f 6d e. { char* room
2510: 20 3d 20 28 63 68 61 72 2a 29 20 6d 61 6c 6c 6f = (char*) mallo
2520: 63 28 73 69 7a 65 6f 66 28 76 6f 69 64 2a 29 20 c(sizeof(void*)
2530: 2b 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 2b + TRAMP_LENGTH +
2540: 20 54 52 41 4d 50 5f 41 4c 49 47 4e 2d 31 29 3b TRAMP_ALIGN-1);
2550: 0a 20 20 20 20 69 66 20 28 21 72 6f 6f 6d 29 0a . if (!room).
2560: 20 20 20 20 20 20 7b 20 66 70 72 69 6e 74 66 28 { fprintf(
2570: 73 74 64 65 72 72 2c 22 74 72 61 6d 70 6f 6c 69 stderr,"trampoli
2580: 6e 65 3a 20 4f 75 74 20 6f 66 20 76 69 72 74 75 ne: Out of virtu
2590: 61 6c 20 6d 65 6d 6f 72 79 21 5c 6e 22 29 3b 20 al memory!\n");
25a0: 61 62 6f 72 74 28 29 3b 20 7d 0a 20 20 20 20 66 abort(); }. f
25b0: 75 6e 63 74 69 6f 6e 20 3d 20 28 63 68 61 72 2a unction = (char*
25c0: 29 28 28 28 6c 6f 6e 67 29 72 6f 6f 6d 20 2b 20 )(((long)room +
25d0: 73 69 7a 65 6f 66 28 76 6f 69 64 2a 29 20 2b 20 sizeof(void*) +
25e0: 54 52 41 4d 50 5f 41 4c 49 47 4e 2d 31 29 20 26 TRAMP_ALIGN-1) &
25f0: 20 2d 54 52 41 4d 50 5f 41 4c 49 47 4e 29 3b 0a -TRAMP_ALIGN);.
2600: 20 20 20 20 28 28 63 68 61 72 2a 2a 29 66 75 6e ((char**)fun
2610: 63 74 69 6f 6e 29 5b 2d 31 5d 20 3d 20 72 6f 6f ction)[-1] = roo
2620: 6d 3b 20 2f 2a 20 62 61 63 6b 70 6f 69 6e 74 65 m; /* backpointe
2630: 72 20 66 6f 72 20 66 72 65 65 5f 74 72 61 6d 70 r for free_tramp
2640: 6f 6c 69 6e 65 28 29 20 2a 2f 0a 20 20 7d 0a 23 oline() */. }.#
2650: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 32 2e 20 46 endif.. /* 2. F
2660: 69 6c 6c 20 6f 75 74 20 74 68 65 20 74 72 61 6d ill out the tram
2670: 70 6f 6c 69 6e 65 20 2a 2f 0a 23 69 66 64 65 66 poline */.#ifdef
2680: 20 5f 5f 69 33 38 36 5f 5f 0a 20 20 2f 2a 20 66 __i386__. /* f
2690: 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 unction:. *
26a0: 20 6d 6f 76 6c 20 24 3c 64 61 74 61 3e 2c 3c 76 movl $<data>,<v
26b0: 61 72 69 61 62 6c 65 3e 09 09 43 37 20 30 35 20 ariable>..C7 05
26c0: 3c 76 61 72 69 61 62 6c 65 3e 20 3c 64 61 74 61 <variable> <data
26d0: 3e 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 3c 61 >. * jmp <a
26e0: 64 64 72 65 73 73 3e 09 09 09 45 39 20 3c 61 64 ddress>...E9 <ad
26f0: 64 72 65 73 73 3e 2d 3c 68 65 72 65 3e 0a 20 20 dress>-<here>.
2700: 20 2a 20 68 65 72 65 3a 0a 20 20 20 2a 2f 0a 20 * here:. */.
2710: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
2720: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 30 ction + 0) = 0x0
2730: 35 43 37 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 5C7;. *(long *)
2740: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 (function + 2)
2750: 20 3d 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 62 = (long) variab
2760: 6c 65 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 le;. *(long *)
2770: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 (function + 6)
2780: 3d 20 28 6c 6f 6e 67 29 20 64 61 74 61 3b 0a 20 = (long) data;.
2790: 20 2a 28 63 68 61 72 20 2a 29 20 20 28 66 75 6e *(char *) (fun
27a0: 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 30 78 45 ction +10) = 0xE
27b0: 39 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 9;. *(long *)
27c0: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 31 29 20 3d (function +11) =
27d0: 20 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 20 (long) address
27e0: 2d 20 28 6c 6f 6e 67 29 20 28 66 75 6e 63 74 69 - (long) (functi
27f0: 6f 6e 20 2b 20 31 35 29 3b 0a 23 64 65 66 69 6e on + 15);.#defin
2800: 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 e is_tramp(funct
2810: 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 ion) \. *(unsi
2820: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
2830: 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 unction + 0) ==
2840: 30 78 30 35 43 37 20 26 26 20 5c 0a 20 20 2a 28 0x05C7 && \. *(
2850: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 unsigned char *)
2860: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 (function +10)
2870: 20 3d 3d 20 30 78 45 39 0a 23 64 65 66 69 6e 65 == 0xE9.#define
2880: 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 tramp_address(f
2890: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 unction) \. *(
28a0: 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 long *) (functi
28b0: 6f 6e 20 2b 31 31 29 20 2b 20 28 6c 6f 6e 67 29 on +11) + (long)
28c0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 31 35 29 (function + 15)
28d0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 .#define tramp_v
28e0: 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e ariable(function
28f0: 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 ) \. *(long *)
2900: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 (function + 2)
2910: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 .#define tramp_d
2920: 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ata(function) \
2930: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 . *(long *) (f
2940: 75 6e 63 74 69 6f 6e 20 2b 20 36 29 0a 23 65 6e unction + 6).#en
2950: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 36 38 dif.#ifdef __m68
2960: 6b 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f k__. /* functio
2970: 6e 3a 0a 20 20 20 2a 20 20 20 20 6d 6f 76 65 6c n:. * movel
2980: 20 23 3c 64 61 74 61 3e 2c 3c 76 61 72 69 61 62 #<data>,<variab
2990: 6c 65 3e 09 32 33 20 46 43 20 3c 64 61 74 61 3e le>.23 FC <data>
29a0: 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 20 2a <variable>. *
29b0: 20 20 20 20 6a 6d 70 20 3c 61 64 64 72 65 73 73 jmp <address
29c0: 3e 09 09 09 34 45 20 46 39 20 3c 61 64 64 72 65 >...4E F9 <addre
29d0: 73 73 3e 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 ss>. * nop.
29e0: 09 09 09 34 45 20 37 31 0a 20 20 20 2a 2f 0a 20 ...4E 71. */.
29f0: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
2a00: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 32 ction + 0) = 0x2
2a10: 33 46 43 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 3FC;. *(long *)
2a20: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 (function + 2)
2a30: 20 3d 20 28 6c 6f 6e 67 29 20 64 61 74 61 3b 0a = (long) data;.
2a40: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
2a50: 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 6c nction + 6) = (l
2a60: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 ong) variable;.
2a70: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
2a80: 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 30 78 34 ction +10) = 0x4
2a90: 45 46 39 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 EF9;. *(long *)
2aa0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 (function +12)
2ab0: 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 = (long) addres
2ac0: 73 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 s;. *(short *)
2ad0: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
2ae0: 20 30 78 34 45 37 31 3b 0a 23 64 65 66 69 6e 65 0x4E71;.#define
2af0: 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 is_tramp(functi
2b00: 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 on) \. *(unsig
2b10: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
2b20: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 nction + 0) == 0
2b30: 78 32 33 46 43 20 26 26 20 5c 0a 20 20 2a 28 75 x23FC && \. *(u
2b40: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
2b50: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 (function +10)
2b60: 3d 3d 20 30 78 34 45 46 39 20 26 26 20 5c 0a 20 == 0x4EF9 && \.
2b70: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
2b80: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
2b90: 31 36 29 20 3d 3d 20 30 78 34 45 37 31 0a 23 64 16) == 0x4E71.#d
2ba0: 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 efine tramp_addr
2bb0: 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ess(function) \
2bc0: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 . *(long *) (f
2bd0: 75 6e 63 74 69 6f 6e 20 2b 31 32 29 0a 23 64 65 unction +12).#de
2be0: 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 fine tramp_varia
2bf0: 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ble(function) \
2c00: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 . *(long *) (f
2c10: 75 6e 63 74 69 6f 6e 20 2b 20 36 29 0a 23 64 65 unction + 6).#de
2c20: 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 fine tramp_data(
2c30: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
2c40: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
2c50: 69 6f 6e 20 2b 20 32 29 0a 23 65 6e 64 69 66 0a ion + 2).#endif.
2c60: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 #if defined(__mi
2c70: 70 73 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 ps__) && !define
2c80: 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 0a 20 d(__mipsn32__).
2c90: 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 /* function:.
2ca0: 20 2a 20 20 20 20 6c 69 20 24 32 2c 3c 64 61 74 * li $2,<dat
2cb0: 61 3e 26 30 78 66 66 66 66 30 30 30 30 09 09 33 a>&0xffff0000..3
2cc0: 43 20 30 32 20 68 69 31 36 28 3c 64 61 74 61 3e C 02 hi16(<data>
2cd0: 29 0a 20 20 20 2a 20 20 20 20 6f 72 69 20 24 32 ). * ori $2
2ce0: 2c 24 32 2c 3c 64 61 74 61 3e 26 30 78 66 66 66 ,$2,<data>&0xfff
2cf0: 66 09 09 33 34 20 34 32 20 6c 6f 31 36 28 3c 64 f..34 42 lo16(<d
2d00: 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 73 77 ata>). * sw
2d10: 20 24 32 2c 3c 76 61 72 69 61 62 6c 65 3e 09 09 $2,<variable>..
2d20: 33 43 20 30 31 20 68 69 31 36 28 3c 76 61 72 69 3C 01 hi16(<vari
2d30: 61 62 6c 65 3e 29 0a 20 20 20 2a 20 20 20 20 09 able>). * .
2d40: 09 09 09 41 43 20 32 32 20 6c 6f 31 36 28 3c 76 ...AC 22 lo16(<v
2d50: 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 20 ariable>). *
2d60: 20 20 6c 69 20 24 32 35 2c 3c 61 64 64 72 65 73 li $25,<addres
2d70: 73 3e 26 30 78 66 66 66 66 30 30 30 30 09 33 43 s>&0xffff0000.3C
2d80: 20 31 39 20 68 69 31 36 28 3c 61 64 64 72 65 73 19 hi16(<addres
2d90: 73 3e 29 0a 20 20 20 2a 20 20 20 20 6f 72 69 20 s>). * ori
2da0: 24 32 35 2c 24 32 35 2c 3c 61 64 64 72 65 73 73 $25,$25,<address
2db0: 3e 26 30 78 66 66 66 66 09 33 37 20 33 39 20 6c >&0xffff.37 39 l
2dc0: 6f 31 36 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 o16(<address>).
2dd0: 20 20 2a 20 20 20 20 6a 20 24 32 35 09 09 09 09 * j $25....
2de0: 30 33 20 32 30 20 30 30 20 30 38 0a 20 20 20 2a 03 20 00 08. *
2df0: 20 20 20 20 6e 6f 70 09 09 09 09 30 30 20 30 30 nop....00 00
2e00: 20 30 30 20 30 30 0a 20 20 20 2a 2f 0a 20 20 2f 00 00. */. /
2e10: 2a 20 57 68 61 74 20 61 62 6f 75 74 20 62 69 67 * What about big
2e20: 20 65 6e 64 69 61 6e 20 2f 20 6c 69 74 74 6c 65 endian / little
2e30: 20 65 6e 64 69 61 6e 20 3f 3f 20 2a 2f 0a 20 20 endian ?? */.
2e40: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
2e50: 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 33 43 tion + 0) = 0x3C
2e60: 30 32 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 02;. *(short *)
2e70: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 (function + 2)
2e80: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
2e90: 29 20 64 61 74 61 20 3e 3e 20 31 36 3b 0a 20 20 ) data >> 16;.
2ea0: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
2eb0: 74 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 33 34 tion + 4) = 0x34
2ec0: 34 32 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 42;. *(short *)
2ed0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 (function + 6)
2ee0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
2ef0: 29 20 64 61 74 61 20 26 20 30 78 66 66 66 66 3b ) data & 0xffff;
2f00: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
2f10: 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 unction + 8) = 0
2f20: 78 33 43 30 31 3b 0a 20 20 2a 28 73 68 6f 72 74 x3C01;. *(short
2f30: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
2f40: 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 0) = (unsigned l
2f50: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 20 3e 3e ong) variable >>
2f60: 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 16;. *(short *
2f70: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 ) (function +12)
2f80: 20 3d 20 30 78 41 43 32 32 3b 0a 20 20 2a 28 73 = 0xAC22;. *(s
2f90: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
2fa0: 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 67 6e n +14) = (unsign
2fb0: 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c ed long) variabl
2fc0: 65 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 e & 0xffff;. *(
2fd0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
2fe0: 6f 6e 20 2b 31 36 29 20 3d 20 30 78 33 43 31 39 on +16) = 0x3C19
2ff0: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
3000: 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 20 3d 20 function +18) =
3010: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
3020: 61 64 64 72 65 73 73 20 3e 3e 20 31 36 3b 0a 20 address >> 16;.
3030: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
3040: 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 33 ction +20) = 0x3
3050: 37 33 39 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 739;. *(short *
3060: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 ) (function +22)
3070: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
3080: 67 29 20 61 64 64 72 65 73 73 20 26 20 30 78 66 g) address & 0xf
3090: 66 66 66 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 fff;. *(long *)
30a0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 (function +24)
30b0: 20 3d 20 30 78 30 33 32 30 30 30 30 38 3b 0a 20 = 0x03200008;.
30c0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
30d0: 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 78 30 ction +28) = 0x0
30e0: 30 30 30 30 30 30 30 3b 0a 23 64 65 66 69 6e 65 0000000;.#define
30f0: 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 is_tramp(functi
3100: 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 on) \. *(unsig
3110: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
3120: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 nction + 0) == 0
3130: 78 33 43 30 32 20 26 26 20 5c 0a 20 20 2a 28 75 x3C02 && \. *(u
3140: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
3150: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 (function + 4)
3160: 3d 3d 20 30 78 33 34 34 32 20 26 26 20 5c 0a 20 == 0x3442 && \.
3170: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
3180: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
3190: 20 38 29 20 3d 3d 20 30 78 33 43 30 31 20 26 26 8) == 0x3C01 &&
31a0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
31b0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
31c0: 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 41 43 32 on +12) == 0xAC2
31d0: 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 2 && \. *(unsig
31e0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
31f0: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 nction +16) == 0
3200: 78 33 43 31 39 20 26 26 20 5c 0a 20 20 2a 28 75 x3C19 && \. *(u
3210: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
3220: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
3230: 3d 3d 20 30 78 33 37 33 39 20 26 26 20 5c 0a 20 == 0x3739 && \.
3240: 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 *(unsigned long
3250: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
3260: 32 34 29 20 3d 3d 20 30 78 30 33 32 30 30 30 30 24) == 0x0320000
3270: 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 8 && \. *(unsig
3280: 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 20 28 66 75 ned long *) (fu
3290: 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 nction +28) == 0
32a0: 78 30 30 30 30 30 30 30 30 0a 23 64 65 66 69 6e x00000000.#defin
32b0: 65 20 68 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f e hilo(hiword,lo
32c0: 77 6f 72 64 29 20 20 5c 0a 20 20 28 28 28 75 6e word) \. (((un
32d0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 68 69 signed long) (hi
32e0: 77 6f 72 64 29 20 3c 3c 20 31 36 29 20 7c 20 28 word) << 16) | (
32f0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 unsigned long) (
3300: 6c 6f 77 6f 72 64 29 29 0a 23 64 65 66 69 6e 65 loword)).#define
3310: 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 tramp_address(f
3320: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 unction) \. hi
3330: 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 lo(*(unsigned sh
3340: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3350: 20 2b 31 38 29 2c 20 2a 28 75 6e 73 69 67 6e 65 +18), *(unsigne
3360: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
3370: 74 69 6f 6e 20 2b 32 32 29 29 0a 23 64 65 66 69 tion +22)).#defi
3380: 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c ne tramp_variabl
3390: 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 e(function) \.
33a0: 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 hilo(*(unsigned
33b0: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
33c0: 69 6f 6e 20 2b 31 30 29 2c 20 2a 28 75 6e 73 69 ion +10), *(unsi
33d0: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
33e0: 75 6e 63 74 69 6f 6e 20 2b 31 34 29 29 0a 23 64 unction +14)).#d
33f0: 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 efine tramp_data
3400: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
3410: 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 hilo(*(unsigned
3420: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
3430: 6f 6e 20 2b 20 32 29 2c 20 2a 28 75 6e 73 69 67 on + 2), *(unsig
3440: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
3450: 6e 63 74 69 6f 6e 20 2b 20 36 29 29 0a 23 65 6e nction + 6)).#en
3460: 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 69 70 dif.#ifdef __mip
3470: 73 6e 33 32 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 sn32__. /* func
3480: 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 6c 77 tion:. * lw
3490: 20 24 32 2c 32 34 28 24 32 35 29 09 09 09 38 46 $2,24($25)...8F
34a0: 20 32 32 20 30 30 20 31 38 0a 20 20 20 2a 20 20 22 00 18. *
34b0: 20 20 6c 77 20 24 33 2c 32 38 28 24 32 35 29 09 lw $3,28($25).
34c0: 09 09 38 46 20 32 33 20 30 30 20 31 43 0a 20 20 ..8F 23 00 1C.
34d0: 20 2a 20 20 20 20 73 77 20 24 33 2c 30 28 24 32 * sw $3,0($2
34e0: 29 09 09 09 41 43 20 34 33 20 30 30 20 30 30 0a )...AC 43 00 00.
34f0: 20 20 20 2a 20 20 20 20 6c 77 20 24 32 35 2c 33 * lw $25,3
3500: 32 28 24 32 35 29 09 09 09 38 46 20 33 39 20 30 2($25)...8F 39 0
3510: 30 20 32 30 0a 20 20 20 2a 20 20 20 20 6a 20 24 0 20. * j $
3520: 32 35 09 09 09 09 30 33 20 32 30 20 30 30 20 30 25....03 20 00 0
3530: 38 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 09 09 8. * nop...
3540: 09 30 30 20 30 30 20 30 30 20 30 30 0a 20 20 20 .00 00 00 00.
3550: 2a 20 20 20 20 2e 77 6f 72 64 20 3c 76 61 72 69 * .word <vari
3560: 61 62 6c 65 3e 09 09 3c 76 61 72 69 61 62 6c 65 able>..<variable
3570: 3e 0a 20 20 20 2a 20 20 20 20 2e 77 6f 72 64 20 >. * .word
3580: 3c 64 61 74 61 3e 09 09 09 3c 64 61 74 61 3e 0a <data>...<data>.
3590: 20 20 20 2a 20 20 20 20 2e 77 6f 72 64 20 3c 61 * .word <a
35a0: 64 64 72 65 73 73 3e 09 09 09 3c 61 64 64 72 65 ddress>...<addre
35b0: 73 73 3e 0a 20 20 20 2a 2f 0a 20 20 2f 2a 20 57 ss>. */. /* W
35c0: 68 61 74 20 61 62 6f 75 74 20 62 69 67 20 65 6e hat about big en
35d0: 64 69 61 6e 20 2f 20 6c 69 74 74 6c 65 20 65 6e dian / little en
35e0: 64 69 61 6e 20 3f 3f 20 2a 2f 0a 20 20 2a 28 75 dian ?? */. *(u
35f0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 nsigned int *) (
3600: 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 function + 0) =
3610: 30 78 38 46 32 32 30 30 31 38 3b 0a 20 20 2a 28 0x8F220018;. *(
3620: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 unsigned int *)
3630: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
3640: 20 30 78 38 46 32 33 30 30 31 43 3b 0a 20 20 2a 0x8F23001C;. *
3650: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
3660: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
3670: 3d 20 30 78 41 43 34 33 30 30 30 30 3b 0a 20 20 = 0xAC430000;.
3680: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
3690: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 ) (function +12)
36a0: 20 3d 20 30 78 38 46 33 39 30 30 32 30 3b 0a 20 = 0x8F390020;.
36b0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 *(unsigned int
36c0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 *) (function +16
36d0: 29 20 3d 20 30 78 30 33 32 30 30 30 30 38 3b 0a ) = 0x03200008;.
36e0: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 *(unsigned int
36f0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
3700: 30 29 20 3d 20 30 78 30 30 30 30 30 30 30 30 3b 0) = 0x00000000;
3710: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
3720: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
3730: 32 34 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 24) = (unsigned
3740: 69 6e 74 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 int) variable;.
3750: 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 *(unsigned int
3760: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 38 *) (function +28
3770: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 69 6e ) = (unsigned in
3780: 74 29 20 64 61 74 61 3b 0a 20 20 2a 28 75 6e 73 t) data;. *(uns
3790: 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 igned int *) (fu
37a0: 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d 20 28 75 nction +32) = (u
37b0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 61 64 64 nsigned int) add
37c0: 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 20 69 73 ress;.#define is
37d0: 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 _tramp(function)
37e0: 20 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 \. *(int *)
37f0: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
3800: 6e 20 2b 20 30 29 20 3d 3d 20 30 78 38 46 32 32 n + 0) == 0x8F22
3810: 30 30 31 38 20 26 26 20 5c 0a 20 20 2a 28 69 6e 0018 && \. *(in
3820: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 t *) (f
3830: 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d 20 unction + 4) ==
3840: 30 78 38 46 32 33 30 30 31 43 20 26 26 20 5c 0a 0x8F23001C && \.
3850: 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 20 20 *(int *)
3860: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 (function +
3870: 38 29 20 3d 3d 20 30 78 41 43 34 33 30 30 30 30 8) == 0xAC430000
3880: 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 && \. *(int *)
3890: 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 (funct
38a0: 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 38 46 ion +12) == 0x8F
38b0: 33 39 30 30 32 30 20 26 26 20 5c 0a 20 20 2a 28 390020 && \. *(
38c0: 69 6e 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 int *)
38d0: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
38e0: 3d 20 30 78 30 33 32 30 30 30 30 38 20 26 26 20 = 0x03200008 &&
38f0: 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 \. *(int *)
3900: 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 (function
3910: 2b 32 30 29 20 3d 3d 20 30 78 30 30 30 30 30 30 +20) == 0x000000
3920: 30 30 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 00.#define tramp
3930: 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f _address(functio
3940: 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e n) \. *(unsign
3950: 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 ed int *) (funct
3960: 69 6f 6e 20 2b 33 32 29 0a 23 64 65 66 69 6e 65 ion +32).#define
3970: 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 tramp_variable(
3980: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
3990: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
39a0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 0a (function +24).
39b0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
39c0: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
39d0: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 *(unsigned int
39e0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
39f0: 38 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 8).#endif.#ifdef
3a00: 20 5f 5f 6d 69 70 73 36 34 6f 6c 64 5f 5f 0a 20 __mips64old__.
3a10: 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 /* function:.
3a20: 20 2a 20 20 20 20 64 6c 69 20 24 32 2c 3c 76 61 * dli $2,<va
3a30: 72 69 61 62 6c 65 3e 09 09 33 43 20 30 32 20 68 riable>..3C 02 h
3a40: 69 31 36 28 68 69 33 32 28 3c 76 61 72 69 61 62 i16(hi32(<variab
3a50: 6c 65 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 33 le>)). *.....3
3a60: 34 20 34 32 20 6c 6f 31 36 28 68 69 33 32 28 3c 4 42 lo16(hi32(<
3a70: 76 61 72 69 61 62 6c 65 3e 29 29 0a 20 20 20 2a variable>)). *
3a80: 09 09 09 09 09 30 30 20 30 32 20 31 34 20 33 38 .....00 02 14 38
3a90: 0a 20 20 20 2a 09 09 09 09 09 33 34 20 34 32 20 . *.....34 42
3aa0: 68 69 31 36 28 6c 6f 33 32 28 3c 76 61 72 69 61 hi16(lo32(<varia
3ab0: 62 6c 65 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 ble>)). *.....
3ac0: 30 30 20 30 32 20 31 34 20 33 38 0a 20 20 20 2a 00 02 14 38. *
3ad0: 09 09 09 09 09 33 34 20 34 32 20 6c 6f 31 36 28 .....34 42 lo16(
3ae0: 6c 6f 33 32 28 3c 76 61 72 69 61 62 6c 65 3e 29 lo32(<variable>)
3af0: 29 0a 20 20 20 2a 20 20 20 20 64 6c 69 20 24 33 ). * dli $3
3b00: 2c 3c 64 61 74 61 3e 09 09 09 33 43 20 30 33 20 ,<data>...3C 03
3b10: 68 69 31 36 28 68 69 33 32 28 3c 64 61 74 61 3e hi16(hi32(<data>
3b20: 29 29 0a 20 20 20 2a 09 09 09 09 09 33 34 20 36 )). *.....34 6
3b30: 33 20 6c 6f 31 36 28 68 69 33 32 28 3c 64 61 74 3 lo16(hi32(<dat
3b40: 61 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 30 30 a>)). *.....00
3b50: 20 30 33 20 31 43 20 33 38 0a 20 20 20 2a 09 09 03 1C 38. *..
3b60: 09 09 09 33 34 20 36 33 20 68 69 31 36 28 6c 6f ...34 63 hi16(lo
3b70: 33 32 28 3c 64 61 74 61 3e 29 29 0a 20 20 20 2a 32(<data>)). *
3b80: 09 09 09 09 09 30 30 20 30 33 20 31 43 20 33 38 .....00 03 1C 38
3b90: 0a 20 20 20 2a 09 09 09 09 09 33 34 20 36 33 20 . *.....34 63
3ba0: 6c 6f 31 36 28 6c 6f 33 32 28 3c 64 61 74 61 3e lo16(lo32(<data>
3bb0: 29 29 0a 20 20 20 2a 20 20 20 20 73 64 20 24 33 )). * sd $3
3bc0: 2c 30 28 24 32 29 09 09 09 46 43 20 34 33 20 30 ,0($2)...FC 43 0
3bd0: 30 20 30 30 0a 20 20 20 2a 20 20 20 20 64 6c 69 0 00. * dli
3be0: 20 24 32 35 2c 3c 61 64 64 72 65 73 73 3e 09 09 $25,<address>..
3bf0: 33 43 20 31 39 20 68 69 31 36 28 68 69 33 32 28 3C 19 hi16(hi32(
3c00: 3c 61 64 64 72 65 73 73 3e 29 29 0a 20 20 20 2a <address>)). *
3c10: 09 09 09 09 09 33 37 20 33 39 20 6c 6f 31 36 28 .....37 39 lo16(
3c20: 68 69 33 32 28 3c 61 64 64 72 65 73 73 3e 29 29 hi32(<address>))
3c30: 0a 20 20 20 2a 09 09 09 09 09 30 30 20 31 39 20 . *.....00 19
3c40: 43 43 20 33 38 0a 20 20 20 2a 09 09 09 09 09 33 CC 38. *.....3
3c50: 37 20 33 39 20 68 69 31 36 28 6c 6f 33 32 28 3c 7 39 hi16(lo32(<
3c60: 61 64 64 72 65 73 73 3e 29 29 0a 20 20 20 2a 09 address>)). *.
3c70: 09 09 09 09 30 30 20 31 39 20 43 43 20 33 38 0a ....00 19 CC 38.
3c80: 20 20 20 2a 09 09 09 09 09 33 37 20 33 39 20 6c *.....37 39 l
3c90: 6f 31 36 28 6c 6f 33 32 28 3c 61 64 64 72 65 73 o16(lo32(<addres
3ca0: 73 3e 29 29 0a 20 20 20 2a 20 20 20 20 6a 20 24 s>)). * j $
3cb0: 32 35 09 09 09 09 30 33 20 32 30 20 30 30 20 30 25....03 20 00 0
3cc0: 38 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 09 09 8. * nop...
3cd0: 09 30 30 20 30 30 20 30 30 20 30 30 0a 20 20 20 .00 00 00 00.
3ce0: 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 20 61 62 6f */. /* What abo
3cf0: 75 74 20 62 69 67 20 65 6e 64 69 61 6e 20 2f 20 ut big endian /
3d00: 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 3f 3f little endian ??
3d10: 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 */. *(short *)
3d20: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 (function + 0)
3d30: 3d 20 30 78 33 43 30 32 3b 0a 20 20 2a 28 73 68 = 0x3C02;. *(sh
3d40: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3d50: 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 + 2) = (unsigne
3d60: 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 d long) variable
3d70: 20 3e 3e 20 34 38 3b 0a 20 20 2a 28 73 68 6f 72 >> 48;. *(shor
3d80: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
3d90: 20 34 29 20 3d 20 30 78 33 34 34 32 3b 0a 20 20 4) = 0x3442;.
3da0: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
3db0: 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 28 75 6e tion + 6) = ((un
3dc0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 signed long) var
3dd0: 69 61 62 6c 65 20 3e 3e 20 33 32 29 20 26 20 30 iable >> 32) & 0
3de0: 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a xffff;. *(int *
3df0: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 ) (function +
3e00: 38 29 20 3d 20 30 78 30 30 30 32 31 34 33 38 3b 8) = 0x00021438;
3e10: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3e20: 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 unction +12) = 0
3e30: 78 33 34 34 32 3b 0a 20 20 2a 28 73 68 6f 72 74 x3442;. *(short
3e40: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
3e50: 34 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 64 20 4) = ((unsigned
3e60: 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 20 3e long) variable >
3e70: 3e 20 31 36 29 20 26 20 30 78 66 66 66 66 3b 0a > 16) & 0xffff;.
3e80: 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 75 *(int *) (fu
3e90: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 nction +16) = 0x
3ea0: 30 30 30 32 31 34 33 38 3b 0a 20 20 2a 28 73 68 00021438;. *(sh
3eb0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3ec0: 20 2b 32 30 29 20 3d 20 30 78 33 34 34 32 3b 0a +20) = 0x3442;.
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 32 32 29 20 3d 20 28 75 nction +22) = (u
3ef0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 nsigned long) va
3f00: 72 69 61 62 6c 65 20 26 20 30 78 66 66 66 66 3b riable & 0xffff;
3f10: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3f20: 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 unction +24) = 0
3f30: 78 33 43 30 33 3b 0a 20 20 2a 28 73 68 6f 72 74 x3C03;. *(short
3f40: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
3f50: 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6) = (unsigned l
3f60: 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 34 38 3b ong) data >> 48;
3f70: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3f80: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 unction +28) = 0
3f90: 78 33 34 36 33 3b 0a 20 20 2a 28 73 68 6f 72 74 x3463;. *(short
3fa0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 *) (function +3
3fb0: 30 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 64 20 0) = ((unsigned
3fc0: 6c 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 33 32 long) data >> 32
3fd0: 29 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 ) & 0xffff;. *(
3fe0: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
3ff0: 6f 6e 20 2b 33 32 29 20 3d 20 30 78 30 30 30 33 on +32) = 0x0003
4000: 31 43 33 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 1C38;. *(short
4010: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 36 *) (function +36
4020: 29 20 3d 20 30 78 33 34 36 33 3b 0a 20 20 2a 28 ) = 0x3463;. *(
4030: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
4040: 6f 6e 20 2b 33 38 29 20 3d 20 28 28 75 6e 73 69 on +38) = ((unsi
4050: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 gned long) data
4060: 3e 3e 20 31 36 29 20 26 20 30 78 66 66 66 66 3b >> 16) & 0xffff;
4070: 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 . *(int *) (f
4080: 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d 20 30 unction +40) = 0
4090: 78 30 30 30 33 31 43 33 38 3b 0a 20 20 2a 28 73 x00031C38;. *(s
40a0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
40b0: 6e 20 2b 34 34 29 20 3d 20 30 78 33 34 36 33 3b n +44) = 0x3463;
40c0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
40d0: 75 6e 63 74 69 6f 6e 20 2b 34 36 29 20 3d 20 28 unction +46) = (
40e0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d
40f0: 61 74 61 20 26 20 30 78 66 66 66 66 3b 0a 20 20 ata & 0xffff;.
4100: 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 *(int *) (func
4110: 74 69 6f 6e 20 2b 34 38 29 20 3d 20 30 78 46 43 tion +48) = 0xFC
4120: 34 33 30 30 30 30 3b 0a 20 20 2a 28 73 68 6f 72 430000;. *(shor
4130: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
4140: 35 32 29 20 3d 20 30 78 33 43 31 39 3b 0a 20 20 52) = 0x3C19;.
4150: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
4160: 74 69 6f 6e 20 2b 35 34 29 20 3d 20 28 75 6e 73 tion +54) = (uns
4170: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 igned long) addr
4180: 65 73 73 20 3e 3e 20 34 38 3b 0a 20 20 2a 28 73 ess >> 48;. *(s
4190: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
41a0: 6e 20 2b 35 36 29 20 3d 20 30 78 33 37 33 39 3b n +56) = 0x3739;
41b0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
41c0: 75 6e 63 74 69 6f 6e 20 2b 35 38 29 20 3d 20 28 unction +58) = (
41d0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
41e0: 61 64 64 72 65 73 73 20 3e 3e 20 33 32 29 20 26 address >> 32) &
41f0: 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e 74 0xffff;. *(int
4200: 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 *) (function
4210: 2b 36 30 29 20 3d 20 30 78 30 30 31 39 43 43 33 +60) = 0x0019CC3
4220: 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 8;. *(short *)
4230: 28 66 75 6e 63 74 69 6f 6e 20 2b 36 34 29 20 3d (function +64) =
4240: 20 30 78 33 37 33 39 3b 0a 20 20 2a 28 73 68 6f 0x3739;. *(sho
4250: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
4260: 2b 36 36 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 +66) = ((unsigne
4270: 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 20 d long) address
4280: 3e 3e 20 31 36 29 20 26 20 30 78 66 66 66 66 3b >> 16) & 0xffff;
4290: 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 . *(int *) (f
42a0: 75 6e 63 74 69 6f 6e 20 2b 36 38 29 20 3d 20 30 unction +68) = 0
42b0: 78 30 30 31 39 43 43 33 38 3b 0a 20 20 2a 28 73 x0019CC38;. *(s
42c0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
42d0: 6e 20 2b 37 32 29 20 3d 20 30 78 33 37 33 39 3b n +72) = 0x3739;
42e0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
42f0: 75 6e 63 74 69 6f 6e 20 2b 37 34 29 20 3d 20 28 unction +74) = (
4300: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 unsigned long) a
4310: 64 64 72 65 73 73 20 26 20 30 78 66 66 66 66 3b ddress & 0xffff;
4320: 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 . *(int *) (f
4330: 75 6e 63 74 69 6f 6e 20 2b 37 36 29 20 3d 20 30 unction +76) = 0
4340: 78 30 33 32 30 30 30 30 38 3b 0a 20 20 2a 28 69 x03200008;. *(i
4350: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
4360: 6e 20 2b 38 30 29 20 3d 20 30 78 30 30 30 30 30 n +80) = 0x00000
4370: 30 30 30 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 000;.#define is_
4380: 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 tramp(function)
4390: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
43a0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
43b0: 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 33 43 30 on + 0) == 0x3C0
43c0: 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 2 && \. *(unsig
43d0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
43e0: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d 20 30 nction + 4) == 0
43f0: 78 33 34 34 32 20 26 26 20 5c 0a 20 20 2a 28 75 x3442 && \. *(u
4400: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 20 nsigned int *)
4410: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
4420: 3d 3d 20 30 78 30 30 30 32 31 34 33 38 20 26 26 == 0x00021438 &&
4430: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
4440: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
4450: 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 33 34 34 on +12) == 0x344
4460: 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 2 && \. *(unsig
4470: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
4480: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 nction +16) == 0
4490: 78 30 30 30 32 31 34 33 38 20 26 26 20 5c 0a 20 x00021438 && \.
44a0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
44b0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
44c0: 32 30 29 20 3d 3d 20 30 78 33 34 34 32 20 26 26 20) == 0x3442 &&
44d0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
44e0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
44f0: 6f 6e 20 2b 32 34 29 20 3d 3d 20 30 78 33 43 30 on +24) == 0x3C0
4500: 33 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 3 && \. *(unsig
4510: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
4520: 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 nction +28) == 0
4530: 78 33 34 36 33 20 26 26 20 5c 0a 20 20 2a 28 75 x3463 && \. *(u
4540: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 20 nsigned int *)
4550: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 (function +32)
4560: 3d 3d 20 30 78 30 30 30 33 31 43 33 38 20 26 26 == 0x00031C38 &&
4570: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
4580: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
4590: 6f 6e 20 2b 33 36 29 20 3d 3d 20 30 78 33 34 36 on +36) == 0x346
45a0: 33 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 3 && \. *(unsig
45b0: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
45c0: 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d 3d 20 30 nction +40) == 0
45d0: 78 30 30 30 33 31 43 33 38 20 26 26 20 5c 0a 20 x00031C38 && \.
45e0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
45f0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
4600: 34 34 29 20 3d 3d 20 30 78 33 34 36 33 20 26 26 44) == 0x3463 &&
4610: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
4620: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
4630: 6f 6e 20 2b 34 38 29 20 3d 3d 20 30 78 46 43 34 on +48) == 0xFC4
4640: 33 30 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 75 30000 && \. *(u
4650: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
4660: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 32 29 20 (function +52)
4670: 3d 3d 20 30 78 33 43 31 39 20 26 26 20 5c 0a 20 == 0x3C19 && \.
4680: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
4690: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
46a0: 35 36 29 20 3d 3d 20 30 78 33 37 33 39 20 26 26 56) == 0x3739 &&
46b0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
46c0: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
46d0: 6f 6e 20 2b 36 30 29 20 3d 3d 20 30 78 30 30 31 on +60) == 0x001
46e0: 39 43 43 33 38 20 26 26 20 5c 0a 20 20 2a 28 75 9CC38 && \. *(u
46f0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
4700: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 36 34 29 20 (function +64)
4710: 3d 3d 20 30 78 33 37 33 39 20 26 26 20 5c 0a 20 == 0x3739 && \.
4720: 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 *(unsigned int
4730: 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
4740: 36 38 29 20 3d 3d 20 30 78 30 30 31 39 43 43 33 68) == 0x0019CC3
4750: 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 8 && \. *(unsig
4760: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
4770: 6e 63 74 69 6f 6e 20 2b 37 32 29 20 3d 3d 20 30 nction +72) == 0
4780: 78 33 37 33 39 20 26 26 20 5c 0a 20 20 2a 28 75 x3739 && \. *(u
4790: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 20 nsigned int *)
47a0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 37 36 29 20 (function +76)
47b0: 3d 3d 20 30 78 30 33 32 30 30 30 30 38 20 26 26 == 0x03200008 &&
47c0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
47d0: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
47e0: 6f 6e 20 2b 38 30 29 20 3d 3d 20 30 78 30 30 30 on +80) == 0x000
47f0: 30 30 30 30 30 0a 23 64 65 66 69 6e 65 20 68 69 00000.#define hi
4800: 6c 6f 28 77 6f 72 64 33 2c 77 6f 72 64 32 2c 77 lo(word3,word2,w
4810: 6f 72 64 31 2c 77 6f 72 64 30 29 20 20 5c 0a 20 ord1,word0) \.
4820: 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e (((unsigned lon
4830: 67 29 20 28 77 6f 72 64 33 29 20 3c 3c 20 34 38 g) (word3) << 48
4840: 29 20 7c 20 28 28 75 6e 73 69 67 6e 65 64 20 6c ) | ((unsigned l
4850: 6f 6e 67 29 20 28 77 6f 72 64 32 29 20 3c 3c 20 ong) (word2) <<
4860: 33 32 29 20 7c 20 5c 0a 20 20 20 28 28 75 6e 73 32) | \. ((uns
4870: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f 72 igned long) (wor
4880: 64 31 29 20 3c 3c 20 31 36 29 20 7c 20 28 75 6e d1) << 16) | (un
4890: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f signed long) (wo
48a0: 72 64 30 29 29 0a 23 64 65 66 69 6e 65 20 74 72 rd0)).#define tr
48b0: 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e 63 amp_address(func
48c0: 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 tion) \. hilo(
48d0: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
48e0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 *) (function +5
48f0: 34 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 4), \. *(u
4900: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
4910: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 38 29 2c (function +58),
4920: 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 6e 73 69 \. *(unsi
4930: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
4940: 75 6e 63 74 69 6f 6e 20 2b 36 36 29 2c 20 5c 0a unction +66), \.
4950: 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 *(unsigne
4960: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
4970: 74 69 6f 6e 20 2b 37 34 29 29 0a 23 64 65 66 69 tion +74)).#defi
4980: 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c ne tramp_variabl
4990: 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 e(function) \.
49a0: 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 hilo(*(unsigned
49b0: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
49c0: 69 6f 6e 20 2b 20 32 29 2c 20 5c 0a 20 20 20 20 ion + 2), \.
49d0: 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 *(unsigned sh
49e0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
49f0: 20 2b 20 36 29 2c 20 5c 0a 20 20 20 20 20 20 20 + 6), \.
4a00: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
4a10: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
4a20: 34 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 4), \. *(u
4a30: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
4a40: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 29 (function +22))
4a50: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 .#define tramp_d
4a60: 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ata(function) \
4a70: 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e . hilo(*(unsign
4a80: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
4a90: 63 74 69 6f 6e 20 2b 32 36 29 2c 20 5c 0a 20 20 ction +26), \.
4aa0: 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 *(unsigned
4ab0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
4ac0: 6f 6e 20 2b 33 30 29 2c 20 5c 0a 20 20 20 20 20 on +30), \.
4ad0: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f *(unsigned sho
4ae0: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
4af0: 2b 33 38 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a +38), \. *
4b00: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
4b10: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 36 *) (function +46
4b20: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 )).#endif.#ifdef
4b30: 20 5f 5f 6d 69 70 73 36 34 5f 5f 0a 20 20 2f 2a __mips64__. /*
4b40: 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 function:. *
4b50: 20 20 20 6c 64 20 24 32 2c 32 34 28 24 32 35 29 ld $2,24($25)
4b60: 09 09 09 44 46 20 32 32 20 30 30 20 31 38 0a 20 ...DF 22 00 18.
4b70: 20 20 2a 20 20 20 20 6c 64 20 24 33 2c 33 32 28 * ld $3,32(
4b80: 24 32 35 29 09 09 09 44 46 20 32 33 20 30 30 20 $25)...DF 23 00
4b90: 32 30 0a 20 20 20 2a 20 20 20 20 73 64 20 24 33 20. * sd $3
4ba0: 2c 30 28 24 32 29 09 09 09 46 43 20 34 33 20 30 ,0($2)...FC 43 0
4bb0: 30 20 30 30 0a 20 20 20 2a 20 20 20 20 6c 64 20 0 00. * ld
4bc0: 24 32 35 2c 34 30 28 24 32 35 29 09 09 09 44 46 $25,40($25)...DF
4bd0: 20 33 39 20 30 30 20 32 38 0a 20 20 20 2a 20 20 39 00 28. *
4be0: 20 20 6a 20 24 32 35 09 09 09 09 30 33 20 32 30 j $25....03 20
4bf0: 20 30 30 20 30 38 0a 20 20 20 2a 20 20 20 20 6e 00 08. * n
4c00: 6f 70 09 09 09 09 30 30 20 30 30 20 30 30 20 30 op....00 00 00 0
4c10: 30 0a 20 20 20 2a 20 20 20 20 2e 64 77 6f 72 64 0. * .dword
4c20: 20 3c 76 61 72 69 61 62 6c 65 3e 09 09 3c 76 61 <variable>..<va
4c30: 72 69 61 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 riable>. *
4c40: 2e 64 77 6f 72 64 20 3c 64 61 74 61 3e 09 09 09 .dword <data>...
4c50: 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 20 20 2e <data>. * .
4c60: 64 77 6f 72 64 20 3c 61 64 64 72 65 73 73 3e 09 dword <address>.
4c70: 09 3c 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f .<address>. */
4c80: 0a 20 20 2f 2a 20 57 68 61 74 20 61 62 6f 75 74 . /* What about
4c90: 20 62 69 67 20 65 6e 64 69 61 6e 20 2f 20 6c 69 big endian / li
4ca0: 74 74 6c 65 20 65 6e 64 69 61 6e 20 3f 3f 20 2a ttle endian ?? *
4cb0: 2f 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 20 /. *(long *)
4cc0: 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e (function
4cd0: 20 2b 20 30 29 20 3d 20 30 78 44 46 32 32 30 30 + 0) = 0xDF2200
4ce0: 31 38 44 46 32 33 30 30 32 30 4c 3b 0a 20 20 2a 18DF230020L;. *
4cf0: 28 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 20 20 (long *)
4d00: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 (function + 8)
4d10: 20 3d 20 30 78 46 43 34 33 30 30 30 30 44 46 33 = 0xFC430000DF3
4d20: 39 30 30 32 38 4c 3b 0a 20 20 2a 28 6c 6f 6e 67 90028L;. *(long
4d30: 20 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 75 *) (fu
4d40: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 nction +16) = 0x
4d50: 30 33 32 30 30 30 30 38 30 30 30 30 30 30 30 30 0320000800000000
4d60: 4c 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 L;. *(unsigned
4d70: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
4d80: 6e 20 2b 32 34 29 20 3d 20 28 75 6e 73 69 67 6e n +24) = (unsign
4d90: 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c ed long) variabl
4da0: 65 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 e;. *(unsigned
4db0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
4dc0: 6e 20 2b 33 32 29 20 3d 20 28 75 6e 73 69 67 6e n +32) = (unsign
4dd0: 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 3b 0a 20 ed long) data;.
4de0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 *(unsigned long
4df0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 *) (function +4
4e00: 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 0) = (unsigned l
4e10: 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a 23 64 ong) address;.#d
4e20: 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 efine is_tramp(f
4e30: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 unction) \. *(
4e40: 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 20 20 20 long *)
4e50: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 (function + 0)
4e60: 3d 3d 20 30 78 44 46 32 32 30 30 31 38 44 46 32 == 0xDF220018DF2
4e70: 33 30 30 32 30 4c 20 26 26 20 5c 0a 20 20 2a 28 30020L && \. *(
4e80: 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 20 20 20 long *)
4e90: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
4ea0: 3d 3d 20 30 78 46 43 34 33 30 30 30 30 44 46 33 == 0xFC430000DF3
4eb0: 39 30 30 32 38 4c 20 26 26 20 5c 0a 20 20 2a 28 90028L && \. *(
4ec0: 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 20 20 20 long *)
4ed0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 (function +16)
4ee0: 3d 3d 20 30 78 30 33 32 30 30 30 30 38 30 30 30 == 0x03200008000
4ef0: 30 30 30 30 30 4c 0a 23 64 65 66 69 6e 65 20 74 00000L.#define t
4f00: 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e ramp_address(fun
4f10: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e ction) \. *(un
4f20: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 28 signed long *) (
4f30: 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 0a 23 64 function +40).#d
4f40: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
4f50: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
4f60: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c \. *(unsigned l
4f70: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
4f80: 20 2b 32 34 29 0a 23 64 65 66 69 6e 65 20 74 72 +24).#define tr
4f90: 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f amp_data(functio
4fa0: 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e n) \. *(unsign
4fb0: 65 64 20 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 ed long *) (func
4fc0: 74 69 6f 6e 20 2b 33 32 29 0a 23 65 6e 64 69 66 tion +32).#endif
4fd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 .#if defined(__s
4fe0: 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 66 69 parc__) && !defi
4ff0: 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 ned(__sparc64__)
5000: 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a . /* function:.
5010: 20 20 20 2a 20 20 20 20 73 65 74 68 69 20 25 68 * sethi %h
5020: 69 28 3c 76 61 72 69 61 62 6c 65 3e 29 2c 25 67 i(<variable>),%g
5030: 31 09 30 33 30 30 30 30 30 30 20 7c 20 28 3c 76 1.03000000 | (<v
5040: 61 72 69 61 62 6c 65 3e 20 3e 3e 20 31 30 29 0a ariable> >> 10).
5050: 20 20 20 2a 20 20 20 20 73 65 74 68 69 20 25 68 * sethi %h
5060: 69 28 3c 64 61 74 61 3e 29 2c 25 67 32 09 09 30 i(<data>),%g2..0
5070: 35 30 30 30 30 30 30 20 7c 20 28 3c 64 61 74 61 5000000 | (<data
5080: 3e 20 3e 3e 20 31 30 29 0a 20 20 20 2a 20 20 20 > >> 10). *
5090: 20 6f 72 20 25 67 32 2c 25 6c 6f 28 3c 64 61 74 or %g2,%lo(<dat
50a0: 61 3e 29 2c 25 67 32 09 09 38 34 31 30 41 30 30 a>),%g2..8410A00
50b0: 30 20 7c 20 28 3c 64 61 74 61 3e 20 26 20 30 78 0 | (<data> & 0x
50c0: 33 66 66 29 0a 20 20 20 2a 20 20 20 20 73 74 20 3ff). * st
50d0: 25 67 32 2c 5b 25 67 31 2b 25 6c 6f 28 3c 76 61 %g2,[%g1+%lo(<va
50e0: 72 69 61 62 6c 65 3e 29 5d 09 43 34 32 30 36 30 riable>)].C42060
50f0: 30 30 20 7c 20 28 3c 76 61 72 69 61 62 6c 65 3e 00 | (<variable>
5100: 20 26 20 30 78 33 66 66 29 0a 20 20 20 2a 20 20 & 0x3ff). *
5110: 20 20 73 65 74 68 69 20 25 68 69 28 3c 61 64 64 sethi %hi(<add
5120: 72 65 73 73 3e 29 2c 25 67 31 09 30 33 30 30 30 ress>),%g1.03000
5130: 30 30 30 20 7c 20 28 3c 61 64 64 72 65 73 73 3e 000 | (<address>
5140: 20 3e 3e 20 31 30 29 0a 20 20 20 2a 20 20 20 20 >> 10). *
5150: 6a 6d 70 20 25 67 31 2b 25 6c 6f 28 3c 61 64 64 jmp %g1+%lo(<add
5160: 72 65 73 73 3e 29 09 09 38 31 43 30 36 30 30 30 ress>)..81C06000
5170: 20 7c 20 28 3c 61 64 64 72 65 73 73 3e 20 26 20 | (<address> &
5180: 30 78 33 66 66 29 0a 20 20 20 2a 20 20 20 20 6e 0x3ff). * n
5190: 6f 70 09 09 09 09 30 31 30 30 30 30 30 30 0a 20 op....01000000.
51a0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 68 69 28 */.#define hi(
51b0: 77 6f 72 64 29 20 20 28 28 75 6e 73 69 67 6e 65 word) ((unsigne
51c0: 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 29 20 3e d long) (word) >
51d0: 3e 20 31 30 29 0a 23 64 65 66 69 6e 65 20 6c 6f > 10).#define lo
51e0: 28 77 6f 72 64 29 20 20 28 28 75 6e 73 69 67 6e (word) ((unsign
51f0: 65 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 29 20 ed long) (word)
5200: 26 20 30 78 33 66 66 29 0a 20 20 2a 28 6c 6f 6e & 0x3ff). *(lon
5210: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
5220: 20 30 29 20 3d 20 30 78 30 33 30 30 30 30 30 30 0) = 0x03000000
5230: 20 7c 20 68 69 28 76 61 72 69 61 62 6c 65 29 3b | hi(variable);
5240: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
5250: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 nction + 4) = 0x
5260: 30 35 30 30 30 30 30 30 20 7c 20 68 69 28 64 61 05000000 | hi(da
5270: 74 61 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 ta);. *(long *)
5280: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
5290: 3d 20 30 78 38 34 31 30 41 30 30 30 20 7c 20 6c = 0x8410A000 | l
52a0: 6f 28 64 61 74 61 29 3b 0a 20 20 2a 28 6c 6f 6e o(data);. *(lon
52b0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
52c0: 31 32 29 20 3d 20 30 78 43 34 32 30 36 30 30 30 12) = 0xC4206000
52d0: 20 7c 20 6c 6f 28 76 61 72 69 61 62 6c 65 29 3b | lo(variable);
52e0: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
52f0: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 nction +16) = 0x
5300: 30 33 30 30 30 30 30 30 20 7c 20 68 69 28 61 64 03000000 | hi(ad
5310: 64 72 65 73 73 29 3b 0a 20 20 2a 28 6c 6f 6e 67 dress);. *(long
5320: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
5330: 30 29 20 3d 20 30 78 38 31 43 30 36 30 30 30 20 0) = 0x81C06000
5340: 7c 20 6c 6f 28 61 64 64 72 65 73 73 29 3b 0a 20 | lo(address);.
5350: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
5360: 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 78 30 31 tion +24) = 0x01
5370: 30 30 30 30 30 30 3b 0a 23 64 65 66 69 6e 65 20 000000;.#define
5380: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
5390: 6e 29 20 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 n) \. (*(long
53a0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
53b0: 29 20 26 20 30 78 66 66 63 30 30 30 30 30 29 20 ) & 0xffc00000)
53c0: 3d 3d 20 30 78 30 33 30 30 30 30 30 30 20 26 26 == 0x03000000 &&
53d0: 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 \. (*(long *)
53e0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 26 (function + 4) &
53f0: 20 30 78 66 66 63 30 30 30 30 30 29 20 3d 3d 20 0xffc00000) ==
5400: 30 78 30 35 30 30 30 30 30 30 20 26 26 20 5c 0a 0x05000000 && \.
5410: 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 (*(long *) (fu
5420: 6e 63 74 69 6f 6e 20 2b 20 38 29 20 26 20 30 78 nction + 8) & 0x
5430: 66 66 66 66 66 63 30 30 29 20 3d 3d 20 30 78 38 fffffc00) == 0x8
5440: 34 31 30 41 30 30 30 20 26 26 20 5c 0a 20 20 28 410A000 && \. (
5450: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
5460: 69 6f 6e 20 2b 31 32 29 20 26 20 30 78 66 66 66 ion +12) & 0xfff
5470: 66 66 63 30 30 29 20 3d 3d 20 30 78 43 34 32 30 ffc00) == 0xC420
5480: 36 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6000 && \. (*(l
5490: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
54a0: 20 2b 31 36 29 20 26 20 30 78 66 66 63 30 30 30 +16) & 0xffc000
54b0: 30 30 29 20 3d 3d 20 30 78 30 33 30 30 30 30 30 00) == 0x0300000
54c0: 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 0 && \. (*(long
54d0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
54e0: 30 29 20 26 20 30 78 66 66 66 66 66 63 30 30 29 0) & 0xfffffc00)
54f0: 20 3d 3d 20 30 78 38 31 43 30 36 30 30 30 20 26 == 0x81C06000 &
5500: 26 20 5c 0a 20 20 20 2a 28 6c 6f 6e 67 20 2a 29 & \. *(long *)
5510: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 (function +24)
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d ==
5530: 20 30 78 30 31 30 30 30 30 30 30 0a 23 64 65 66 0x01000000.#def
5540: 69 6e 65 20 68 69 6c 6f 28 68 69 77 6f 72 64 2c ine hilo(hiword,
5550: 6c 6f 77 6f 72 64 29 20 20 28 28 28 68 69 77 6f loword) (((hiwo
5560: 72 64 29 20 3c 3c 20 31 30 29 20 7c 20 28 28 6c rd) << 10) | ((l
5570: 6f 77 6f 72 64 29 20 26 20 30 78 33 66 66 29 29 oword) & 0x3ff))
5580: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
5590: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
55a0: 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e \. hilo(*(lon
55b0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
55c0: 31 36 29 2c 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 16), *(long *) (
55d0: 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 29 0a 23 function +20)).#
55e0: 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 define tramp_var
55f0: 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 iable(function)
5600: 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e 67 \. hilo(*(long
5610: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
5620: 30 29 2c 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 0), *(long *) (f
5630: 75 6e 63 74 69 6f 6e 20 2b 31 32 29 29 0a 23 64 unction +12)).#d
5640: 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 efine tramp_data
5650: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
5660: 68 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 hilo(*(long *) (
5670: 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 2c 20 2a function + 4), *
5680: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
5690: 6f 6e 20 2b 20 38 29 29 0a 23 65 6e 64 69 66 0a on + 8)).#endif.
56a0: 23 69 66 64 65 66 20 5f 5f 73 70 61 72 63 36 34 #ifdef __sparc64
56b0: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
56c0: 3a 0a 20 20 20 2a 20 20 20 20 72 64 20 25 70 63 :. * rd %pc
56d0: 2c 25 67 31 09 09 09 38 33 34 31 34 30 30 30 0a ,%g1...83414000.
56e0: 20 20 20 2a 20 20 20 20 6c 64 78 20 5b 25 67 31 * ldx [%g1
56f0: 2b 32 34 5d 2c 25 67 32 09 09 43 34 35 38 36 30 +24],%g2..C45860
5700: 31 38 0a 20 20 20 2a 20 20 20 20 6c 64 78 20 5b 18. * ldx [
5710: 25 67 31 2b 33 32 5d 2c 25 67 33 09 09 43 36 35 %g1+32],%g3..C65
5720: 38 36 30 32 30 0a 20 20 20 2a 20 20 20 20 6c 64 86020. * ld
5730: 78 20 5b 25 67 31 2b 34 30 5d 2c 25 67 31 09 09 x [%g1+40],%g1..
5740: 43 32 35 38 36 30 32 38 0a 20 20 20 2a 20 20 20 C2586028. *
5750: 20 6a 6d 70 20 25 67 31 09 09 09 09 38 31 43 30 jmp %g1....81C0
5760: 34 30 30 30 0a 20 20 20 2a 20 20 20 20 73 74 78 4000. * stx
5770: 20 25 67 33 2c 5b 25 67 32 5d 09 09 09 43 36 37 %g3,[%g2]...C67
5780: 30 38 30 30 30 0a 20 20 20 2a 20 20 20 20 2e 6c 08000. * .l
5790: 6f 6e 67 20 68 69 67 68 33 32 28 3c 76 61 72 69 ong high32(<vari
57a0: 61 62 6c 65 3e 29 09 3c 76 61 72 69 61 62 6c 65 able>).<variable
57b0: 3e 20 3e 3e 20 33 32 0a 20 20 20 2a 20 20 20 20 > >> 32. *
57c0: 2e 6c 6f 6e 67 20 6c 6f 77 33 32 28 3c 76 61 72 .long low32(<var
57d0: 69 61 62 6c 65 3e 29 09 09 3c 76 61 72 69 61 62 iable>)..<variab
57e0: 6c 65 3e 20 26 20 30 78 66 66 66 66 66 66 66 66 le> & 0xffffffff
57f0: 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 68 . * .long h
5800: 69 67 68 33 32 28 3c 64 61 74 61 3e 29 09 09 3c igh32(<data>)..<
5810: 64 61 74 61 3e 20 3e 3e 20 33 32 0a 20 20 20 2a data> >> 32. *
5820: 20 20 20 20 2e 6c 6f 6e 67 20 6c 6f 77 33 32 28 .long low32(
5830: 3c 64 61 74 61 3e 29 09 09 3c 64 61 74 61 3e 20 <data>)..<data>
5840: 26 20 30 78 66 66 66 66 66 66 66 66 0a 20 20 20 & 0xffffffff.
5850: 2a 20 20 20 20 2e 6c 6f 6e 67 20 68 69 67 68 33 * .long high3
5860: 32 28 3c 61 64 64 72 65 73 73 3e 29 09 09 3c 61 2(<address>)..<a
5870: 64 64 72 65 73 73 3e 20 3e 3e 20 33 32 0a 20 20 ddress> >> 32.
5880: 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 6c 6f 77 33 * .long low3
5890: 32 28 3c 61 64 64 72 65 73 73 3e 29 09 09 3c 61 2(<address>)..<a
58a0: 64 64 72 65 73 73 3e 20 26 20 30 78 66 66 66 66 ddress> & 0xffff
58b0: 66 66 66 66 0a 20 20 20 2a 2f 0a 20 20 2a 28 69 ffff. */. *(i
58c0: 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e nt *) (function
58d0: 20 2b 20 30 29 20 3d 20 30 78 38 33 34 31 34 30 + 0) = 0x834140
58e0: 30 30 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 00;. *(int *)
58f0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
5900: 20 30 78 43 34 35 38 36 30 31 38 3b 0a 20 20 2a 0xC4586018;. *
5910: 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 69 (int *) (functi
5920: 6f 6e 20 2b 20 38 29 20 3d 20 30 78 43 36 35 38 on + 8) = 0xC658
5930: 36 30 32 30 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 6020;. *(int *)
5940: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 (function +12)
5950: 20 3d 20 30 78 43 32 35 38 36 30 32 38 3b 0a 20 = 0xC2586028;.
5960: 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 *(int *) (func
5970: 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 38 31 tion +16) = 0x81
5980: 43 30 34 30 30 30 3b 0a 20 20 2a 28 69 6e 74 20 C04000;. *(int
5990: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
59a0: 30 29 20 3d 20 30 78 43 36 37 30 38 30 30 30 3b 0) = 0xC6708000;
59b0: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
59c0: 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 28 6c nction +24) = (l
59d0: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 ong) variable;.
59e0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
59f0: 74 69 6f 6e 20 2b 33 32 29 20 3d 20 28 6c 6f 6e tion +32) = (lon
5a00: 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 6c 6f 6e g) data;. *(lon
5a10: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
5a20: 34 30 29 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 40) = (long) add
5a30: 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 20 69 73 ress;.#define is
5a40: 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 _tramp(function)
5a50: 20 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 \. *(int *)
5a60: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d (function + 0) =
5a70: 3d 20 30 78 38 33 34 31 34 30 30 30 20 26 26 20 = 0x83414000 &&
5a80: 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 \. *(int *) (f
5a90: 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d 20 unction + 4) ==
5aa0: 30 78 43 34 35 38 36 30 31 38 20 26 26 20 5c 0a 0xC4586018 && \.
5ab0: 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e *(int *) (fun
5ac0: 63 74 69 6f 6e 20 2b 20 38 29 20 3d 3d 20 30 78 ction + 8) == 0x
5ad0: 43 36 35 38 36 30 32 30 20 26 26 20 5c 0a 20 20 C6586020 && \.
5ae0: 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 *(int *) (funct
5af0: 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 43 32 ion +12) == 0xC2
5b00: 35 38 36 30 32 38 20 26 26 20 5c 0a 20 20 2a 28 586028 && \. *(
5b10: 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 69 6f int *) (functio
5b20: 6e 20 2b 31 36 29 20 3d 3d 20 30 78 38 31 43 30 n +16) == 0x81C0
5b30: 34 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 69 6e 4000 && \. *(in
5b40: 74 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 t *) (function
5b50: 2b 32 30 29 20 3d 3d 20 30 78 43 36 37 30 38 30 +20) == 0xC67080
5b60: 30 30 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 00.#define tramp
5b70: 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f _address(functio
5b80: 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a n) \. *(long *
5b90: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 ) (function +40)
5ba0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 .#define tramp_v
5bb0: 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e ariable(function
5bc0: 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 ) \. *(long *)
5bd0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 0a (function +24).
5be0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
5bf0: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
5c00: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
5c10: 63 74 69 6f 6e 20 2b 33 32 29 0a 23 65 6e 64 69 ction +32).#endi
5c20: 66 0a 23 69 66 64 65 66 20 5f 5f 61 6c 70 68 61 f.#ifdef __alpha
5c30: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
5c40: 3a 0a 20 20 20 2a 20 20 20 20 62 72 20 24 31 2c :. * br $1,
5c50: 66 75 6e 63 74 69 6f 6e 2e 2e 6e 67 09 30 30 20 function..ng.00
5c60: 30 30 20 32 30 20 43 30 0a 20 20 20 2a 20 66 75 00 20 C0. * fu
5c70: 6e 63 74 69 6f 6e 2e 2e 6e 67 3a 0a 20 20 20 2a nction..ng:. *
5c80: 20 20 20 20 6c 64 71 20 24 32 2c 32 30 28 24 31 ldq $2,20($1
5c90: 29 09 09 31 34 20 30 30 20 34 31 20 41 34 0a 20 )..14 00 41 A4.
5ca0: 20 20 2a 20 20 20 20 6c 64 71 20 24 33 2c 32 38 * ldq $3,28
5cb0: 28 24 31 29 09 09 31 43 20 30 30 20 36 31 20 41 ($1)..1C 00 61 A
5cc0: 34 0a 20 20 20 2a 20 20 20 20 6c 64 71 20 24 32 4. * ldq $2
5cd0: 37 2c 33 36 28 24 31 29 09 09 32 34 20 30 30 20 7,36($1)..24 00
5ce0: 36 31 20 41 37 0a 20 20 20 2a 20 20 20 20 73 74 61 A7. * st
5cf0: 71 20 24 32 2c 30 28 24 33 29 09 09 30 30 20 30 q $2,0($3)..00 0
5d00: 30 20 34 33 20 42 34 0a 20 20 20 2a 20 20 20 20 0 43 B4. *
5d10: 6a 6d 70 20 24 33 31 2c 28 24 32 37 29 2c 30 09 jmp $31,($27),0.
5d20: 09 30 30 20 30 30 20 46 42 20 36 42 0a 20 20 20 .00 00 FB 6B.
5d30: 2a 20 20 20 20 2e 71 75 61 64 20 3c 64 61 74 61 * .quad <data
5d40: 3e 09 09 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 >..<data>. *
5d50: 20 20 2e 71 75 61 64 20 3c 76 61 72 69 61 62 6c .quad <variabl
5d60: 65 3e 09 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 e>.<variable>.
5d70: 20 2a 20 20 20 20 2e 71 75 61 64 20 3c 61 64 64 * .quad <add
5d80: 72 65 73 73 3e 09 09 3c 61 64 64 72 65 73 73 3e ress>..<address>
5d90: 0a 20 20 20 2a 2f 0a 20 20 7b 20 73 74 61 74 69 . */. { stati
5da0: 63 20 69 6e 74 20 63 6f 64 65 20 5b 36 5d 20 3d c int code [6] =
5db0: 0a 20 20 20 20 20 20 7b 20 30 78 43 30 32 30 30 . { 0xC0200
5dc0: 30 30 30 2c 20 30 78 41 34 34 31 30 30 31 34 2c 000, 0xA4410014,
5dd0: 20 30 78 41 34 36 31 30 30 31 43 2c 20 30 78 41 0xA461001C, 0xA
5de0: 37 36 31 30 30 32 34 2c 20 30 78 42 34 34 33 30 7610024, 0xB4430
5df0: 30 30 30 2c 20 30 78 36 42 46 42 30 30 30 30 20 000, 0x6BFB0000
5e00: 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 };. int i;.
5e10: 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 3c 36 3b for (i=0; i<6;
5e20: 20 69 2b 2b 29 20 7b 20 28 28 69 6e 74 20 2a 29 i++) { ((int *)
5e30: 20 66 75 6e 63 74 69 6f 6e 29 5b 69 5d 20 3d 20 function)[i] =
5e40: 63 6f 64 65 5b 69 5d 3b 20 7d 0a 20 20 20 20 28 code[i]; }. (
5e50: 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f (long *) functio
5e60: 6e 29 5b 33 5d 20 3d 20 28 6c 6f 6e 67 29 20 64 n)[3] = (long) d
5e70: 61 74 61 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 20 ata;. ((long
5e80: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d 20 *) function)[4]
5e90: 3d 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c = (long) variabl
5ea0: 65 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a 29 e;. ((long *)
5eb0: 20 66 75 6e 63 74 69 6f 6e 29 5b 35 5d 20 3d 20 function)[5] =
5ec0: 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a (long) address;.
5ed0: 20 20 7d 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 }.#define is_t
5ee0: 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 ramp(function)
5ef0: 5c 0a 20 20 28 28 69 6e 74 20 2a 29 20 66 75 6e \. ((int *) fun
5f00: 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 30 78 43 ction)[0] == 0xC
5f10: 30 32 30 30 30 30 30 20 26 26 20 5c 0a 20 20 28 0200000 && \. (
5f20: 28 69 6e 74 20 2a 29 20 66 75 6e 63 74 69 6f 6e (int *) function
5f30: 29 5b 31 5d 20 3d 3d 20 30 78 41 34 34 31 30 30 )[1] == 0xA44100
5f40: 31 34 20 26 26 20 5c 0a 20 20 28 28 69 6e 74 20 14 && \. ((int
5f50: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 32 5d 20 *) function)[2]
5f60: 3d 3d 20 30 78 41 34 36 31 30 30 31 43 20 26 26 == 0xA461001C &&
5f70: 20 5c 0a 20 20 28 28 69 6e 74 20 2a 29 20 66 75 \. ((int *) fu
5f80: 6e 63 74 69 6f 6e 29 5b 33 5d 20 3d 3d 20 30 78 nction)[3] == 0x
5f90: 41 37 36 31 30 30 32 34 20 26 26 20 5c 0a 20 20 A7610024 && \.
5fa0: 28 28 69 6e 74 20 2a 29 20 66 75 6e 63 74 69 6f ((int *) functio
5fb0: 6e 29 5b 34 5d 20 3d 3d 20 30 78 42 34 34 33 30 n)[4] == 0xB4430
5fc0: 30 30 30 20 26 26 20 5c 0a 20 20 28 28 69 6e 74 000 && \. ((int
5fd0: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 35 5d *) function)[5]
5fe0: 20 3d 3d 20 30 78 36 42 46 42 30 30 30 30 0a 23 == 0x6BFB0000.#
5ff0: 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 define tramp_add
6000: 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 ress(function)
6010: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
6020: 6e 63 74 69 6f 6e 29 5b 35 5d 0a 23 64 65 66 69 nction)[5].#defi
6030: 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c ne tramp_variabl
6040: 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 e(function) \.
6050: 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 ((long *) funct
6060: 69 6f 6e 29 5b 34 5d 0a 23 64 65 66 69 6e 65 20 ion)[4].#define
6070: 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 tramp_data(funct
6080: 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 ion) \. ((long
6090: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d *) function)[3]
60a0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
60b0: 5f 68 70 70 61 6f 6c 64 5f 5f 0a 20 20 2f 2a 20 _hppaold__. /*
60c0: 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 function:. *
60d0: 20 20 6c 64 69 6c 20 4c 27 3c 64 61 74 61 3e 2c ldil L'<data>,
60e0: 25 72 32 30 09 09 32 32 38 30 30 30 30 30 20 7c %r20..22800000 |
60f0: 20 68 69 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a hi(<data>). *
6100: 20 20 20 20 6c 64 69 6c 20 4c 27 3c 76 61 72 69 ldil L'<vari
6110: 61 62 6c 65 3e 2c 25 72 31 39 09 09 32 32 36 30 able>,%r19..2260
6120: 30 30 30 30 20 7c 20 68 69 28 3c 76 61 72 69 61 0000 | hi(<varia
6130: 62 6c 65 3e 29 0a 20 20 20 2a 20 20 20 20 6c 64 ble>). * ld
6140: 6f 20 52 27 3c 64 61 74 61 3e 28 25 72 32 30 29 o R'<data>(%r20)
6150: 2c 25 72 32 30 09 09 33 36 39 34 30 30 30 30 20 ,%r20..36940000
6160: 7c 20 6c 6f 28 3c 64 61 74 61 3e 29 0a 20 20 20 | lo(<data>).
6170: 2a 20 20 20 20 73 74 77 20 25 72 32 30 2c 52 27 * stw %r20,R'
6180: 3c 76 61 72 69 61 62 6c 65 3e 28 25 72 31 39 29 <variable>(%r19)
6190: 09 36 41 37 34 30 30 30 30 20 7c 20 6c 6f 28 3c .6A740000 | lo(<
61a0: 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 variable>). *
61b0: 20 20 20 6c 64 69 6c 20 4c 27 3c 61 64 64 72 65 ldil L'<addre
61c0: 73 73 3e 2c 25 72 32 31 09 09 32 32 41 30 30 30 ss>,%r21..22A000
61d0: 30 30 20 7c 20 68 69 28 3c 61 64 64 72 65 73 73 00 | hi(<address
61e0: 3e 29 0a 20 20 20 2a 20 20 20 20 6c 64 6f 20 52 >). * ldo R
61f0: 27 3c 61 64 64 72 65 73 73 3e 28 25 72 32 31 29 '<address>(%r21)
6200: 2c 25 72 32 31 09 33 36 42 35 30 30 30 30 20 7c ,%r21.36B50000 |
6210: 20 6c 6f 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 lo(<address>).
6220: 20 20 2a 20 20 20 20 62 62 2c 3e 3d 2c 6e 20 25 * bb,>=,n %
6230: 72 32 31 2c 33 30 2c 66 75 6e 63 74 69 6f 6e 32 r21,30,function2
6240: 09 43 37 44 35 43 30 31 32 0a 20 20 20 2a 20 20 .C7D5C012. *
6250: 20 20 64 65 70 69 20 30 2c 33 31 2c 32 2c 25 72 depi 0,31,2,%r
6260: 32 31 09 09 44 36 41 30 31 43 31 45 0a 20 20 20 21..D6A01C1E.
6270: 2a 20 20 20 20 6c 64 77 20 34 28 30 2c 25 72 32 * ldw 4(0,%r2
6280: 31 29 2c 25 72 31 39 09 09 34 41 42 33 30 30 30 1),%r19..4AB3000
6290: 38 0a 20 20 20 2a 20 20 20 20 6c 64 77 20 30 28 8. * ldw 0(
62a0: 30 2c 25 72 32 31 29 2c 25 72 32 31 09 09 34 41 0,%r21),%r21..4A
62b0: 42 35 30 30 30 30 0a 20 20 20 2a 20 66 75 6e 63 B50000. * func
62c0: 74 69 6f 6e 32 3a 0a 20 20 20 2a 20 20 20 20 6c tion2:. * l
62d0: 64 73 69 64 20 28 30 2c 25 72 32 31 29 2c 25 72 dsid (0,%r21),%r
62e0: 31 09 09 30 32 41 30 31 30 41 31 0a 20 20 20 2a 1..02A010A1. *
62f0: 20 20 20 20 6d 74 73 70 20 25 72 31 2c 25 73 72 mtsp %r1,%sr
6300: 30 09 09 09 30 30 30 31 31 38 32 30 0a 20 20 20 0...00011820.
6310: 2a 20 20 20 20 62 65 2c 6e 20 30 28 25 73 72 30 * be,n 0(%sr0
6320: 2c 25 72 32 31 29 09 09 45 32 41 30 30 30 30 32 ,%r21)..E2A00002
6330: 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 09 09 09 . * nop....
6340: 30 38 30 30 30 32 34 30 0a 20 20 20 2a 2f 0a 20 08000240. */.
6350: 20 2f 2a 20 57 68 65 6e 20 64 65 63 6f 64 69 6e /* When decodin
6360: 67 20 61 20 32 31 2d 62 69 74 20 61 72 67 75 6d g a 21-bit argum
6370: 65 6e 74 20 69 6e 20 61 6e 20 69 6e 73 74 72 75 ent in an instru
6380: 63 74 69 6f 6e 2c 20 74 68 65 20 68 70 70 61 20 ction, the hppa
6390: 70 65 72 66 6f 72 6d 73 0a 20 20 20 2a 20 74 68 performs. * th
63a0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 69 74 20 e following bit
63b0: 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 3a 0a 20 20 manipulation:.
63c0: 20 2a 20 61 73 73 65 6d 62 6c 65 32 31 3a 20 78 * assemble21: x
63d0: 5b 32 30 5d 2e 2e 2e 78 5b 30 5d 0a 20 20 20 2a [20]...x[0]. *
63e0: 20 20 20 20 20 20 20 2d 2d 3e 20 78 5b 30 5d 20 --> x[0]
63f0: 78 5b 31 31 5d 2e 2e 2e 78 5b 31 5d 20 78 5b 31 x[11]...x[1] x[1
6400: 35 5d 2e 2e 78 5b 31 34 5d 20 78 5b 32 30 5d 2e 5]..x[14] x[20].
6410: 2e 2e 78 5b 31 36 5d 20 78 5b 31 33 5d 2e 2e 78 ..x[16] x[13]..x
6420: 5b 31 32 5d 0a 20 20 20 2a 20 57 68 65 6e 20 65 [12]. * When e
6430: 6e 63 6f 64 69 6e 67 20 61 20 32 31 2d 62 69 74 ncoding a 21-bit
6440: 20 61 72 67 75 6d 65 6e 74 20 69 6e 74 6f 20 61 argument into a
6450: 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 77 n instruction, w
6460: 65 20 6e 65 65 64 20 74 68 65 0a 20 20 20 2a 20 e need the. *
6470: 74 6f 20 70 65 72 66 6f 72 6d 20 74 68 65 20 72 to perform the r
6480: 65 76 65 72 73 65 20 70 65 72 6d 75 74 61 74 69 everse permutati
6490: 6f 6e 3a 0a 20 20 20 2a 20 70 65 72 6d 75 74 65 on:. * permute
64a0: 32 31 3a 20 20 79 5b 32 30 5d 2e 2e 2e 79 5b 30 21: y[20]...y[0
64b0: 5d 0a 20 20 20 2a 20 20 20 20 20 20 20 2d 2d 3e ]. * -->
64c0: 20 79 5b 36 5d 2e 2e 2e 79 5b 32 5d 20 79 5b 38 y[6]...y[2] y[8
64d0: 5d 2e 2e 79 5b 37 5d 20 79 5b 31 5d 2e 2e 79 5b ]..y[7] y[1]..y[
64e0: 30 5d 20 79 5b 31 39 5d 2e 2e 2e 79 5b 39 5d 20 0] y[19]...y[9]
64f0: 79 5b 32 30 5d 0a 20 20 20 2a 2f 0a 23 64 65 66 y[20]. */.#def
6500: 69 6e 65 20 61 73 73 65 6d 62 6c 65 32 31 28 78 ine assemble21(x
6510: 29 20 20 5c 0a 20 20 28 28 28 28 78 29 20 26 20 ) \. ((((x) &
6520: 30 78 31 29 20 3c 3c 20 32 30 29 20 7c 20 28 28 0x1) << 20) | ((
6530: 28 78 29 20 26 20 30 78 46 46 45 29 20 3c 3c 20 (x) & 0xFFE) <<
6540: 38 29 20 7c 20 5c 0a 20 20 20 28 28 28 78 29 20 8) | \. (((x)
6550: 26 20 30 78 43 30 30 30 29 20 3e 3e 20 37 29 20 & 0xC000) >> 7)
6560: 7c 20 28 28 28 78 29 20 26 20 30 78 31 46 30 30 | (((x) & 0x1F00
6570: 30 30 29 20 3e 3e 20 31 34 29 20 7c 20 28 28 28 00) >> 14) | (((
6580: 78 29 20 26 20 30 78 33 30 30 30 29 20 3e 3e 20 x) & 0x3000) >>
6590: 31 32 29 29 0a 23 64 65 66 69 6e 65 20 70 65 72 12)).#define per
65a0: 6d 75 74 65 32 31 28 79 29 20 20 5c 0a 20 20 28 mute21(y) \. (
65b0: 28 28 28 79 29 20 26 20 30 78 37 43 29 20 3c 3c (((y) & 0x7C) <<
65c0: 20 31 34 29 20 7c 20 28 28 28 79 29 20 26 20 30 14) | (((y) & 0
65d0: 78 31 38 30 29 20 3c 3c 20 37 29 20 7c 20 28 28 x180) << 7) | ((
65e0: 28 79 29 20 26 20 30 78 33 29 20 3c 3c 20 31 32 (y) & 0x3) << 12
65f0: 29 20 7c 20 5c 0a 20 20 20 28 28 28 79 29 20 26 ) | \. (((y) &
6600: 20 30 78 46 46 45 30 30 29 20 3e 3e 20 38 29 20 0xFFE00) >> 8)
6610: 7c 20 28 28 28 79 29 20 26 20 30 78 31 30 30 30 | (((y) & 0x1000
6620: 30 30 29 20 3e 3e 20 32 30 29 29 0a 23 64 65 66 00) >> 20)).#def
6630: 69 6e 65 20 68 69 28 77 6f 72 64 29 20 20 70 65 ine hi(word) pe
6640: 72 6d 75 74 65 32 31 28 28 75 6e 73 69 67 6e 65 rmute21((unsigne
6650: 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 29 20 3e d long) (word) >
6660: 3e 20 31 31 29 0a 23 64 65 66 69 6e 65 20 6c 6f > 11).#define lo
6670: 28 77 6f 72 64 29 20 20 28 28 28 75 6e 73 69 67 (word) (((unsig
6680: 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 29 ned long) (word)
6690: 20 26 20 30 78 37 46 46 29 20 3c 3c 20 31 29 0a & 0x7FF) << 1).
66a0: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
66b0: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 32 ction + 0) = 0x2
66c0: 32 38 30 30 30 30 30 20 7c 20 68 69 28 64 61 74 2800000 | hi(dat
66d0: 61 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 a);. *(long *)
66e0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
66f0: 20 30 78 32 32 36 30 30 30 30 30 20 7c 20 68 69 0x22600000 | hi
6700: 28 76 61 72 69 61 62 6c 65 29 3b 0a 20 20 2a 28 (variable);. *(
6710: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
6720: 6e 20 2b 20 38 29 20 3d 20 30 78 33 36 39 34 30 n + 8) = 0x36940
6730: 30 30 30 20 7c 20 6c 6f 28 64 61 74 61 29 3b 0a 000 | lo(data);.
6740: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
6750: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 78 36 ction +12) = 0x6
6760: 41 37 34 30 30 30 30 20 7c 20 6c 6f 28 76 61 72 A740000 | lo(var
6770: 69 61 62 6c 65 29 3b 0a 20 20 2a 28 6c 6f 6e 67 iable);. *(long
6780: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
6790: 36 29 20 3d 20 30 78 32 32 41 30 30 30 30 30 20 6) = 0x22A00000
67a0: 7c 20 68 69 28 61 64 64 72 65 73 73 29 3b 0a 20 | hi(address);.
67b0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
67c0: 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 33 36 tion +20) = 0x36
67d0: 42 35 30 30 30 30 20 7c 20 6c 6f 28 61 64 64 72 B50000 | lo(addr
67e0: 65 73 73 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a ess);. *(long *
67f0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 ) (function +24)
6800: 20 3d 20 30 78 43 37 44 35 43 30 31 32 3b 0a 20 = 0xC7D5C012;.
6810: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
6820: 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 78 44 36 tion +28) = 0xD6
6830: 41 30 31 43 31 45 3b 0a 20 20 2a 28 6c 6f 6e 67 A01C1E;. *(long
6840: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 *) (function +3
6850: 32 29 20 3d 20 30 78 34 41 42 33 30 30 30 38 3b 2) = 0x4AB30008;
6860: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
6870: 6e 63 74 69 6f 6e 20 2b 33 36 29 20 3d 20 30 78 nction +36) = 0x
6880: 34 41 42 35 30 30 30 30 3b 0a 20 20 2a 28 6c 6f 4AB50000;. *(lo
6890: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
68a0: 2b 34 30 29 20 3d 20 30 78 30 32 41 30 31 30 41 +40) = 0x02A010A
68b0: 31 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 1;. *(long *) (
68c0: 66 75 6e 63 74 69 6f 6e 20 2b 34 34 29 20 3d 20 function +44) =
68d0: 30 78 30 30 30 31 31 38 32 30 3b 0a 20 20 2a 28 0x00011820;. *(
68e0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
68f0: 6e 20 2b 34 38 29 20 3d 20 30 78 45 32 41 30 30 n +48) = 0xE2A00
6900: 30 30 32 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 002;. *(long *)
6910: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 32 29 20 (function +52)
6920: 3d 20 30 78 30 38 30 30 30 32 34 30 3b 0a 23 64 = 0x08000240;.#d
6930: 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 efine is_tramp(f
6940: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 unction) \. ((
6950: 6c 6f 6e 67 29 20 66 75 6e 63 74 69 6f 6e 20 26 long) function &
6960: 20 33 29 20 3d 3d 20 30 20 26 26 20 5c 0a 20 20 3) == 0 && \.
6970: 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 (*(long *) (func
6980: 74 69 6f 6e 20 2b 20 30 29 20 26 20 30 78 66 66 tion + 0) & 0xff
6990: 65 30 30 30 30 30 29 20 3d 3d 20 30 78 32 32 38 e00000) == 0x228
69a0: 30 30 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 00000 && \. (*(
69b0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
69c0: 6e 20 2b 20 34 29 20 26 20 30 78 66 66 65 30 30 n + 4) & 0xffe00
69d0: 30 30 30 29 20 3d 3d 20 30 78 32 32 36 30 30 30 000) == 0x226000
69e0: 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 00 && \. (*(lon
69f0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6a00: 20 38 29 20 26 20 30 78 66 66 66 66 66 30 30 30 8) & 0xfffff000
6a10: 29 20 3d 3d 20 30 78 33 36 39 34 30 30 30 30 20 ) == 0x36940000
6a20: 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a && \. (*(long *
6a30: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 ) (function +12)
6a40: 20 26 20 30 78 66 66 66 66 66 30 30 30 29 20 3d & 0xfffff000) =
6a50: 3d 20 30 78 36 41 37 34 30 30 30 30 20 26 26 20 = 0x6A740000 &&
6a60: 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 \. (*(long *) (
6a70: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 26 20 function +16) &
6a80: 30 78 66 66 65 30 30 30 30 30 29 20 3d 3d 20 30 0xffe00000) == 0
6a90: 78 32 32 41 30 30 30 30 30 20 26 26 20 5c 0a 20 x22A00000 && \.
6aa0: 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e (*(long *) (fun
6ab0: 63 74 69 6f 6e 20 2b 32 30 29 20 26 20 30 78 66 ction +20) & 0xf
6ac0: 66 66 66 66 30 30 30 29 20 3d 3d 20 30 78 33 36 ffff000) == 0x36
6ad0: 42 35 30 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 B50000 && \. *(
6ae0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
6af0: 6e 20 2b 32 34 29 20 3d 3d 20 30 78 43 37 44 35 n +24) == 0xC7D5
6b00: 43 30 31 32 20 26 26 20 5c 0a 20 20 2a 28 6c 6f C012 && \. *(lo
6b10: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6b20: 2b 32 38 29 20 3d 3d 20 30 78 44 36 41 30 31 43 +28) == 0xD6A01C
6b30: 31 45 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 1E && \. *(long
6b40: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 *) (function +3
6b50: 32 29 20 3d 3d 20 30 78 34 41 42 33 30 30 30 38 2) == 0x4AB30008
6b60: 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a && \. *(long *
6b70: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 36 29 ) (function +36)
6b80: 20 3d 3d 20 30 78 34 41 42 35 30 30 30 30 20 26 == 0x4AB50000 &
6b90: 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 & \. *(long *)
6ba0: 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d (function +40) =
6bb0: 3d 20 30 78 30 32 41 30 31 30 41 31 20 26 26 20 = 0x02A010A1 &&
6bc0: 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 \. *(long *) (f
6bd0: 75 6e 63 74 69 6f 6e 20 2b 34 34 29 20 3d 3d 20 unction +44) ==
6be0: 30 78 30 30 30 31 31 38 32 30 20 26 26 20 5c 0a 0x00011820 && \.
6bf0: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
6c00: 63 74 69 6f 6e 20 2b 34 38 29 20 3d 3d 20 30 78 ction +48) == 0x
6c10: 45 32 41 30 30 30 30 32 20 26 26 20 5c 0a 20 20 E2A00002 && \.
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 35 32 29 20 3d 3d 20 30 78 30 38 ion +52) == 0x08
6c40: 30 30 30 32 34 30 0a 23 64 65 66 69 6e 65 20 68 000240.#define h
6c50: 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f 77 6f 72 ilo(hiword,lowor
6c60: 64 29 20 20 5c 0a 20 20 28 28 61 73 73 65 6d 62 d) \. ((assemb
6c70: 6c 65 32 31 28 28 75 6e 73 69 67 6e 65 64 20 6c le21((unsigned l
6c80: 6f 6e 67 29 20 28 68 69 77 6f 72 64 29 29 20 3c ong) (hiword)) <
6c90: 3c 20 31 31 29 20 7c 20 5c 0a 20 20 20 28 28 28 < 11) | \. (((
6ca0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 unsigned long) (
6cb0: 6c 6f 77 6f 72 64 29 20 26 20 30 78 46 46 45 29 loword) & 0xFFE)
6cc0: 20 3e 3e 20 31 29 20 5c 0a 20 20 29 0a 23 64 65 >> 1) \. ).#de
6cd0: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
6ce0: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
6cf0: 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a 29 hilo(*(long *)
6d00: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 2c (function +16),
6d10: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
6d20: 74 69 6f 6e 20 2b 32 30 29 29 0a 23 64 65 66 69 tion +20)).#defi
6d30: 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c ne tramp_variabl
6d40: 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 e(function) \.
6d50: 20 68 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a 29 20 hilo(*(long *)
6d60: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 2c 20 (function + 4),
6d70: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
6d80: 69 6f 6e 20 2b 31 32 29 29 0a 23 64 65 66 69 6e ion +12)).#defin
6d90: 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e e tramp_data(fun
6da0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f ction) \. hilo
6db0: 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 (*(long *) (func
6dc0: 74 69 6f 6e 20 2b 20 30 29 2c 20 2a 28 6c 6f 6e tion + 0), *(lon
6dd0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6de0: 20 38 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 64 8)).#endif.#ifd
6df0: 65 66 20 5f 5f 68 70 70 61 6e 65 77 5f 5f 0a 20 ef __hppanew__.
6e00: 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 /* function:.
6e10: 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 20 20 74 72 * .long tr
6e20: 61 6d 70 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e amp. * .lon
6e30: 67 20 20 20 63 6c 6f 73 75 72 65 0a 20 20 20 2a g closure. *
6e40: 20 63 6c 6f 73 75 72 65 3a 0a 20 20 20 2a 20 20 closure:. *
6e50: 20 20 2e 6c 6f 6e 67 20 20 20 3c 76 61 72 69 61 .long <varia
6e60: 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 2e 6c 6f ble>. * .lo
6e70: 6e 67 20 20 20 3c 64 61 74 61 3e 0a 20 20 20 2a ng <data>. *
6e80: 20 20 20 20 2e 6c 6f 6e 67 20 20 20 3c 61 64 64 .long <add
6e90: 72 65 73 73 3e 0a 20 20 20 2a 2f 0a 20 20 7b 20 ress>. */. {
6ea0: 2f 2a 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 61 /* work around a
6eb0: 20 62 75 67 20 69 6e 20 67 63 63 20 33 2e 2a 20 bug in gcc 3.*
6ec0: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 20 74 72 61 */. void* tra
6ed0: 6d 70 5f 61 64 64 72 65 73 73 20 3d 20 26 74 72 mp_address = &tr
6ee0: 61 6d 70 3b 0a 20 20 20 20 2a 28 6c 6f 6e 67 20 amp;. *(long
6ef0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
6f00: 29 20 3d 20 28 28 6c 6f 6e 67 20 2a 29 20 28 28 ) = ((long *) ((
6f10: 63 68 61 72 2a 29 74 72 61 6d 70 5f 61 64 64 72 char*)tramp_addr
6f20: 65 73 73 2d 32 29 29 5b 30 5d 3b 0a 20 20 20 20 ess-2))[0];.
6f30: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
6f40: 69 6f 6e 20 2b 20 34 29 20 3d 20 28 6c 6f 6e 67 ion + 4) = (long
6f50: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 ) (function + 8)
6f60: 3b 0a 20 20 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 ;. *(long *)
6f70: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d (function + 8) =
6f80: 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 (long) variable
6f90: 3b 0a 20 20 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 ;. *(long *)
6fa0: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d (function +12) =
6fb0: 20 28 6c 6f 6e 67 29 20 64 61 74 61 3b 0a 20 20 (long) data;.
6fc0: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
6fd0: 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 28 6c 6f ction +16) = (lo
6fe0: 6e 67 29 20 61 64 64 72 65 73 73 3b 0a 20 20 7d ng) address;. }
6ff0: 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d .#define is_tram
7000: 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 p(function) \.
7010: 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 ((long *) funct
7020: 69 6f 6e 29 5b 30 5d 20 3d 3d 20 28 28 6c 6f 6e ion)[0] == ((lon
7030: 67 20 2a 29 20 28 28 63 68 61 72 2a 29 74 72 61 g *) ((char*)tra
7040: 6d 70 5f 61 64 64 72 65 73 73 2d 32 29 29 5b 30 mp_address-2))[0
7050: 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f ].#define tramp_
7060: 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e address(function
7070: 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 ) \. ((long *)
7080: 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d 0a 23 64 function)[4].#d
7090: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
70a0: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
70b0: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
70c0: 6e 63 74 69 6f 6e 29 5b 32 5d 0a 23 64 65 66 69 nction)[2].#defi
70d0: 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 ne tramp_data(fu
70e0: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c nction) \. ((l
70f0: 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 ong *) function)
7100: 5b 33 5d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 [3].#endif.#ifde
7110: 66 20 5f 5f 61 72 6d 5f 5f 0a 20 20 2f 2a 20 66 f __arm__. /* f
7120: 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 unction:. *
7130: 20 73 74 6d 66 64 20 20 20 73 70 21 2c 7b 72 30 stmfd sp!,{r0
7140: 7d 09 09 09 45 39 32 44 30 30 30 31 0a 20 20 20 }...E92D0001.
7150: 2a 20 20 20 20 6c 64 72 20 20 20 20 20 72 30 2c * ldr r0,
7160: 5b 70 63 2c 23 5f 64 61 74 61 2d 2e 2d 38 5d 09 [pc,#_data-.-8].
7170: 09 45 35 39 46 30 30 31 34 0a 20 20 20 2a 20 20 .E59F0014. *
7180: 20 20 6c 64 72 20 20 20 20 20 69 70 2c 5b 72 30 ldr ip,[r0
7190: 2c 23 30 5d 09 09 09 45 35 39 30 43 30 30 30 0a ,#0]...E590C000.
71a0: 20 20 20 2a 20 20 20 20 6c 64 72 20 20 20 20 20 * ldr
71b0: 72 30 2c 5b 70 63 2c 23 5f 76 61 72 69 61 62 6c r0,[pc,#_variabl
71c0: 65 2d 2e 2d 38 5d 09 09 45 35 39 46 30 30 31 30 e-.-8]..E59F0010
71d0: 0a 20 20 20 2a 20 20 20 20 73 74 72 20 20 20 20 . * str
71e0: 20 69 70 2c 5b 72 30 2c 23 30 5d 09 09 09 45 35 ip,[r0,#0]...E5
71f0: 38 30 43 30 30 30 0a 20 20 20 2a 20 20 20 20 6c 80C000. * l
7200: 64 6d 66 64 20 20 20 73 70 21 2c 7b 72 30 7d 5e dmfd sp!,{r0}^
7210: 09 09 09 45 38 46 44 30 30 30 31 0a 20 20 20 2a ...E8FD0001. *
7220: 20 20 20 20 6c 64 72 20 20 20 20 20 69 70 2c 5b ldr ip,[
7230: 70 63 2c 23 5f 66 75 6e 63 74 69 6f 6e 2d 2e 2d pc,#_function-.-
7240: 38 5d 09 09 45 35 39 46 43 30 30 38 0a 20 20 20 8]..E59FC008.
7250: 2a 20 20 20 20 6c 64 72 20 20 20 20 20 70 63 2c * ldr pc,
7260: 5b 69 70 2c 23 30 5d 09 09 09 45 35 39 43 46 30 [ip,#0]...E59CF0
7270: 30 30 0a 20 20 20 2a 20 5f 64 61 74 61 3a 0a 20 00. * _data:.
7280: 20 20 2a 20 20 20 20 2e 77 6f 72 64 20 20 20 3c * .word <
7290: 64 61 74 61 3e 09 09 09 09 3c 64 61 74 61 3e 0a data>....<data>.
72a0: 20 20 20 2a 20 5f 76 61 72 69 61 62 6c 65 3a 0a * _variable:.
72b0: 20 20 20 2a 20 20 20 20 2e 77 6f 72 64 20 20 20 * .word
72c0: 3c 76 61 72 69 61 62 6c 65 3e 09 09 09 3c 76 61 <variable>...<va
72d0: 72 69 61 62 6c 65 3e 0a 20 20 20 2a 20 5f 66 75 riable>. * _fu
72e0: 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 nction:. *
72f0: 2e 77 6f 72 64 20 20 20 3c 61 64 64 72 65 73 73 .word <address
7300: 3e 09 09 09 3c 61 64 64 72 65 73 73 3e 0a 20 20 >...<address>.
7310: 20 2a 2f 0a 20 20 7b 20 73 74 61 74 69 63 20 6c */. { static l
7320: 6f 6e 67 20 63 6f 64 65 20 5b 38 5d 20 3d 0a 20 ong code [8] =.
7330: 20 20 20 20 20 7b 20 30 78 45 39 32 44 30 30 30 { 0xE92D000
7340: 31 2c 20 30 78 45 35 39 46 30 30 31 34 2c 20 30 1, 0xE59F0014, 0
7350: 78 45 35 39 30 43 30 30 30 2c 20 30 78 45 35 39 xE590C000, 0xE59
7360: 46 30 30 31 30 2c 0a 20 20 20 20 20 20 20 20 30 F0010,. 0
7370: 78 45 35 38 30 43 30 30 30 2c 20 30 78 45 38 46 xE580C000, 0xE8F
7380: 44 30 30 30 31 2c 20 30 78 45 35 39 46 43 30 30 D0001, 0xE59FC00
7390: 38 2c 20 30 78 45 35 39 43 46 30 30 30 0a 20 20 8, 0xE59CF000.
73a0: 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 };. int i
73b0: 3b 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 ;. for (i=0;
73c0: 69 3c 38 3b 20 69 2b 2b 29 20 7b 20 28 28 6c 6f i<8; i++) { ((lo
73d0: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
73e0: 69 5d 20 3d 20 63 6f 64 65 5b 69 5d 3b 20 7d 0a i] = code[i]; }.
73f0: 20 20 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 ((long *) fu
7400: 6e 63 74 69 6f 6e 29 5b 38 5d 20 3d 20 28 6c 6f nction)[8] = (lo
7410: 6e 67 29 20 64 61 74 61 3b 0a 20 20 20 20 28 28 ng) data;. ((
7420: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
7430: 29 5b 39 5d 20 3d 20 28 6c 6f 6e 67 29 20 76 61 )[9] = (long) va
7440: 72 69 61 62 6c 65 3b 0a 20 20 20 20 28 28 6c 6f riable;. ((lo
7450: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
7460: 31 30 5d 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 10] = (long) add
7470: 72 65 73 73 3b 0a 20 20 7d 0a 23 64 65 66 69 6e ress;. }.#defin
7480: 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 e is_tramp(funct
7490: 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 ion) \. ((long
74a0: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 30 5d *) function)[0]
74b0: 20 3d 3d 20 30 78 45 39 32 44 30 30 30 31 20 26 == 0xE92D0001 &
74c0: 26 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 & \. ((long *)
74d0: 66 75 6e 63 74 69 6f 6e 29 5b 31 5d 20 3d 3d 20 function)[1] ==
74e0: 30 78 45 35 39 46 30 30 31 34 20 26 26 20 5c 0a 0xE59F0014 && \.
74f0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
7500: 74 69 6f 6e 29 5b 32 5d 20 3d 3d 20 30 78 45 35 tion)[2] == 0xE5
7510: 39 30 43 30 30 30 20 26 26 20 5c 0a 20 20 28 28 90C000 && \. ((
7520: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
7530: 29 5b 33 5d 20 3d 3d 20 30 78 45 35 39 46 30 30 )[3] == 0xE59F00
7540: 31 30 20 26 26 20 5c 0a 20 20 28 28 6c 6f 6e 67 10 && \. ((long
7550: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d *) function)[4]
7560: 20 3d 3d 20 30 78 45 35 38 30 43 30 30 30 20 26 == 0xE580C000 &
7570: 26 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 & \. ((long *)
7580: 66 75 6e 63 74 69 6f 6e 29 5b 35 5d 20 3d 3d 20 function)[5] ==
7590: 30 78 45 38 46 44 30 30 30 31 20 26 26 20 5c 0a 0xE8FD0001 && \.
75a0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
75b0: 74 69 6f 6e 29 5b 36 5d 20 3d 3d 20 30 78 45 35 tion)[6] == 0xE5
75c0: 39 46 43 30 30 38 20 26 26 20 5c 0a 20 20 28 28 9FC008 && \. ((
75d0: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
75e0: 29 5b 37 5d 20 3d 3d 20 30 78 45 35 39 43 46 30 )[7] == 0xE59CF0
75f0: 30 30 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 00.#define tramp
7600: 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f _address(functio
7610: 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a n) \. ((long *
7620: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 31 30 5d 0a ) function)[10].
7630: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 #define tramp_va
7640: 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 riable(function)
7650: 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 \. ((long *)
7660: 66 75 6e 63 74 69 6f 6e 29 5b 39 5d 0a 23 64 65 function)[9].#de
7670: 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 fine tramp_data(
7680: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 function) \. (
7690: 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f (long *) functio
76a0: 6e 29 5b 38 5d 0a 23 65 6e 64 69 66 0a 23 69 66 n)[8].#endif.#if
76b0: 64 65 66 20 5f 5f 72 73 36 30 30 30 73 79 73 76 def __rs6000sysv
76c0: 34 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 4__. /* functio
76d0: 6e 3a 0a 20 20 20 2a 20 20 20 20 7b 6c 69 75 7c n:. * {liu|
76e0: 6c 69 73 7d 20 31 31 2c 68 69 31 36 28 3c 76 61 lis} 11,hi16(<va
76f0: 72 69 61 62 6c 65 3e 29 09 09 33 44 20 36 30 20 riable>)..3D 60
7700: 68 69 31 36 28 3c 76 61 72 69 61 62 6c 65 3e 29 hi16(<variable>)
7710: 0a 20 20 20 2a 20 20 20 20 7b 6f 72 69 6c 7c 6f . * {oril|o
7720: 72 69 7d 20 31 31 2c 31 31 2c 6c 6f 31 36 28 3c ri} 11,11,lo16(<
7730: 76 61 72 69 61 62 6c 65 3e 29 09 36 31 20 36 42 variable>).61 6B
7740: 20 6c 6f 31 36 28 3c 76 61 72 69 61 62 6c 65 3e lo16(<variable>
7750: 29 0a 20 20 20 2a 20 20 20 20 7b 6c 69 75 7c 6c ). * {liu|l
7760: 69 73 7d 20 31 32 2c 68 69 31 36 28 3c 64 61 74 is} 12,hi16(<dat
7770: 61 3e 29 09 09 33 44 20 38 30 20 68 69 31 36 28 a>)..3D 80 hi16(
7780: 3c 64 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 <data>). *
7790: 7b 6f 72 69 6c 7c 6f 72 69 7d 20 31 32 2c 31 32 {oril|ori} 12,12
77a0: 2c 6c 6f 31 36 28 3c 64 61 74 61 3e 29 09 09 36 ,lo16(<data>)..6
77b0: 31 20 38 43 20 6c 6f 31 36 28 3c 64 61 74 61 3e 1 8C lo16(<data>
77c0: 29 0a 20 20 20 2a 20 20 20 20 7b 73 74 7c 73 74 ). * {st|st
77d0: 77 7d 20 31 32 2c 30 28 31 31 29 09 09 09 39 31 w} 12,0(11)...91
77e0: 20 38 42 20 30 30 20 30 30 0a 20 20 20 2a 20 20 8B 00 00. *
77f0: 20 20 7b 6c 69 75 7c 6c 69 73 7d 20 30 2c 68 69 {liu|lis} 0,hi
7800: 31 36 28 3c 61 64 64 72 65 73 73 3e 29 09 09 33 16(<address>)..3
7810: 43 20 30 30 20 68 69 31 36 28 3c 61 64 64 72 65 C 00 hi16(<addre
7820: 73 73 3e 29 0a 20 20 20 2a 20 20 20 20 7b 6f 72 ss>). * {or
7830: 69 6c 7c 6f 72 69 7d 20 30 2c 30 2c 6c 6f 31 36 il|ori} 0,0,lo16
7840: 28 3c 61 64 64 72 65 73 73 3e 29 09 09 36 30 20 (<address>)..60
7850: 30 30 20 6c 6f 31 36 28 3c 61 64 64 72 65 73 73 00 lo16(<address
7860: 3e 29 0a 20 20 20 2a 20 20 20 20 6d 74 63 74 72 >). * mtctr
7870: 20 30 09 09 09 09 09 37 43 20 30 39 20 30 33 20 0.....7C 09 03
7880: 41 36 0a 20 20 20 2a 20 20 20 20 62 63 74 72 09 A6. * bctr.
7890: 09 09 09 09 34 45 20 38 30 20 30 34 20 32 30 0a ....4E 80 04 20.
78a0: 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 20 */. *(short
78b0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
78c0: 29 20 3d 20 30 78 33 44 36 30 3b 0a 20 20 2a 28 ) = 0x3D60;. *(
78d0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
78e0: 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 67 on + 2) = (unsig
78f0: 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 ned long) variab
7900: 6c 65 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 le >> 16;. *(sh
7910: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
7920: 20 2b 20 34 29 20 3d 20 30 78 36 31 36 42 3b 0a + 4) = 0x616B;.
7930: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
7940: 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 75 nction + 6) = (u
7950: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 nsigned long) va
7960: 72 69 61 62 6c 65 20 26 20 30 78 66 66 66 66 3b riable & 0xffff;
7970: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
7980: 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 unction + 8) = 0
7990: 78 33 44 38 30 3b 0a 20 20 2a 28 73 68 6f 72 74 x3D80;. *(short
79a0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
79b0: 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 0) = (unsigned l
79c0: 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 31 36 3b ong) data >> 16;
79d0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
79e0: 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 30 unction +12) = 0
79f0: 78 36 31 38 43 3b 0a 20 20 2a 28 73 68 6f 72 74 x618C;. *(short
7a00: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
7a10: 34 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 4) = (unsigned l
7a20: 6f 6e 67 29 20 64 61 74 61 20 26 20 30 78 66 66 ong) data & 0xff
7a30: 66 66 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 ff;. *(long *)
7a40: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 (function +16)
7a50: 3d 20 30 78 39 31 38 42 30 30 30 30 3b 0a 20 20 = 0x918B0000;.
7a60: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
7a70: 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 33 43 tion +20) = 0x3C
7a80: 30 30 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 00;. *(short *)
7a90: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 20 (function +22)
7aa0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
7ab0: 29 20 61 64 64 72 65 73 73 20 3e 3e 20 31 36 3b ) address >> 16;
7ac0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
7ad0: 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 unction +24) = 0
7ae0: 78 36 30 30 30 3b 0a 20 20 2a 28 73 68 6f 72 74 x6000;. *(short
7af0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
7b00: 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6) = (unsigned l
7b10: 6f 6e 67 29 20 61 64 64 72 65 73 73 20 26 20 30 ong) address & 0
7b20: 78 66 66 66 66 3b 0a 20 20 2a 28 6c 6f 6e 67 20 xffff;. *(long
7b30: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
7b40: 38 29 20 3d 20 30 78 37 43 30 39 30 33 41 36 3b 8) = 0x7C0903A6;
7b50: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 . *(long *) (f
7b60: 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d 20 30 unction +32) = 0
7b70: 78 34 45 38 30 30 34 32 30 3b 0a 23 64 65 66 69 x4E800420;.#defi
7b80: 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 ne is_tramp(func
7b90: 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 tion) \. *(uns
7ba0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
7bb0: 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d function + 0) ==
7bc0: 20 30 78 33 44 36 30 20 26 26 20 5c 0a 20 20 2a 0x3D60 && \. *
7bd0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
7be0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 *) (function + 4
7bf0: 29 20 3d 3d 20 30 78 36 31 36 42 20 26 26 20 5c ) == 0x616B && \
7c00: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
7c10: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
7c20: 20 2b 20 38 29 20 3d 3d 20 30 78 33 44 38 30 20 + 8) == 0x3D80
7c30: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
7c40: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
7c50: 74 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 36 tion +12) == 0x6
7c60: 31 38 43 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 18C && \. *(uns
7c70: 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 20 28 igned long *) (
7c80: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 3d function +16) ==
7c90: 20 30 78 39 31 38 42 30 30 30 30 20 26 26 20 5c 0x918B0000 && \
7ca0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
7cb0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
7cc0: 20 2b 32 30 29 20 3d 3d 20 30 78 33 43 30 30 20 +20) == 0x3C00
7cd0: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
7ce0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
7cf0: 74 69 6f 6e 20 2b 32 34 29 20 3d 3d 20 30 78 36 tion +24) == 0x6
7d00: 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 000 && \. *(uns
7d10: 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 20 28 igned long *) (
7d20: 66 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 3d function +28) ==
7d30: 20 30 78 37 43 30 39 30 33 41 36 20 26 26 20 5c 0x7C0903A6 && \
7d40: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c 6f . *(unsigned lo
7d50: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
7d60: 20 2b 33 32 29 20 3d 3d 20 30 78 34 45 38 30 30 +32) == 0x4E800
7d70: 34 32 30 0a 23 64 65 66 69 6e 65 20 68 69 6c 6f 420.#define hilo
7d80: 28 68 69 77 6f 72 64 2c 6c 6f 77 6f 72 64 29 20 (hiword,loword)
7d90: 20 5c 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 \. (((unsigned
7da0: 20 6c 6f 6e 67 29 20 28 68 69 77 6f 72 64 29 20 long) (hiword)
7db0: 3c 3c 20 31 36 29 20 7c 20 28 75 6e 73 69 67 6e << 16) | (unsign
7dc0: 65 64 20 6c 6f 6e 67 29 20 28 6c 6f 77 6f 72 64 ed long) (loword
7dd0: 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 )).#define tramp
7de0: 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f _address(functio
7df0: 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 n) \. hilo(*(u
7e00: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
7e10: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 2c (function +22),
7e20: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
7e30: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7e40: 32 36 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 26)).#define tra
7e50: 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 mp_variable(func
7e60: 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 tion) \. hilo(
7e70: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
7e80: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
7e90: 32 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 2), *(unsigned s
7ea0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
7eb0: 6e 20 2b 20 36 29 29 0a 23 64 65 66 69 6e 65 20 n + 6)).#define
7ec0: 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 tramp_data(funct
7ed0: 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a ion) \. hilo(*
7ee0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
7ef0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 *) (function +10
7f00: 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 ), *(unsigned sh
7f10: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
7f20: 20 2b 31 34 29 29 0a 23 65 6e 64 69 66 0a 23 69 +14)).#endif.#i
7f30: 66 64 65 66 20 5f 5f 72 73 36 30 30 30 61 69 78 fdef __rs6000aix
7f40: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
7f50: 3a 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 :. * .long
7f60: 2e 74 72 61 6d 70 0a 20 20 20 2a 20 20 20 20 2e .tramp. * .
7f70: 6c 6f 6e 67 20 2e 6d 79 74 6f 63 0a 20 20 20 2a long .mytoc. *
7f80: 20 20 20 20 2e 6c 6f 6e 67 20 30 0a 20 20 20 2a .long 0. *
7f90: 20 2e 6d 79 74 6f 63 3a 0a 20 20 20 2a 20 20 20 .mytoc:. *
7fa0: 20 2e 6c 6f 6e 67 20 3c 76 61 72 69 61 62 6c 65 .long <variable
7fb0: 3e 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 >. * .long
7fc0: 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 20 20 2e <data>. * .
7fd0: 6c 6f 6e 67 20 3c 61 64 64 72 65 73 73 3e 0a 20 long <address>.
7fe0: 20 20 2a 2f 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 */. *(long *)
7ff0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 (function + 0)
8000: 20 3d 20 28 28 6c 6f 6e 67 20 2a 29 20 26 74 72 = ((long *) &tr
8010: 61 6d 70 29 5b 30 5d 3b 0a 20 20 2a 28 6c 6f 6e amp)[0];. *(lon
8020: 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 g *) (function
8030: 2b 20 34 29 20 3d 20 28 6c 6f 6e 67 29 20 28 66 + 4) = (long) (f
8040: 75 6e 63 74 69 6f 6e 20 2b 20 31 32 29 3b 0a 20 unction + 12);.
8050: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
8060: 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 3b 0a ction + 8) = 0;.
8070: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
8080: 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 28 6c nction +12) = (l
8090: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 ong) variable;.
80a0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
80b0: 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 28 6c 6f ction +16) = (lo
80c0: 6e 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 6c 6f ng) data;. *(lo
80d0: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
80e0: 20 2b 32 30 29 20 3d 20 28 6c 6f 6e 67 29 20 61 +20) = (long) a
80f0: 64 64 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 20 ddress;.#define
8100: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
8110: 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a n) \. ((long *
8120: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d ) function)[0] =
8130: 3d 20 28 28 6c 6f 6e 67 20 2a 29 20 26 74 72 61 = ((long *) &tra
8140: 6d 70 29 5b 30 5d 0a 23 64 65 66 69 6e 65 20 74 mp)[0].#define t
8150: 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e ramp_address(fun
8160: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f ction) \. ((lo
8170: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
8180: 35 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5].#define tramp
8190: 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 _variable(functi
81a0: 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 on) \. ((long
81b0: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d 0a *) function)[3].
81c0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
81d0: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
81e0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
81f0: 74 69 6f 6e 29 5b 34 5d 0a 23 65 6e 64 69 66 0a tion)[4].#endif.
8200: 23 69 66 64 65 66 20 5f 5f 6d 38 38 6b 5f 5f 0a #ifdef __m88k__.
8210: 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 /* function:.
8220: 20 20 2a 20 20 20 20 6f 72 2e 75 20 20 20 20 23 * or.u #
8230: 72 31 33 2c 23 72 30 2c 68 69 31 36 28 3c 76 61 r13,#r0,hi16(<va
8240: 72 69 61 62 6c 65 3e 29 09 35 44 20 41 30 20 68 riable>).5D A0 h
8250: 69 31 36 28 3c 76 61 72 69 61 62 6c 65 3e 29 0a i16(<variable>).
8260: 20 20 20 2a 20 20 20 20 6f 72 20 20 20 20 20 20 * or
8270: 23 72 31 33 2c 23 72 31 33 2c 6c 6f 31 36 28 3c #r13,#r13,lo16(<
8280: 76 61 72 69 61 62 6c 65 3e 29 09 35 39 20 41 44 variable>).59 AD
8290: 20 6c 6f 31 36 28 3c 76 61 72 69 61 62 6c 65 3e lo16(<variable>
82a0: 29 0a 20 20 20 2a 20 20 20 20 6f 72 2e 75 20 20 ). * or.u
82b0: 20 20 23 72 31 30 2c 23 72 30 2c 68 69 31 36 28 #r10,#r0,hi16(
82c0: 3c 64 61 74 61 3e 29 09 09 35 44 20 34 30 20 68 <data>)..5D 40 h
82d0: 69 31 36 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a i16(<data>). *
82e0: 20 20 20 20 6f 72 20 20 20 20 20 20 23 72 31 30 or #r10
82f0: 2c 23 72 31 30 2c 6c 6f 31 36 28 3c 64 61 74 61 ,#r10,lo16(<data
8300: 3e 29 09 09 35 39 20 34 41 20 6c 6f 31 36 28 3c >)..59 4A lo16(<
8310: 64 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 73 data>). * s
8320: 74 20 20 20 20 20 20 23 72 31 30 2c 23 72 30 2c t #r10,#r0,
8330: 23 72 31 33 09 09 09 46 35 20 34 30 20 32 34 20 #r13...F5 40 24
8340: 30 44 0a 20 20 20 2a 20 20 20 20 6f 72 2e 75 20 0D. * or.u
8350: 20 20 20 23 72 31 33 2c 23 72 30 2c 68 69 31 36 #r13,#r0,hi16
8360: 28 3c 61 64 64 72 65 73 73 3e 29 09 35 44 20 41 (<address>).5D A
8370: 30 20 68 69 31 36 28 3c 61 64 64 72 65 73 73 3e 0 hi16(<address>
8380: 29 0a 20 20 20 2a 20 20 20 20 6f 72 20 20 20 20 ). * or
8390: 20 20 23 72 31 33 2c 23 72 31 33 2c 6c 6f 31 36 #r13,#r13,lo16
83a0: 28 3c 61 64 64 72 65 73 73 3e 29 09 35 39 20 41 (<address>).59 A
83b0: 44 20 6c 6f 31 36 28 3c 61 64 64 72 65 73 73 3e D lo16(<address>
83c0: 29 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 20 20 ). * jmp
83d0: 20 20 23 72 31 33 09 09 09 09 46 34 20 30 30 20 #r13....F4 00
83e0: 43 30 20 30 44 0a 20 20 20 2a 2f 0a 20 20 2a 28 C0 0D. */. *(
83f0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
8400: 6f 6e 20 2b 20 30 29 20 3d 20 30 78 35 44 41 30 on + 0) = 0x5DA0
8410: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
8420: 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 3d 20 function + 2) =
8430: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
8440: 76 61 72 69 61 62 6c 65 20 3e 3e 20 31 36 3b 0a variable >> 16;.
8450: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
8460: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 nction + 4) = 0x
8470: 35 39 41 44 3b 0a 20 20 2a 28 73 68 6f 72 74 20 59AD;. *(short
8480: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 *) (function + 6
8490: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ) = (unsigned lo
84a0: 6e 67 29 20 76 61 72 69 61 62 6c 65 20 26 20 30 ng) variable & 0
84b0: 78 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 xffff;. *(short
84c0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
84d0: 38 29 20 3d 20 30 78 35 44 34 30 3b 0a 20 20 2a 8) = 0x5D40;. *
84e0: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
84f0: 69 6f 6e 20 2b 31 30 29 20 3d 20 28 75 6e 73 69 ion +10) = (unsi
8500: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 gned long) data
8510: 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 >> 16;. *(short
8520: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
8530: 32 29 20 3d 20 30 78 35 39 34 41 3b 0a 20 20 2a 2) = 0x594A;. *
8540: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
8550: 69 6f 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 ion +14) = (unsi
8560: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 gned long) data
8570: 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 6c 6f & 0xffff;. *(lo
8580: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
8590: 20 2b 31 36 29 20 3d 20 30 78 46 35 34 30 32 34 +16) = 0xF54024
85a0: 30 44 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 0D;. *(short *)
85b0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
85c0: 3d 20 30 78 35 44 41 30 3b 0a 20 20 2a 28 73 68 = 0x5DA0;. *(sh
85d0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
85e0: 20 2b 32 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 +22) = (unsigne
85f0: 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 20 d long) address
8600: 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 >> 16;. *(short
8610: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
8620: 34 29 20 3d 20 30 78 35 39 41 44 3b 0a 20 20 2a 4) = 0x59AD;. *
8630: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
8640: 69 6f 6e 20 2b 32 36 29 20 3d 20 28 75 6e 73 69 ion +26) = (unsi
8650: 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 gned long) addre
8660: 73 73 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a ss & 0xffff;. *
8670: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
8680: 69 6f 6e 20 2b 32 38 29 20 3d 20 30 78 46 34 30 ion +28) = 0xF40
8690: 30 43 30 30 44 3b 0a 23 64 65 66 69 6e 65 20 69 0C00D;.#define i
86a0: 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e s_tramp(function
86b0: 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ) \. *(unsigne
86c0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
86d0: 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 35 tion + 0) == 0x5
86e0: 44 41 30 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 DA0 && \. *(uns
86f0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
8700: 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d function + 4) ==
8710: 20 30 78 35 39 41 44 20 26 26 20 5c 0a 20 20 2a 0x59AD && \. *
8720: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
8730: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 *) (function + 8
8740: 29 20 3d 3d 20 30 78 35 44 34 30 20 26 26 20 5c ) == 0x5D40 && \
8750: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
8760: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
8770: 20 2b 31 32 29 20 3d 3d 20 30 78 35 39 34 41 20 +12) == 0x594A
8780: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
8790: 64 20 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 d long *) (func
87a0: 74 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 46 tion +16) == 0xF
87b0: 35 34 30 32 34 30 44 20 26 26 20 5c 0a 20 20 2a 540240D && \. *
87c0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
87d0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 *) (function +20
87e0: 29 20 3d 3d 20 30 78 35 44 41 30 20 26 26 20 5c ) == 0x5DA0 && \
87f0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
8800: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
8810: 20 2b 32 34 29 20 3d 3d 20 30 78 35 39 41 44 20 +24) == 0x59AD
8820: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
8830: 64 20 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 d long *) (func
8840: 74 69 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 46 tion +28) == 0xF
8850: 34 30 30 43 30 30 44 0a 23 64 65 66 69 6e 65 20 400C00D.#define
8860: 68 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f 77 6f hilo(hiword,lowo
8870: 72 64 29 20 20 5c 0a 20 20 28 28 28 75 6e 73 69 rd) \. (((unsi
8880: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 68 69 77 6f gned long) (hiwo
8890: 72 64 29 20 3c 3c 20 31 36 29 20 7c 20 28 75 6e rd) << 16) | (un
88a0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 6c 6f signed long) (lo
88b0: 77 6f 72 64 29 29 0a 23 64 65 66 69 6e 65 20 74 word)).#define t
88c0: 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e ramp_address(fun
88d0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f ction) \. hilo
88e0: 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 (*(unsigned shor
88f0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
8900: 32 32 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 22), *(unsigned
8910: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
8920: 6f 6e 20 2b 32 36 29 29 0a 23 64 65 66 69 6e 65 on +26)).#define
8930: 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 tramp_variable(
8940: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 function) \. h
8950: 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 ilo(*(unsigned s
8960: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
8970: 6e 20 2b 20 32 29 2c 20 2a 28 75 6e 73 69 67 6e n + 2), *(unsign
8980: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
8990: 63 74 69 6f 6e 20 2b 20 36 29 29 0a 23 64 65 66 ction + 6)).#def
89a0: 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 ine tramp_data(f
89b0: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 unction) \. hi
89c0: 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 lo(*(unsigned sh
89d0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
89e0: 20 2b 31 30 29 2c 20 2a 28 75 6e 73 69 67 6e 65 +10), *(unsigne
89f0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
8a00: 74 69 6f 6e 20 2b 31 34 29 29 0a 23 65 6e 64 69 tion +14)).#endi
8a10: 66 0a 23 69 66 64 65 66 20 5f 5f 63 6f 6e 76 65 f.#ifdef __conve
8a20: 78 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f x__. /* functio
8a30: 6e 3a 0a 20 20 20 2a 20 20 20 20 6c 64 2e 77 20 n:. * ld.w
8a40: 23 3c 64 61 74 61 3e 2c 73 31 09 09 09 09 31 31 #<data>,s1....11
8a50: 43 39 20 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 C9 <data>. *
8a60: 20 20 73 74 2e 77 20 73 31 2c 3c 76 61 72 69 61 st.w s1,<varia
8a70: 62 6c 65 3e 09 09 09 33 36 34 31 20 3c 76 61 72 ble>...3641 <var
8a80: 69 61 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 6a iable>. * j
8a90: 6d 70 20 3c 61 64 64 72 65 73 73 3e 09 09 09 09 mp <address>....
8aa0: 30 31 34 30 20 3c 61 64 64 72 65 73 73 3e 0a 20 0140 <address>.
8ab0: 20 20 2a 20 20 20 20 64 73 2e 68 20 30 09 09 09 * ds.h 0...
8ac0: 09 09 30 30 30 30 0a 20 20 20 2a 2f 0a 20 20 2a ..0000. */. *
8ad0: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
8ae0: 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 31 31 43 ion + 0) = 0x11C
8af0: 39 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 9;. *(long *)
8b00: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 3d (function + 2) =
8b10: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long)
8b20: 20 64 61 74 61 3b 0a 20 20 2a 28 73 68 6f 72 74 data;. *(short
8b30: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
8b40: 36 29 20 3d 20 30 78 33 36 34 31 3b 0a 20 20 2a 6) = 0x3641;. *
8b50: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
8b60: 69 6f 6e 20 2b 20 38 29 20 3d 20 28 75 6e 73 69 ion + 8) = (unsi
8b70: 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 gned long) varia
8b80: 62 6c 65 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a ble;. *(short *
8b90: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 ) (function +12)
8ba0: 20 3d 20 30 78 30 31 34 30 3b 0a 20 20 2a 28 6c = 0x0140;. *(l
8bb0: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
8bc0: 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 67 6e n +14) = (unsign
8bd0: 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 ed long) address
8be0: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
8bf0: 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 20 3d 20 function +18) =
8c00: 30 78 30 30 30 30 3b 0a 23 64 65 66 69 6e 65 20 0x0000;.#define
8c10: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
8c20: 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e n) \. *(unsign
8c30: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
8c40: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 ction + 0) == 0x
8c50: 31 31 43 39 20 26 26 20 5c 0a 20 20 2a 28 75 6e 11C9 && \. *(un
8c60: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
8c70: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d (function + 6) =
8c80: 3d 20 30 78 33 36 34 31 20 26 26 20 5c 0a 20 20 = 0x3641 && \.
8c90: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
8ca0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
8cb0: 32 29 20 3d 3d 20 30 78 30 31 34 30 20 26 26 20 2) == 0x0140 &&
8cc0: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
8cd0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
8ce0: 6e 20 2b 31 38 29 20 3d 3d 20 30 78 30 30 30 30 n +18) == 0x0000
8cf0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
8d00: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
8d10: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
8d20: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 0a (function +14).
8d30: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 #define tramp_va
8d40: 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 riable(function)
8d50: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
8d60: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 0a (function + 8).
8d70: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
8d80: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
8d90: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
8da0: 6e 63 74 69 6f 6e 20 2b 20 32 29 0a 23 65 6e 64 nction + 2).#end
8db0: 69 66 0a 23 69 66 64 65 66 20 5f 5f 69 61 36 34 if.#ifdef __ia64
8dc0: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
8dd0: 3a 0a 20 20 20 2a 20 20 20 20 64 61 74 61 38 20 :. * data8
8de0: 20 20 74 72 61 6d 70 0a 20 20 20 2a 20 20 20 20 tramp. *
8df0: 64 61 74 61 38 20 20 20 63 6c 6f 73 75 72 65 0a data8 closure.
8e00: 20 20 20 2a 20 63 6c 6f 73 75 72 65 3a 0a 20 20 * closure:.
8e10: 20 2a 20 20 20 20 64 61 74 61 38 20 20 20 3c 61 * data8 <a
8e20: 64 64 72 65 73 73 3e 0a 20 20 20 2a 20 20 20 20 ddress>. *
8e30: 64 61 74 61 38 20 20 20 3c 76 61 72 69 61 62 6c data8 <variabl
8e40: 65 3e 0a 20 20 20 2a 20 20 20 20 64 61 74 61 38 e>. * data8
8e50: 20 20 20 3c 64 61 74 61 3e 0a 20 20 20 2a 2f 0a <data>. */.
8e60: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
8e70: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 28 6c 6f ction + 0) = (lo
8e80: 6e 67 29 20 26 74 72 61 6d 70 3b 0a 20 20 2a 28 ng) &tramp;. *(
8e90: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
8ea0: 6e 20 2b 20 38 29 20 3d 20 28 6c 6f 6e 67 29 20 n + 8) = (long)
8eb0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 31 36 29 3b (function + 16);
8ec0: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
8ed0: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 28 6c nction +16) = (l
8ee0: 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a 20 20 ong) address;.
8ef0: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
8f00: 69 6f 6e 20 2b 32 34 29 20 3d 20 28 6c 6f 6e 67 ion +24) = (long
8f10: 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 ) variable;. *(
8f20: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
8f30: 6e 20 2b 33 32 29 20 3d 20 28 6c 6f 6e 67 29 20 n +32) = (long)
8f40: 64 61 74 61 3b 0a 23 64 65 66 69 6e 65 20 69 73 data;.#define is
8f50: 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 _tramp(function)
8f60: 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 \. ((long *)
8f70: 66 75 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 function)[0] ==
8f80: 28 6c 6f 6e 67 29 20 26 74 72 61 6d 70 0a 23 64 (long) &tramp.#d
8f90: 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 efine tramp_addr
8fa0: 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ess(function) \
8fb0: 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e . ((long *) fun
8fc0: 63 74 69 6f 6e 29 5b 32 5d 0a 23 64 65 66 69 6e ction)[2].#defin
8fd0: 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 e tramp_variable
8fe0: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
8ff0: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
9000: 6f 6e 29 5b 33 5d 0a 23 64 65 66 69 6e 65 20 74 on)[3].#define t
9010: 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 ramp_data(functi
9020: 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 on) \. ((long
9030: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d 0a *) function)[4].
9040: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
9050: 78 38 36 5f 36 34 5f 5f 0a 20 20 2f 2a 20 66 75 x86_64__. /* fu
9060: 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 nction:. *
9070: 6d 6f 76 61 62 73 71 20 24 3c 64 61 74 61 3e 2c movabsq $<data>,
9080: 25 72 61 78 09 09 34 38 20 42 38 20 3c 64 61 74 %rax..48 B8 <dat
9090: 61 3e 0a 20 20 20 2a 20 20 20 20 6d 6f 76 61 62 a>. * movab
90a0: 73 71 20 25 72 61 78 2c 20 3c 76 61 72 69 61 62 sq %rax, <variab
90b0: 6c 65 3e 09 34 38 20 41 33 20 3c 76 61 72 69 61 le>.48 A3 <varia
90c0: 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 6d 6f 76 ble>. * mov
90d0: 61 62 73 71 20 24 3c 61 64 64 72 65 73 73 3e 2c absq $<address>,
90e0: 25 72 61 78 09 09 34 38 20 42 38 20 3c 61 64 64 %rax..48 B8 <add
90f0: 72 65 73 73 3e 0a 20 20 20 2a 20 20 20 20 6a 6d ress>. * jm
9100: 70 20 2a 25 72 61 78 09 09 09 46 46 20 45 30 0a p *%rax...FF E0.
9110: 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 20 */. *(short
9120: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
9130: 29 20 3d 20 30 78 42 38 34 38 3b 0a 20 20 2a 28 ) = 0xB848;. *(
9140: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
9150: 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 67 on + 2) = (unsig
9160: 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 26 ned long) data &
9170: 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e 74 0xffff;. *(int
9180: 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 *) (function
9190: 2b 20 34 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 + 4) = ((unsigne
91a0: 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 d long) data >>
91b0: 31 36 29 20 26 20 30 78 66 66 66 66 66 66 66 66 16) & 0xffffffff
91c0: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
91d0: 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 function + 8) =
91e0: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
91f0: 20 64 61 74 61 20 3e 3e 20 34 38 29 20 26 20 30 data >> 48) & 0
9200: 78 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 xffff;. *(short
9210: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
9220: 30 29 20 3d 20 30 78 41 33 34 38 3b 0a 20 20 2a 0) = 0xA348;. *
9230: 28 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 (int *) (funct
9240: 69 6f 6e 20 2b 31 32 29 20 3d 20 28 75 6e 73 69 ion +12) = (unsi
9250: 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 gned long) varia
9260: 62 6c 65 20 26 20 30 78 66 66 66 66 66 66 66 66 ble & 0xffffffff
9270: 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 ;. *(int *) (
9280: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 function +16) =
9290: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
92a0: 20 76 61 72 69 61 62 6c 65 20 3e 3e 20 33 32 29 variable >> 32)
92b0: 20 26 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 & 0xffffffff;.
92c0: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
92d0: 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 42 ction +20) = 0xB
92e0: 38 34 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 848;. *(short *
92f0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 ) (function +22)
9300: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
9310: 67 29 20 61 64 64 72 65 73 73 20 26 20 30 78 66 g) address & 0xf
9320: 66 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 fff;. *(int *)
9330: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 (function +24)
9340: 20 3d 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f = ((unsigned lo
9350: 6e 67 29 20 61 64 64 72 65 73 73 20 3e 3e 20 31 ng) address >> 1
9360: 36 29 20 26 20 30 78 66 66 66 66 66 66 66 66 3b 6) & 0xffffffff;
9370: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
9380: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 28 unction +28) = (
9390: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
93a0: 61 64 64 72 65 73 73 20 3e 3e 20 34 38 29 20 26 address >> 48) &
93b0: 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 0xffff;. *(sho
93c0: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
93d0: 2b 33 30 29 20 3d 20 30 78 45 30 46 46 3b 0a 23 +30) = 0xE0FF;.#
93e0: 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 define is_tramp(
93f0: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
9400: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
9410: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
9420: 29 20 3d 3d 20 30 78 42 38 34 38 20 26 26 20 5c ) == 0xB848 && \
9430: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
9440: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
9450: 20 2b 31 30 29 20 3d 3d 20 30 78 41 33 34 38 20 +10) == 0xA348
9460: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
9470: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
9480: 74 69 6f 6e 20 2b 32 30 29 20 3d 3d 20 30 78 42 tion +20) == 0xB
9490: 38 34 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 848 && \. *(uns
94a0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
94b0: 66 75 6e 63 74 69 6f 6e 20 2b 33 30 29 20 3d 3d function +30) ==
94c0: 20 30 78 45 30 46 46 0a 23 64 65 66 69 6e 65 20 0xE0FF.#define
94d0: 68 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f 77 6f hilo(hiword,lowo
94e0: 72 64 29 20 20 5c 0a 20 20 28 28 28 75 6e 73 69 rd) \. (((unsi
94f0: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 68 69 77 6f gned long) (hiwo
9500: 72 64 29 20 3c 3c 20 33 32 29 20 7c 20 28 75 6e rd) << 32) | (un
9510: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 6c 6f signed long) (lo
9520: 77 6f 72 64 29 29 0a 23 64 65 66 69 6e 65 20 68 word)).#define h
9530: 69 6d 69 64 6c 6f 28 68 69 73 68 6f 72 74 2c 6d imidlo(hishort,m
9540: 69 64 77 6f 72 64 2c 6c 6f 73 68 6f 72 74 29 20 idword,loshort)
9550: 20 5c 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 \. (((unsigned
9560: 20 6c 6f 6e 67 29 20 28 68 69 73 68 6f 72 74 29 long) (hishort)
9570: 20 3c 3c 20 34 38 29 20 7c 20 28 75 6e 73 69 67 << 48) | (unsig
9580: 6e 65 64 20 6c 6f 6e 67 29 20 28 6d 69 64 77 6f ned long) (midwo
9590: 72 64 29 20 3c 3c 20 31 36 20 5c 0a 20 20 20 7c rd) << 16 \. |
95a0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long)
95b0: 20 28 6c 6f 73 68 6f 72 74 29 29 0a 23 64 65 66 (loshort)).#def
95c0: 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 ine tramp_addres
95d0: 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 s(function) \.
95e0: 20 68 69 6d 69 64 6c 6f 28 2a 28 75 6e 73 69 67 himidlo(*(unsig
95f0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
9600: 6e 63 74 69 6f 6e 20 2b 32 38 29 2c 20 5c 0a 20 nction +28), \.
9610: 20 20 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 *(unsig
9620: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
9630: 6e 63 74 69 6f 6e 20 2b 32 34 29 2c 20 5c 0a 20 nction +24), \.
9640: 20 20 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 *(unsig
9650: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
9660: 6e 63 74 69 6f 6e 20 2b 32 32 29 29 0a 23 64 65 nction +22)).#de
9670: 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 fine tramp_varia
9680: 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ble(function) \
9690: 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e . hilo(*(unsign
96a0: 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 ed int *) (funct
96b0: 69 6f 6e 20 2b 31 36 29 2c 20 2a 28 75 6e 73 69 ion +16), *(unsi
96c0: 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e gned int *) (fun
96d0: 63 74 69 6f 6e 20 2b 31 32 29 29 0a 23 64 65 66 ction +12)).#def
96e0: 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 ine tramp_data(f
96f0: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 unction) \. hi
9700: 6d 69 64 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 midlo(*(unsigned
9710: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
9720: 69 6f 6e 20 2b 20 38 29 2c 20 5c 0a 20 20 20 20 ion + 8), \.
9730: 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 *(unsigned
9740: 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 int *) (funct
9750: 69 6f 6e 20 2b 20 34 29 2c 20 5c 0a 20 20 20 20 ion + 4), \.
9760: 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 *(unsigned
9770: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
9780: 69 6f 6e 20 2b 20 32 29 29 0a 23 65 6e 64 69 66 ion + 2)).#endif
9790: 0a 23 69 66 64 65 66 20 5f 5f 73 33 39 30 5f 5f .#ifdef __s390__
97a0: 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a . /* function:.
97b0: 0a 20 20 20 20 20 20 20 20 6c 72 20 20 20 20 20 . lr
97c0: 20 25 72 30 2c 25 72 31 33 0a 20 20 20 20 20 20 %r0,%r13.
97d0: 20 20 62 72 61 73 20 20 20 20 25 72 31 33 2c 2e bras %r13,.
97e0: 4c 54 4e 30 5f 30 0a 2e 4c 54 30 5f 30 3a 0a 2e LTN0_0..LT0_0:..
97f0: 4c 43 30 3a 0a 20 20 20 20 20 20 20 20 2e 6c 6f LC0:. .lo
9800: 6e 67 20 20 20 30 78 37 33 35 35 34 37 31 31 0a ng 0x73554711.
9810: 2e 4c 43 31 3a 0a 20 20 20 20 20 20 20 20 2e 6c .LC1:. .l
9820: 6f 6e 67 20 20 20 30 78 31 32 33 34 35 36 37 38 ong 0x12345678
9830: 0a 2e 4c 43 32 3a 0a 20 20 20 20 20 20 20 20 2e ..LC2:. .
9840: 6c 6f 6e 67 20 20 20 30 78 62 61 62 65 62 65 63 long 0xbabebec
9850: 30 0a 2e 4c 54 4e 30 5f 30 3a 0a 20 20 20 20 20 0..LTN0_0:.
9860: 20 20 20 6c 20 20 20 20 20 20 20 25 72 31 2c 2e l %r1,.
9870: 4c 43 30 2d 2e 4c 54 30 5f 30 28 25 72 31 33 29 LC0-.LT0_0(%r13)
9880: 0a 20 20 20 20 20 20 20 20 6d 76 63 20 20 20 20 . mvc
9890: 20 30 28 34 2c 25 72 31 29 2c 2e 4c 43 31 2d 2e 0(4,%r1),.LC1-.
98a0: 4c 54 30 5f 30 28 25 72 31 33 29 0a 20 20 20 20 LT0_0(%r13).
98b0: 20 20 20 20 6c 20 20 20 20 20 20 20 25 72 31 2c l %r1,
98c0: 2e 4c 43 32 2d 2e 4c 54 31 5f 30 28 25 72 31 33 .LC2-.LT1_0(%r13
98d0: 29 0a 20 20 20 20 20 20 20 20 6c 72 20 20 20 20 ). lr
98e0: 20 20 25 72 31 33 2c 25 72 30 0a 20 20 20 20 20 %r13,%r0.
98f0: 20 20 20 62 72 20 20 20 20 20 20 25 72 31 0a 20 br %r1.
9900: 20 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 20 61 62 */. /* What ab
9910: 6f 75 74 20 62 69 67 20 65 6e 64 69 61 6e 20 2f out big endian /
9920: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 3f little endian ?
9930: 3f 20 2a 2f 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ? */. *(unsigne
9940: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
9950: 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 31 38 tion + 0) = 0x18
9960: 30 44 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 0D;. *(unsigned
9970: 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 int *) (funct
9980: 69 6f 6e 20 2b 20 32 29 20 3d 20 30 78 41 37 44 ion + 2) = 0xA7D
9990: 35 30 30 30 38 3b 0a 20 20 2a 28 75 6e 73 69 67 50008;. *(unsig
99a0: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
99b0: 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 75 nction + 6) = (u
99c0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 76 61 72 nsigned int) var
99d0: 69 61 62 6c 65 3b 0a 20 20 2a 28 75 6e 73 69 67 iable;. *(unsig
99e0: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
99f0: 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 28 75 nction +10) = (u
9a00: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 64 61 74 nsigned int) dat
9a10: 61 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 a;. *(unsigned
9a20: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
9a30: 6f 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 67 on +14) = (unsig
9a40: 6e 65 64 20 69 6e 74 29 20 61 64 64 72 65 73 73 ned int) address
9a50: 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 ;. *(unsigned i
9a60: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
9a70: 6e 20 2b 31 38 29 20 3d 20 30 78 35 38 31 30 44 n +18) = 0x5810D
9a80: 30 30 30 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 000;. *(unsigne
9a90: 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 d int *) (func
9aa0: 74 69 6f 6e 20 2b 32 32 29 20 3d 20 30 78 44 32 tion +22) = 0xD2
9ab0: 30 33 31 30 30 30 3b 0a 20 20 2a 28 75 6e 73 69 031000;. *(unsi
9ac0: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
9ad0: 75 6e 63 74 69 6f 6e 20 2b 32 36 29 20 3d 20 30 unction +26) = 0
9ae0: 78 44 30 30 34 3b 0a 20 20 2a 28 75 6e 73 69 67 xD004;. *(unsig
9af0: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
9b00: 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 78 nction +28) = 0x
9b10: 35 38 31 30 44 30 30 38 3b 0a 20 20 2a 28 75 6e 5810D008;. *(un
9b20: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
9b30: 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d (function +32) =
9b40: 20 30 78 31 38 44 30 3b 0a 20 20 2a 28 75 6e 73 0x18D0;. *(uns
9b50: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
9b60: 66 75 6e 63 74 69 6f 6e 20 2b 33 34 29 20 3d 20 function +34) =
9b70: 30 78 30 37 66 31 3b 0a 23 64 65 66 69 6e 65 20 0x07f1;.#define
9b80: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
9b90: 6e 29 20 20 5c 0a 20 20 2a 28 73 68 6f 72 74 20 n) \. *(short
9ba0: 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e *) (fun
9bb0: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 ction + 0) == 0x
9bc0: 31 38 30 44 20 26 26 20 5c 0a 20 20 2a 28 69 6e 180D && \. *(in
9bd0: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 20 20 t *)
9be0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 3d (function + 2) =
9bf0: 3d 20 30 78 41 37 44 35 30 30 30 38 20 26 26 20 = 0xA7D50008 &&
9c00: 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 \. *(int *)
9c10: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
9c20: 6e 20 2b 31 38 29 20 3d 3d 20 30 78 35 38 31 30 n +18) == 0x5810
9c30: 44 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 69 6e D000 && \. *(in
9c40: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 20 20 t *)
9c50: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 20 3d (function +22) =
9c60: 3d 20 30 78 44 32 30 33 31 30 30 30 20 26 26 20 = 0xD2031000 &&
9c70: 5c 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 20 \. *(short *)
9c80: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
9c90: 6e 20 2b 32 36 29 20 3d 3d 20 30 78 44 30 30 34 n +26) == 0xD004
9ca0: 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 && \. *(int *)
9cb0: 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e (fun
9cc0: 63 74 69 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 ction +28) == 0x
9cd0: 35 38 31 30 44 30 30 38 20 26 26 20 5c 0a 20 20 5810D008 && \.
9ce0: 2a 28 73 68 6f 72 74 20 2a 29 20 20 20 20 20 20 *(short *)
9cf0: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 (function +3
9d00: 32 29 20 3d 3d 20 30 78 31 38 44 30 20 26 26 20 2) == 0x18D0 &&
9d10: 5c 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 20 \. *(short *)
9d20: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
9d30: 6e 20 2b 33 34 29 20 3d 3d 20 30 78 30 37 66 31 n +34) == 0x07f1
9d40: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
9d50: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
9d60: 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 \. *(unsigned
9d70: 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f int *) (functio
9d80: 6e 20 2b 31 34 29 0a 23 64 65 66 69 6e 65 20 74 n +14).#define t
9d90: 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 ramp_variable(fu
9da0: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 nction) \. *(u
9db0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 nsigned int *) (
9dc0: 66 75 6e 63 74 69 6f 6e 20 2b 36 29 0a 23 64 65 function +6).#de
9dd0: 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 fine tramp_data(
9de0: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
9df0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
9e00: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 0a (function +10).
9e10: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 33 2e 20 #endif.. /* 3.
9e20: 53 65 74 20 6d 65 6d 6f 72 79 20 70 72 6f 74 65 Set memory prote
9e30: 63 74 69 6f 6e 20 74 6f 20 22 65 78 65 63 75 74 ction to "execut
9e40: 61 62 6c 65 22 20 2a 2f 0a 0a 23 69 66 20 21 64 able" */..#if !d
9e50: 65 66 69 6e 65 64 28 43 4f 44 45 5f 45 58 45 43 efined(CODE_EXEC
9e60: 55 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e UTABLE) && defin
9e70: 65 64 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 ed(EXECUTABLE_VI
9e80: 41 5f 4d 50 52 4f 54 45 43 54 29 0a 20 20 2f 2a A_MPROTECT). /*
9e90: 20 43 61 6c 6c 20 6d 70 72 6f 74 65 63 74 20 6f Call mprotect o
9ea0: 6e 20 74 68 65 20 70 61 67 65 73 20 74 68 61 74 n the pages that
9eb0: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 61 6e contain the ran
9ec0: 67 65 2e 20 2a 2f 0a 20 20 7b 20 75 6e 73 69 67 ge. */. { unsig
9ed0: 6e 65 64 20 6c 6f 6e 67 20 73 74 61 72 74 5f 61 ned long start_a
9ee0: 64 64 72 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 ddr = (unsigned
9ef0: 6c 6f 6e 67 29 20 66 75 6e 63 74 69 6f 6e 3b 0a long) function;.
9f00: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e unsigned lon
9f10: 67 20 65 6e 64 5f 61 64 64 72 20 3d 20 28 75 6e g end_addr = (un
9f20: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 66 75 signed long) (fu
9f30: 6e 63 74 69 6f 6e 20 2b 20 54 52 41 4d 50 5f 4c nction + TRAMP_L
9f40: 45 4e 47 54 48 29 3b 0a 20 20 20 20 73 74 61 72 ENGTH);. star
9f50: 74 5f 61 64 64 72 20 3d 20 73 74 61 72 74 5f 61 t_addr = start_a
9f60: 64 64 72 20 26 20 2d 70 61 67 65 73 69 7a 65 3b ddr & -pagesize;
9f70: 0a 20 20 20 20 65 6e 64 5f 61 64 64 72 20 3d 20 . end_addr =
9f80: 28 65 6e 64 5f 61 64 64 72 20 2b 20 70 61 67 65 (end_addr + page
9f90: 73 69 7a 65 2d 31 29 20 26 20 2d 70 61 67 65 73 size-1) & -pages
9fa0: 69 7a 65 3b 0a 20 20 20 7b 75 6e 73 69 67 6e 65 ize;. {unsigne
9fb0: 64 20 6c 6f 6e 67 20 6c 65 6e 20 3d 20 65 6e 64 d long len = end
9fc0: 5f 61 64 64 72 20 2d 20 73 74 61 72 74 5f 61 64 _addr - start_ad
9fd0: 64 72 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dr;.#if defined(
9fe0: 48 41 56 45 5f 4d 41 43 48 5f 56 4d 29 0a 20 20 HAVE_MACH_VM).
9ff0: 20 20 69 66 20 28 76 6d 5f 70 72 6f 74 65 63 74 if (vm_protect
a000: 28 74 61 73 6b 5f 73 65 6c 66 28 29 2c 73 74 61 (task_self(),sta
a010: 72 74 5f 61 64 64 72 2c 6c 65 6e 2c 30 2c 56 4d rt_addr,len,0,VM
a020: 5f 50 52 4f 54 5f 52 45 41 44 7c 56 4d 5f 50 52 _PROT_READ|VM_PR
a030: 4f 54 5f 57 52 49 54 45 7c 56 4d 5f 50 52 4f 54 OT_WRITE|VM_PROT
a040: 5f 45 58 45 43 55 54 45 29 20 21 3d 20 4b 45 52 _EXECUTE) != KER
a050: 4e 5f 53 55 43 43 45 53 53 29 0a 23 65 6c 73 65 N_SUCCESS).#else
a060: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 63 .#if defined(__c
a070: 6f 6e 76 65 78 5f 5f 29 0a 20 20 20 20 2f 2a 20 onvex__). /*
a080: 43 6f 6e 76 65 78 20 4f 53 20 63 61 6c 6c 73 20 Convex OS calls
a090: 69 74 20 60 6d 72 65 6d 61 70 28 29 27 2e 20 2a it `mremap()'. *
a0a0: 2f 0a 20 20 20 20 6d 72 65 6d 61 70 28 73 74 61 /. mremap(sta
a0b0: 72 74 5f 61 64 64 72 2c 20 26 6c 65 6e 2c 20 50 rt_addr, &len, P
a0c0: 52 4f 54 5f 52 45 41 44 7c 50 52 4f 54 5f 57 52 ROT_READ|PROT_WR
a0d0: 49 54 45 7c 50 52 4f 54 5f 45 58 45 43 2c 20 4d ITE|PROT_EXEC, M
a0e0: 41 50 5f 50 52 49 56 41 54 45 29 3b 0a 20 20 20 AP_PRIVATE);.
a0f0: 20 69 66 20 28 30 29 0a 23 65 6c 73 65 0a 23 69 if (0).#else.#i
a100: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 f defined(HAVE_S
a110: 59 53 5f 4d 38 38 4b 42 43 53 5f 48 29 0a 20 20 YS_M88KBCS_H).
a120: 20 20 69 66 20 28 6d 65 6d 63 74 6c 28 73 74 61 if (memctl(sta
a130: 72 74 5f 61 64 64 72 2c 20 6c 65 6e 2c 20 4d 43 rt_addr, len, MC
a140: 54 5f 54 45 58 54 29 20 3d 3d 20 2d 31 29 0a 23 T_TEXT) == -1).#
a150: 65 6c 73 65 0a 20 20 20 20 69 66 20 28 6d 70 72 else. if (mpr
a160: 6f 74 65 63 74 28 28 76 6f 69 64 2a 29 73 74 61 otect((void*)sta
a170: 72 74 5f 61 64 64 72 2c 20 6c 65 6e 2c 20 50 52 rt_addr, len, PR
a180: 4f 54 5f 52 45 41 44 7c 50 52 4f 54 5f 57 52 49 OT_READ|PROT_WRI
a190: 54 45 7c 50 52 4f 54 5f 45 58 45 43 29 20 3c 20 TE|PROT_EXEC) <
a1a0: 30 29 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0).#endif.#endif
a1b0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7b 20 .#endif. {
a1c0: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 fprintf(stderr,"
a1d0: 74 72 61 6d 70 6f 6c 69 6e 65 3a 20 63 61 6e 6e trampoline: cann
a1e0: 6f 74 20 6d 61 6b 65 20 6d 65 6d 6f 72 79 20 65 ot make memory e
a1f0: 78 65 63 75 74 61 62 6c 65 5c 6e 22 29 3b 20 61 xecutable\n"); a
a200: 62 6f 72 74 28 29 3b 20 7d 0a 20 20 7d 7d 0a 23 bort(); }. }}.#
a210: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 34 2e 20 46 endif.. /* 4. F
a220: 6c 75 73 68 20 69 6e 73 74 72 75 63 74 69 6f 6e lush instruction
a230: 20 63 61 63 68 65 20 2a 2f 0a 20 20 2f 2a 20 57 cache */. /* W
a240: 65 20 6e 65 65 64 20 74 68 69 73 20 62 65 63 61 e need this beca
a250: 75 73 65 20 73 6f 6d 65 20 43 50 55 73 20 68 61 use some CPUs ha
a260: 76 65 20 73 65 70 61 72 61 74 65 20 64 61 74 61 ve separate data
a270: 20 63 61 63 68 65 20 61 6e 64 20 69 6e 73 74 72 cache and instr
a280: 75 63 74 69 6f 6e 0a 20 20 20 2a 20 63 61 63 68 uction. * cach
a290: 65 2e 20 54 68 65 20 66 72 65 73 68 6c 79 20 62 e. The freshly b
a2a0: 75 69 6c 74 20 74 72 61 6d 70 6f 6c 69 6e 65 20 uilt trampoline
a2b0: 69 73 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68 is visible to th
a2c0: 65 20 64 61 74 61 20 63 61 63 68 65 2c 20 62 75 e data cache, bu
a2d0: 74 20 6e 6f 74 0a 20 20 20 2a 20 6d 61 79 62 65 t not. * maybe
a2e0: 20 6e 6f 74 20 74 6f 20 74 68 65 20 69 6e 73 74 not to the inst
a2f0: 72 75 63 74 69 6f 6e 20 63 61 63 68 65 2e 20 54 ruction cache. T
a300: 68 69 73 20 69 73 20 68 61 69 72 79 2e 0a 20 20 his is hairy..
a310: 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 */.#if !(define
a320: 64 28 5f 5f 68 70 70 61 6e 65 77 5f 5f 29 20 7c d(__hppanew__) |
a330: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 72 73 36 30 | defined(__rs60
a340: 30 30 61 69 78 5f 5f 29 20 7c 7c 20 64 65 66 69 00aix__) || defi
a350: 6e 65 64 28 5f 5f 69 61 36 34 5f 5f 29 29 0a 20 ned(__ia64__)).
a360: 20 2f 2a 20 4f 6e 6c 79 20 6e 65 65 64 65 64 20 /* Only needed
a370: 69 66 20 77 65 20 72 65 61 6c 6c 79 20 73 65 74 if we really set
a380: 20 75 70 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 up machine inst
a390: 72 75 63 74 69 6f 6e 73 2e 20 2a 2f 0a 23 69 66 ructions. */.#if
a3a0: 64 65 66 20 5f 5f 69 33 38 36 5f 5f 0a 23 69 66 def __i386__.#if
a3b0: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 defined(_WIN32)
a3c0: 0a 20 20 77 68 69 6c 65 20 28 21 46 6c 75 73 68 . while (!Flush
a3d0: 49 6e 73 74 72 75 63 74 69 6f 6e 43 61 63 68 65 InstructionCache
a3e0: 28 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 (GetCurrentProce
a3f0: 73 73 28 29 2c 66 75 6e 63 74 69 6f 6e 2c 54 52 ss(),function,TR
a400: 41 4d 50 5f 4c 45 4e 47 54 48 29 29 0a 20 20 20 AMP_LENGTH)).
a410: 20 63 6f 6e 74 69 6e 75 65 3b 0a 23 65 6e 64 69 continue;.#endi
a420: 66 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 f.#endif.#ifdef
a430: 5f 5f 6d 36 38 6b 5f 5f 0a 23 69 66 20 64 65 66 __m68k__.#if def
a440: 69 6e 65 64 28 4e 65 58 54 29 20 26 26 20 64 65 ined(NeXT) && de
a450: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a fined(__GNUC__).
a460: 20 20 5f 5f 61 73 6d 5f 5f 20 5f 5f 76 6f 6c 61 __asm__ __vola
a470: 74 69 6c 65 5f 5f 20 28 22 74 72 61 70 20 23 32 tile__ ("trap #2
a480: 22 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 ");.#endif.#if d
a490: 65 66 69 6e 65 64 28 41 4d 49 47 41 29 0a 20 20 efined(AMIGA).
a4a0: 43 61 63 68 65 43 6c 65 61 72 45 28 66 75 6e 63 CacheClearE(func
a4b0: 74 69 6f 6e 2c 54 52 41 4d 50 5f 4c 45 4e 47 54 tion,TRAMP_LENGT
a4c0: 48 2c 43 41 43 52 46 5f 43 6c 65 61 72 49 7c 43 H,CACRF_ClearI|C
a4d0: 41 43 52 46 5f 43 6c 65 61 72 44 29 3b 0a 23 65 ACRF_ClearD);.#e
a4e0: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 ndif.#if defined
a4f0: 28 61 70 6f 6c 6c 6f 29 0a 20 20 63 61 63 68 65 (apollo). cache
a500: 5f 24 63 6c 65 61 72 28 29 3b 0a 23 65 6e 64 69 _$clear();.#endi
a510: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 68 70 f.#if defined(hp
a520: 75 78 29 0a 20 20 63 61 63 68 65 63 74 6c 28 43 ux). cachectl(C
a530: 43 5f 49 50 55 52 47 45 2c 66 75 6e 63 74 69 6f C_IPURGE,functio
a540: 6e 2c 54 52 41 4d 50 5f 4c 45 4e 47 54 48 29 3b n,TRAMP_LENGTH);
a550: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
a560: 6e 65 64 28 5f 5f 4e 65 74 42 53 44 5f 5f 29 20 ned(__NetBSD__)
a570: 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 && defined(__GNU
a580: 43 5f 5f 29 0a 20 20 7b 20 72 65 67 69 73 74 65 C__). { registe
a590: 72 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 r unsigned long
a5a0: 5f 62 65 67 20 5f 5f 61 73 6d 5f 5f 20 28 22 25 _beg __asm__ ("%
a5b0: 61 31 22 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 a1") = (unsigned
a5c0: 20 6c 6f 6e 67 29 20 66 75 6e 63 74 69 6f 6e 3b long) function;
a5d0: 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 75 6e . register un
a5e0: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 5f 6c 65 6e signed long _len
a5f0: 20 5f 5f 61 73 6d 5f 5f 20 28 22 25 64 31 22 29 __asm__ ("%d1")
a600: 20 3d 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 3b = TRAMP_LENGTH;
a610: 0a 20 20 20 20 5f 5f 61 73 6d 5f 5f 20 5f 5f 76 . __asm__ __v
a620: 6f 6c 61 74 69 6c 65 5f 5f 20 28 0a 20 20 20 20 olatile__ (.
a630: 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 30 78 38 "move%.l %#0x8
a640: 30 30 30 30 30 30 34 2c 25 2f 64 30 5c 6e 5c 74 0000004,%/d0\n\t
a650: 22 20 2f 2a 20 43 43 5f 45 58 54 50 55 52 47 45 " /* CC_EXTPURGE
a660: 20 7c 20 43 5f 49 50 55 52 47 45 20 2a 2f 0a 20 | C_IPURGE */.
a670: 20 20 20 20 20 22 74 72 61 70 20 23 31 32 22 20 "trap #12"
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a690: 20 20 20 20 20 2f 2a 20 6b 65 72 6e 65 6c 20 63 /* kernel c
a6a0: 61 6c 6c 20 60 63 61 63 68 65 63 74 6c 27 20 2a all `cachectl' *
a6b0: 2f 0a 20 20 20 20 20 20 3a 0a 20 20 20 20 20 20 /. :.
a6c0: 3a 20 22 61 22 20 28 5f 62 65 67 29 2c 20 22 64 : "a" (_beg), "d
a6d0: 22 20 28 5f 6c 65 6e 29 0a 20 20 20 20 20 20 3a " (_len). :
a6e0: 20 22 25 61 30 22 2c 20 22 25 61 31 22 2c 20 22 "%a0", "%a1", "
a6f0: 25 64 30 22 2c 20 22 25 64 31 22 20 20 20 20 2f %d0", "%d1" /
a700: 2a 20 63 61 6c 6c 2d 75 73 65 64 20 72 65 67 69 * call-used regi
a710: 73 74 65 72 73 20 2a 2f 0a 20 20 20 20 20 20 29 sters */. )
a720: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 ;. }.#endif.#if
a730: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 defined(__linux
a740: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f __) && defined(_
a750: 5f 47 4e 55 43 5f 5f 29 0a 20 20 7b 20 72 65 67 _GNUC__). { reg
a760: 69 73 74 65 72 20 75 6e 73 69 67 6e 65 64 20 6c ister unsigned l
a770: 6f 6e 67 20 5f 62 65 67 20 5f 5f 61 73 6d 5f 5f ong _beg __asm__
a780: 20 28 22 25 64 31 22 29 20 3d 20 28 75 6e 73 69 ("%d1") = (unsi
a790: 67 6e 65 64 20 6c 6f 6e 67 29 20 66 75 6e 63 74 gned long) funct
a7a0: 69 6f 6e 3b 0a 20 20 20 20 72 65 67 69 73 74 65 ion;. registe
a7b0: 72 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 r unsigned long
a7c0: 5f 6c 65 6e 20 5f 5f 61 73 6d 5f 5f 20 28 22 25 _len __asm__ ("%
a7d0: 64 34 22 29 20 3d 20 54 52 41 4d 50 5f 4c 45 4e d4") = TRAMP_LEN
a7e0: 47 54 48 20 2b 20 33 32 3b 0a 20 20 20 20 5f 5f GTH + 32;. __
a7f0: 61 73 6d 5f 5f 20 5f 5f 76 6f 6c 61 74 69 6c 65 asm__ __volatile
a800: 5f 5f 20 28 0a 20 20 20 20 20 20 22 6d 6f 76 65 __ (. "move
a810: 25 2e 6c 20 25 23 31 32 33 2c 25 2f 64 30 5c 6e %.l %#123,%/d0\n
a820: 5c 74 22 0a 20 20 20 20 20 20 22 6d 6f 76 65 25 \t". "move%
a830: 2e 6c 20 25 23 31 2c 25 2f 64 32 5c 6e 5c 74 22 .l %#1,%/d2\n\t"
a840: 0a 20 20 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 . "move%.l
a850: 25 23 33 2c 25 2f 64 33 5c 6e 5c 74 22 0a 20 20 %#3,%/d3\n\t".
a860: 20 20 20 20 22 74 72 61 70 20 25 23 30 22 0a 20 "trap %#0".
a870: 20 20 20 20 20 3a 0a 20 20 20 20 20 20 3a 20 22 :. : "
a880: 64 22 20 28 5f 62 65 67 29 2c 20 22 64 22 20 28 d" (_beg), "d" (
a890: 5f 6c 65 6e 29 0a 20 20 20 20 20 20 3a 20 22 25 _len). : "%
a8a0: 64 30 22 2c 20 22 25 64 32 22 2c 20 22 25 64 33 d0", "%d2", "%d3
a8b0: 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 7d 0a 23 ". );. }.#
a8c0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
a8d0: 64 28 41 55 58 29 20 26 26 20 64 65 66 69 6e 65 d(AUX) && define
a8e0: 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 20 20 2f 2a d(__GNUC__). /*
a8f0: 20 73 79 73 6d 36 38 6b 28 31 30 35 2c 20 61 64 sysm68k(105, ad
a900: 64 72 2c 20 73 63 6f 70 65 2c 20 63 61 63 68 65 dr, scope, cache
a910: 2c 20 6c 65 6e 29 20 2a 2f 0a 20 20 5f 5f 61 73 , len) */. __as
a920: 6d 5f 5f 20 5f 5f 76 6f 6c 61 74 69 6c 65 5f 5f m__ __volatile__
a930: 20 28 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 (. "move%.l
a940: 25 31 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 %1,%/sp@-\n\t".
a950: 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 33 2c "move%.l %#3,
a960: 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 20 %/sp@-\n\t".
a970: 22 6d 6f 76 65 25 2e 6c 20 25 23 31 2c 25 2f 73 "move%.l %#1,%/s
a980: 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 20 22 6d 6f p@-\n\t". "mo
a990: 76 65 25 2e 6c 20 25 30 2c 25 2f 73 70 40 2d 5c ve%.l %0,%/sp@-\
a9a0: 6e 5c 74 22 0a 20 20 20 20 22 6d 6f 76 65 25 2e n\t". "move%.
a9b0: 6c 20 25 23 31 30 35 2c 25 2f 73 70 40 2d 5c 6e l %#105,%/sp@-\n
a9c0: 5c 74 22 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c \t". "move%.l
a9d0: 20 25 23 30 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 %#0,%/sp@-\n\t"
a9e0: 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 . "move%.l %#
a9f0: 33 38 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 38,%/sp@-\n\t".
aa00: 20 20 20 22 74 72 61 70 20 25 23 30 5c 6e 5c 74 "trap %#0\n\t
aa10: 22 0a 20 20 20 20 22 61 64 64 25 2e 6c 20 25 23 ". "add%.l %#
aa20: 32 34 2c 25 2f 73 70 22 0a 20 20 20 20 3a 0a 20 24,%/sp". :.
aa30: 20 20 20 3a 20 22 72 22 20 28 66 75 6e 63 74 69 : "r" (functi
aa40: 6f 6e 29 2c 20 22 67 22 20 28 28 69 6e 74 29 54 on), "g" ((int)T
aa50: 52 41 4d 50 5f 4c 45 4e 47 54 48 29 0a 20 20 20 RAMP_LENGTH).
aa60: 20 3a 20 22 25 64 30 22 0a 20 20 20 20 29 3b 0a : "%d0". );.
aa70: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 #endif.#endif.#i
aa80: 66 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 f defined(__mips
aa90: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
aaa0: 5f 6d 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 _mipsn32__) || d
aab0: 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f efined(__mips64_
aac0: 5f 29 0a 20 20 63 61 63 68 65 66 6c 75 73 68 28 _). cacheflush(
aad0: 66 75 6e 63 74 69 6f 6e 2c 54 52 41 4d 50 5f 4c function,TRAMP_L
aae0: 45 4e 47 54 48 2c 49 43 41 43 48 45 29 3b 0a 20 ENGTH,ICACHE);.
aaf0: 20 2f 2a 20 67 66 6f 72 74 68 2d 30 2e 33 2e 30 /* gforth-0.3.0
ab00: 20 75 73 65 73 20 42 43 41 43 48 45 20 69 6e 73 uses BCACHE ins
ab10: 74 65 61 64 20 6f 66 20 49 43 41 43 48 45 2e 20 tead of ICACHE.
ab20: 57 68 79 3f 3f 20 2a 2f 0a 23 65 6e 64 69 66 0a Why?? */.#endif.
ab30: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 #if defined(__sp
ab40: 61 72 63 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 arc__) || define
ab50: 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 20 d(__sparc64__).
ab60: 20 2f 2a 20 54 68 69 73 20 61 73 73 75 6d 65 73 /* This assumes
ab70: 20 74 68 61 74 20 74 68 65 20 74 72 61 6d 70 6f that the trampo
ab80: 6c 69 6e 65 20 66 69 74 73 20 69 6e 20 61 74 20 line fits in at
ab90: 6d 6f 73 74 20 66 6f 75 72 20 63 61 63 68 65 20 most four cache
aba0: 6c 69 6e 65 73 2e 20 2a 2f 0a 20 20 5f 5f 54 52 lines. */. __TR
abb0: 5f 63 6c 65 61 72 5f 63 61 63 68 65 5f 34 28 66 _clear_cache_4(f
abc0: 75 6e 63 74 69 6f 6e 2c 66 75 6e 63 74 69 6f 6e unction,function
abd0: 2b 54 52 41 4d 50 5f 4c 45 4e 47 54 48 2d 31 29 +TRAMP_LENGTH-1)
abe0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 ;.#endif.#ifdef
abf0: 5f 5f 61 6c 70 68 61 5f 5f 0a 20 20 5f 5f 54 52 __alpha__. __TR
ac00: 5f 63 6c 65 61 72 5f 63 61 63 68 65 28 29 3b 0a _clear_cache();.
ac10: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
ac20: 68 70 70 61 5f 5f 0a 20 20 2f 2a 20 54 68 69 73 hppa__. /* This
ac30: 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 assumes that th
ac40: 65 20 74 72 61 6d 70 6f 6c 69 6e 65 20 66 69 74 e trampoline fit
ac50: 73 20 69 6e 20 61 74 20 6d 6f 73 74 20 74 77 6f s in at most two
ac60: 20 63 61 63 68 65 20 6c 69 6e 65 73 2e 20 2a 2f cache lines. */
ac70: 0a 20 20 5f 5f 54 52 5f 63 6c 65 61 72 5f 63 61 . __TR_clear_ca
ac80: 63 68 65 28 66 75 6e 63 74 69 6f 6e 2c 66 75 6e che(function,fun
ac90: 63 74 69 6f 6e 2b 54 52 41 4d 50 5f 4c 45 4e 47 ction+TRAMP_LENG
aca0: 54 48 2d 31 29 3b 0a 23 65 6e 64 69 66 0a 23 69 TH-1);.#endif.#i
acb0: 66 64 65 66 20 5f 5f 61 72 6d 5f 5f 0a 20 20 2f fdef __arm__. /
acc0: 2a 20 54 68 69 73 20 43 50 55 20 64 6f 65 73 20 * This CPU does
acd0: 6e 6f 74 20 68 61 76 65 20 61 20 73 65 70 61 72 not have a separ
ace0: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 ate instruction
acf0: 63 61 63 68 65 2e 20 28 49 20 74 68 69 6e 6b 2e cache. (I think.
ad00: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 ) */.#endif.#ifd
ad10: 65 66 20 5f 5f 72 73 36 30 30 30 5f 5f 0a 20 20 ef __rs6000__.
ad20: 5f 5f 54 52 5f 63 6c 65 61 72 5f 63 61 63 68 65 __TR_clear_cache
ad30: 28 66 75 6e 63 74 69 6f 6e 29 3b 0a 23 65 6e 64 (function);.#end
ad40: 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 38 38 6b if.#ifdef __m88k
ad50: 5f 5f 0a 20 20 73 79 73 6d 6f 74 28 53 38 38 43 __. sysmot(S88C
ad60: 41 43 48 45 46 4c 55 53 48 50 41 47 45 2c 20 28 ACHEFLUSHPAGE, (
ad70: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 66 75 unsigned long)fu
ad80: 6e 63 74 69 6f 6e 20 26 20 2d 70 61 67 65 73 69 nction & -pagesi
ad90: 7a 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 ze);.#endif.#ifd
ada0: 65 66 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a 20 20 ef __convex__.
adb0: 5f 5f 54 52 5f 63 6c 65 61 72 5f 63 61 63 68 65 __TR_clear_cache
adc0: 28 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 ();.#endif.#endi
add0: 66 0a 0a 20 20 2f 2a 20 35 2e 20 52 65 74 75 72 f.. /* 5. Retur
ade0: 6e 2e 20 2a 2f 0a 20 20 72 65 74 75 72 6e 20 28 n. */. return (
adf0: 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 29 20 28 __TR_function) (
ae00: 66 75 6e 63 74 69 6f 6e 20 2b 20 54 52 41 4d 50 function + TRAMP
ae10: 5f 42 49 41 53 29 3b 0a 7d 0a 0a 23 69 66 20 64 _BIAS);.}..#if d
ae20: 65 66 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f 29 efined(__STDC__)
ae30: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e || defined(__GN
ae40: 55 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 UC__) || defined
ae50: 28 5f 5f 63 70 6c 75 73 70 6c 75 73 29 0a 76 6f (__cplusplus).vo
ae60: 69 64 20 66 72 65 65 5f 74 72 61 6d 70 6f 6c 69 id free_trampoli
ae70: 6e 65 20 28 5f 5f 54 52 5f 66 75 6e 63 74 69 6f ne (__TR_functio
ae80: 6e 20 66 75 6e 63 74 69 6f 6e 29 0a 23 65 6c 73 n function).#els
ae90: 65 0a 76 6f 69 64 20 66 72 65 65 5f 74 72 61 6d e.void free_tram
aea0: 70 6f 6c 69 6e 65 20 28 66 75 6e 63 74 69 6f 6e poline (function
aeb0: 29 0a 20 20 5f 5f 54 52 5f 66 75 6e 63 74 69 6f ). __TR_functio
aec0: 6e 20 66 75 6e 63 74 69 6f 6e 3b 0a 23 65 6e 64 n function;.#end
aed0: 69 66 0a 7b 0a 23 69 66 20 54 52 41 4d 50 5f 42 if.{.#if TRAMP_B
aee0: 49 41 53 0a 20 20 66 75 6e 63 74 69 6f 6e 20 3d IAS. function =
aef0: 20 28 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 29 (__TR_function)
af00: 28 28 63 68 61 72 2a 29 66 75 6e 63 74 69 6f 6e ((char*)function
af10: 20 2d 20 54 52 41 4d 50 5f 42 49 41 53 29 3b 0a - TRAMP_BIAS);.
af20: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 #endif.#if !defi
af30: 6e 65 64 28 43 4f 44 45 5f 45 58 45 43 55 54 41 ned(CODE_EXECUTA
af40: 42 4c 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 BLE) && !defined
af50: 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f (EXECUTABLE_VIA_
af60: 4d 50 52 4f 54 45 43 54 29 0a 20 20 2a 28 63 68 MPROTECT). *(ch
af70: 61 72 2a 2a 29 66 75 6e 63 74 69 6f 6e 20 3d 20 ar**)function =
af80: 66 72 65 65 6c 69 73 74 3b 20 66 72 65 65 6c 69 freelist; freeli
af90: 73 74 20 3d 20 28 63 68 61 72 2a 29 66 75 6e 63 st = (char*)func
afa0: 74 69 6f 6e 3b 0a 20 20 2f 2a 20 49 74 20 69 73 tion;. /* It is
afb0: 20 70 72 6f 62 61 62 6c 79 20 6e 6f 74 20 77 6f probably not wo
afc0: 72 74 68 20 63 61 6c 6c 69 6e 67 20 6d 75 6e 6d rth calling munm
afd0: 61 70 28 29 20 66 6f 72 20 65 6e 74 69 72 65 6c ap() for entirel
afe0: 79 20 66 72 65 65 64 20 70 61 67 65 73 2e 20 2a y freed pages. *
aff0: 2f 0a 23 65 6c 73 65 0a 20 20 66 72 65 65 28 28 /.#else. free((
b000: 28 63 68 61 72 2a 2a 29 66 75 6e 63 74 69 6f 6e (char**)function
b010: 29 5b 2d 31 5d 29 3b 0a 23 65 6e 64 69 66 0a 7d )[-1]);.#endif.}
b020: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f ..#if defined(__
b030: 53 54 44 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e STDC__) || defin
b040: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 7c 7c 20 ed(__GNUC__) ||
b050: 64 65 66 69 6e 65 64 28 5f 5f 63 70 6c 75 73 70 defined(__cplusp
b060: 6c 75 73 29 0a 69 6e 74 20 69 73 5f 74 72 61 6d lus).int is_tram
b070: 70 6f 6c 69 6e 65 20 28 76 6f 69 64 2a 20 66 75 poline (void* fu
b080: 6e 63 74 69 6f 6e 29 0a 23 65 6c 73 65 0a 69 6e nction).#else.in
b090: 74 20 69 73 5f 74 72 61 6d 70 6f 6c 69 6e 65 20 t is_trampoline
b0a0: 28 66 75 6e 63 74 69 6f 6e 29 0a 20 20 76 6f 69 (function). voi
b0b0: 64 2a 20 66 75 6e 63 74 69 6f 6e 3b 0a 23 65 6e d* function;.#en
b0c0: 64 69 66 0a 7b 0a 23 69 66 64 65 66 20 69 73 5f dif.{.#ifdef is_
b0d0: 74 72 61 6d 70 0a 23 69 66 64 65 66 20 5f 5f 68 tramp.#ifdef __h
b0e0: 70 70 61 6e 65 77 5f 5f 0a 20 20 76 6f 69 64 2a ppanew__. void*
b0f0: 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 20 3d tramp_address =
b100: 20 26 74 72 61 6d 70 3b 0a 20 20 69 66 20 28 21 &tramp;. if (!
b110: 28 28 28 6c 6f 6e 67 29 66 75 6e 63 74 69 6f 6e (((long)function
b120: 20 26 20 33 29 20 3d 3d 20 28 54 52 41 4d 50 5f & 3) == (TRAMP_
b130: 42 49 41 53 20 26 20 33 29 29 29 20 72 65 74 75 BIAS & 3))) retu
b140: 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 72 rn 0;.#endif. r
b150: 65 74 75 72 6e 20 28 28 69 73 5f 74 72 61 6d 70 eturn ((is_tramp
b160: 28 28 28 63 68 61 72 2a 29 66 75 6e 63 74 69 6f (((char*)functio
b170: 6e 20 2d 20 54 52 41 4d 50 5f 42 49 41 53 29 29 n - TRAMP_BIAS))
b180: 29 20 3f 20 31 20 3a 20 30 29 3b 0a 23 65 6c 73 ) ? 1 : 0);.#els
b190: 65 0a 20 20 61 62 6f 72 74 28 29 3b 0a 23 65 6e e. abort();.#en
b1a0: 64 69 66 0a 7d 0a 0a 23 69 66 20 64 65 66 69 6e dif.}..#if defin
b1b0: 65 64 28 5f 5f 53 54 44 43 5f 5f 29 20 7c 7c 20 ed(__STDC__) ||
b1c0: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f defined(__GNUC__
b1d0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 63 ) || defined(__c
b1e0: 70 6c 75 73 70 6c 75 73 29 0a 5f 5f 54 52 5f 66 plusplus).__TR_f
b1f0: 75 6e 63 74 69 6f 6e 20 74 72 61 6d 70 6f 6c 69 unction trampoli
b200: 6e 65 5f 61 64 64 72 65 73 73 20 28 76 6f 69 64 ne_address (void
b210: 2a 20 66 75 6e 63 74 69 6f 6e 29 0a 23 65 6c 73 * function).#els
b220: 65 0a 5f 5f 54 52 5f 66 75 6e 63 74 69 6f 6e 20 e.__TR_function
b230: 74 72 61 6d 70 6f 6c 69 6e 65 5f 61 64 64 72 65 trampoline_addre
b240: 73 73 20 28 66 75 6e 63 74 69 6f 6e 29 0a 20 20 ss (function).
b250: 76 6f 69 64 2a 20 66 75 6e 63 74 69 6f 6e 3b 0a void* function;.
b260: 23 65 6e 64 69 66 0a 7b 0a 23 69 66 64 65 66 20 #endif.{.#ifdef
b270: 74 72 61 6d 70 5f 61 64 64 72 65 73 73 0a 20 20 tramp_address.
b280: 72 65 74 75 72 6e 20 28 5f 5f 54 52 5f 66 75 6e return (__TR_fun
b290: 63 74 69 6f 6e 29 28 74 72 61 6d 70 5f 61 64 64 ction)(tramp_add
b2a0: 72 65 73 73 28 28 28 63 68 61 72 2a 29 66 75 6e ress(((char*)fun
b2b0: 63 74 69 6f 6e 20 2d 20 54 52 41 4d 50 5f 42 49 ction - TRAMP_BI
b2c0: 41 53 29 29 29 3b 0a 23 65 6c 73 65 0a 20 20 61 AS)));.#else. a
b2d0: 62 6f 72 74 28 29 3b 0a 23 65 6e 64 69 66 0a 7d bort();.#endif.}
b2e0: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f ..#if defined(__
b2f0: 53 54 44 43 5f 5f 29 20 7c 7c 20 64 65 66 69 6e STDC__) || defin
b300: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 7c 7c 20 ed(__GNUC__) ||
b310: 64 65 66 69 6e 65 64 28 5f 5f 63 70 6c 75 73 70 defined(__cplusp
b320: 6c 75 73 29 0a 76 6f 69 64 2a 20 74 72 61 6d 70 lus).void* tramp
b330: 6f 6c 69 6e 65 5f 76 61 72 69 61 62 6c 65 20 28 oline_variable (
b340: 76 6f 69 64 2a 20 66 75 6e 63 74 69 6f 6e 29 0a void* function).
b350: 23 65 6c 73 65 0a 76 6f 69 64 2a 20 74 72 61 6d #else.void* tram
b360: 70 6f 6c 69 6e 65 5f 76 61 72 69 61 62 6c 65 20 poline_variable
b370: 28 66 75 6e 63 74 69 6f 6e 29 0a 20 20 76 6f 69 (function). voi
b380: 64 2a 20 66 75 6e 63 74 69 6f 6e 3b 0a 23 65 6e d* function;.#en
b390: 64 69 66 0a 7b 0a 23 69 66 64 65 66 20 74 72 61 dif.{.#ifdef tra
b3a0: 6d 70 5f 76 61 72 69 61 62 6c 65 0a 20 20 72 65 mp_variable. re
b3b0: 74 75 72 6e 20 28 76 6f 69 64 2a 29 28 74 72 61 turn (void*)(tra
b3c0: 6d 70 5f 76 61 72 69 61 62 6c 65 28 28 28 63 68 mp_variable(((ch
b3d0: 61 72 2a 29 66 75 6e 63 74 69 6f 6e 20 2d 20 54 ar*)function - T
b3e0: 52 41 4d 50 5f 42 49 41 53 29 29 29 3b 0a 23 65 RAMP_BIAS)));.#e
b3f0: 6c 73 65 0a 20 20 61 62 6f 72 74 28 29 3b 0a 23 lse. abort();.#
b400: 65 6e 64 69 66 0a 7d 0a 0a 23 69 66 20 64 65 66 endif.}..#if def
b410: 69 6e 65 64 28 5f 5f 53 54 44 43 5f 5f 29 20 7c ined(__STDC__) |
b420: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 | defined(__GNUC
b430: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
b440: 5f 63 70 6c 75 73 70 6c 75 73 29 0a 76 6f 69 64 _cplusplus).void
b450: 2a 20 74 72 61 6d 70 6f 6c 69 6e 65 5f 64 61 74 * trampoline_dat
b460: 61 20 28 76 6f 69 64 2a 20 66 75 6e 63 74 69 6f a (void* functio
b470: 6e 29 0a 23 65 6c 73 65 0a 76 6f 69 64 2a 20 74 n).#else.void* t
b480: 72 61 6d 70 6f 6c 69 6e 65 5f 64 61 74 61 20 28 rampoline_data (
b490: 66 75 6e 63 74 69 6f 6e 29 0a 20 20 76 6f 69 64 function). void
b4a0: 2a 20 66 75 6e 63 74 69 6f 6e 3b 0a 23 65 6e 64 * function;.#end
b4b0: 69 66 0a 7b 0a 23 69 66 64 65 66 20 74 72 61 6d if.{.#ifdef tram
b4c0: 70 5f 64 61 74 61 0a 20 20 72 65 74 75 72 6e 20 p_data. return
b4d0: 28 76 6f 69 64 2a 29 28 74 72 61 6d 70 5f 64 61 (void*)(tramp_da
b4e0: 74 61 28 28 28 63 68 61 72 2a 29 66 75 6e 63 74 ta(((char*)funct
b4f0: 69 6f 6e 20 2d 20 54 52 41 4d 50 5f 42 49 41 53 ion - TRAMP_BIAS
b500: 29 29 29 3b 0a 23 65 6c 73 65 0a 20 20 61 62 6f )));.#else. abo
b510: 72 74 28 29 3b 0a 23 65 6e 64 69 66 0a 7d 0a rt();.#endif.}.