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 36 20 42 72 75 6e 6f 20 48 61 69 62 6c 65 006 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 70 6f 77 65 f defined(__powe
0250: 72 70 63 5f 5f 29 20 26 26 20 21 64 65 66 69 6e rpc__) && !defin
0260: 65 64 28 5f 5f 70 6f 77 65 72 70 63 36 34 5f 5f ed(__powerpc64__
0270: 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f ).#if !defined(_
0280: 41 49 58 29 0a 23 64 65 66 69 6e 65 20 5f 5f 70 AIX).#define __p
0290: 6f 77 65 72 70 63 73 79 73 76 34 5f 5f 20 20 2f owerpcsysv4__ /
02a0: 2a 20 53 79 73 56 2e 34 20 41 42 49 2c 20 72 65 * SysV.4 ABI, re
02b0: 61 6c 20 6d 61 63 68 69 6e 65 20 63 6f 64 65 2e al machine code.
02c0: 20 2a 2f 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e */.#else.#defin
02d0: 65 20 5f 5f 70 6f 77 65 72 70 63 61 69 78 5f 5f e __powerpcaix__
02e0: 20 20 2f 2a 20 41 49 58 20 41 42 49 2c 20 6a 75 /* AIX ABI, ju
02f0: 73 74 20 61 20 63 6c 6f 73 75 72 65 2e 20 2a 2f st a closure. */
0300: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 .#endif.#endif.#
0310: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 70 6f 77 if defined(__pow
0320: 65 72 70 63 36 34 5f 5f 29 0a 2f 2a 20 54 68 65 erpc64__)./* The
0330: 20 6f 6e 6c 79 20 41 42 49 20 6f 6e 20 70 6f 77 only ABI on pow
0340: 65 72 70 63 36 34 20 6b 6e 6f 77 6e 20 73 6f 20 erpc64 known so
0350: 66 61 72 20 69 73 20 74 68 65 20 41 49 58 20 41 far is the AIX A
0360: 42 49 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 5f BI. */.#define _
0370: 5f 70 6f 77 65 72 70 63 36 34 61 69 78 5f 5f 20 _powerpc64aix__
0380: 20 2f 2a 20 41 49 58 20 41 42 49 2c 20 6a 75 73 /* AIX ABI, jus
0390: 74 20 61 20 63 6c 6f 73 75 72 65 2e 20 2a 2f 0a t a closure. */.
03a0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e #endif.#if defin
03b0: 65 64 28 5f 5f 68 70 70 61 6e 65 77 5f 5f 29 0a ed(__hppanew__).
03c0: 2f 2a 0a 20 2a 20 41 20 66 75 6e 63 74 69 6f 6e /*. * A function
03d0: 20 70 6f 69 6e 74 65 72 20 69 73 20 61 20 62 69 pointer is a bi
03e0: 61 73 65 64 20 70 6f 69 6e 74 65 72 20 74 6f 20 ased pointer to
03f0: 61 20 64 61 74 61 20 61 72 65 61 20 77 68 6f 73 a data area whos
0400: 65 20 66 69 72 73 74 20 77 6f 72 64 0a 20 2a 20 e first word. *
0410: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 contains the act
0420: 75 61 6c 20 61 64 64 72 65 73 73 20 6f 66 20 74 ual address of t
0430: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 2a 2f he function.. */
0440: 0a 65 78 74 65 72 6e 20 76 6f 69 64 20 74 72 61 .extern void tra
0450: 6d 70 20 28 29 3b 20 2f 2a 20 74 72 61 6d 70 6f mp (); /* trampo
0460: 6c 69 6e 65 20 70 72 6f 74 6f 74 79 70 65 20 2a line prototype *
0470: 2f 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 6e 65 /./* We don't ne
0480: 65 64 20 74 6f 20 74 61 6b 65 20 61 6e 79 20 73 ed to take any s
0490: 70 65 63 69 61 6c 20 6d 65 61 73 75 72 65 73 20 pecial measures
04a0: 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 to make the code
04b0: 20 65 78 65 63 75 74 61 62 6c 65 0a 20 2a 20 73 executable. * s
04c0: 69 6e 63 65 20 74 68 65 20 61 63 74 75 61 6c 20 ince the actual
04d0: 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 61 72 65 instructions are
04e0: 20 69 6e 20 74 68 65 20 74 65 78 74 20 73 65 67 in the text seg
04f0: 6d 65 6e 74 2e 0a 20 2a 2f 0a 23 69 66 6e 64 65 ment.. */.#ifnde
0500: 66 20 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c f CODE_EXECUTABL
0510: 45 0a 23 64 65 66 69 6e 65 20 43 4f 44 45 5f 45 E.#define CODE_E
0520: 58 45 43 55 54 41 42 4c 45 0a 23 65 6e 64 69 66 XECUTABLE.#endif
0530: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 .#endif.#if defi
0540: 6e 65 64 28 5f 5f 70 6f 77 65 72 70 63 61 69 78 ned(__powerpcaix
0550: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f __) || defined(_
0560: 5f 70 6f 77 65 72 70 63 36 34 61 69 78 5f 5f 29 _powerpc64aix__)
0570: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 61 || defined(__ia
0580: 36 34 5f 5f 29 0a 2f 2a 0a 20 2a 20 41 20 66 75 64__)./*. * A fu
0590: 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 69 nction pointer i
05a0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 s a pointer to a
05b0: 20 64 61 74 61 20 61 72 65 61 20 77 68 6f 73 65 data area whose
05c0: 20 66 69 72 73 74 20 77 6f 72 64 20 63 6f 6e 74 first word cont
05d0: 61 69 6e 73 0a 20 2a 20 74 68 65 20 61 63 74 75 ains. * the actu
05e0: 61 6c 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 al address of th
05f0: 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 2a 2f 0a e function.. */.
0600: 65 78 74 65 72 6e 20 76 6f 69 64 20 28 2a 74 72 extern void (*tr
0610: 61 6d 70 29 20 28 29 3b 20 2f 2a 20 74 72 61 6d amp) (); /* tram
0620: 70 6f 6c 69 6e 65 20 70 72 6f 74 6f 74 79 70 65 poline prototype
0630: 20 2a 2f 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 */./* We don't
0640: 6e 65 65 64 20 74 6f 20 74 61 6b 65 20 61 6e 79 need to take any
0650: 20 73 70 65 63 69 61 6c 20 6d 65 61 73 75 72 65 special measure
0660: 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f s to make the co
0670: 64 65 20 65 78 65 63 75 74 61 62 6c 65 0a 20 2a de executable. *
0680: 20 73 69 6e 63 65 20 74 68 65 20 61 63 74 75 61 since the actua
0690: 6c 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 61 l instructions a
06a0: 72 65 20 69 6e 20 74 68 65 20 74 65 78 74 20 73 re in the text s
06b0: 65 67 6d 65 6e 74 2e 0a 20 2a 2f 0a 23 69 66 6e egment.. */.#ifn
06c0: 64 65 66 20 43 4f 44 45 5f 45 58 45 43 55 54 41 def CODE_EXECUTA
06d0: 42 4c 45 0a 23 64 65 66 69 6e 65 20 43 4f 44 45 BLE.#define CODE
06e0: 5f 45 58 45 43 55 54 41 42 4c 45 0a 23 65 6e 64 _EXECUTABLE.#end
06f0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 if.#endif.#if de
0700: 66 69 6e 65 64 28 5f 5f 6d 36 38 6b 5f 5f 29 0a fined(__m68k__).
0710: 23 69 66 20 64 65 66 69 6e 65 64 28 41 4d 49 47 #if defined(AMIG
0720: 41 29 20 2f 2a 20 41 6d 69 67 61 20 72 75 6e 6e A) /* Amiga runn
0730: 69 6e 67 20 41 6d 69 67 61 4f 53 2c 20 6e 6f 74 ing AmigaOS, not
0740: 20 4c 69 6e 75 78 20 2a 2f 0a 23 69 66 6e 64 65 Linux */.#ifnde
0750: 66 20 43 4f 44 45 5f 45 58 45 43 55 54 41 42 4c f CODE_EXECUTABL
0760: 45 20 2f 2a 20 63 6f 6e 66 69 67 75 72 65 20 67 E /* configure g
0770: 75 65 73 73 65 73 20 77 72 6f 6e 67 3f 3f 20 2a uesses wrong?? *
0780: 2f 0a 23 64 65 66 69 6e 65 20 43 4f 44 45 5f 45 /.#define CODE_E
0790: 58 45 43 55 54 41 42 4c 45 0a 23 65 6e 64 69 66 XECUTABLE.#endif
07a0: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a .#endif.#endif..
07b0: 23 69 66 6e 64 65 66 20 43 4f 44 45 5f 45 58 45 #ifndef CODE_EXE
07c0: 43 55 54 41 42 4c 45 0a 2f 2a 20 48 6f 77 20 64 CUTABLE./* How d
07d0: 6f 20 77 65 20 6d 61 6b 65 20 74 68 65 20 74 72 o we make the tr
07e0: 61 6d 70 6f 6c 69 6e 65 27 73 20 63 6f 64 65 20 ampoline's code
07f0: 65 78 65 63 75 74 61 62 6c 65 3f 20 2a 2f 0a 23 executable? */.#
0800: 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f if defined(HAVE_
0810: 4d 41 43 48 5f 56 4d 29 20 7c 7c 20 64 65 66 69 MACH_VM) || defi
0820: 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f 5f 29 20 ned(__convex__)
0830: 7c 7c 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f || defined(HAVE_
0840: 57 4f 52 4b 49 4e 47 5f 4d 50 52 4f 54 45 43 54 WORKING_MPROTECT
0850: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 48 41 56 ) || defined(HAV
0860: 45 5f 53 59 53 5f 4d 38 38 4b 42 43 53 5f 48 29 E_SYS_M88KBCS_H)
0870: 0a 2f 2a 20 6d 70 72 6f 74 65 63 74 28 29 20 5b ./* mprotect() [
0880: 6f 72 20 65 71 75 69 76 61 6c 65 6e 74 5d 20 74 or equivalent] t
0890: 68 65 20 6d 61 6c 6c 6f 63 27 65 64 20 61 72 65 he malloc'ed are
08a0: 61 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 a. */.#define EX
08b0: 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 50 52 ECUTABLE_VIA_MPR
08c0: 4f 54 45 43 54 0a 23 65 6c 73 65 0a 23 69 66 64 OTECT.#else.#ifd
08d0: 65 66 20 48 41 56 45 5f 4d 4d 41 50 0a 2f 2a 20 ef HAVE_MMAP./*
08e0: 55 73 65 20 61 6e 20 6d 6d 61 70 27 65 64 20 70 Use an mmap'ed p
08f0: 61 67 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 age. */.#define
0900: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d EXECUTABLE_VIA_M
0910: 4d 41 50 0a 23 69 66 64 65 66 20 48 41 56 45 5f MAP.#ifdef HAVE_
0920: 4d 4d 41 50 5f 41 4e 4f 4e 59 4d 4f 55 53 0a 2f MMAP_ANONYMOUS./
0930: 2a 20 55 73 65 20 6d 6d 61 70 20 77 69 74 68 20 * Use mmap with
0940: 74 68 65 20 4d 41 50 5f 41 4e 4f 4e 59 4d 4f 55 the MAP_ANONYMOU
0950: 53 20 6f 72 20 4d 41 50 5f 41 4e 4f 4e 20 66 6c S or MAP_ANON fl
0960: 61 67 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 ag. */.#define E
0970: 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 4d XECUTABLE_VIA_MM
0980: 41 50 5f 41 4e 4f 4e 59 4d 4f 55 53 0a 23 65 6c AP_ANONYMOUS.#el
0990: 73 65 0a 2f 2a 20 55 73 65 20 6d 6d 61 70 20 6f se./* Use mmap o
09a0: 6e 20 2f 64 65 76 2f 7a 65 72 6f 2e 20 2a 2f 0a n /dev/zero. */.
09b0: 23 64 65 66 69 6e 65 20 45 58 45 43 55 54 41 42 #define EXECUTAB
09c0: 4c 45 5f 56 49 41 5f 4d 4d 41 50 5f 44 45 56 5a LE_VIA_MMAP_DEVZ
09d0: 45 52 4f 0a 23 65 6e 64 69 66 0a 23 65 6c 73 65 ERO.#endif.#else
09e0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 48 4d .#ifdef HAVE_SHM
09f0: 0a 2f 2a 20 55 73 65 20 61 6e 20 73 68 6d 61 74 ./* Use an shmat
0a00: 27 65 64 20 70 61 67 65 2e 20 2a 2f 0a 23 64 65 'ed page. */.#de
0a10: 66 69 6e 65 20 45 58 45 43 55 54 41 42 4c 45 5f fine EXECUTABLE_
0a20: 56 49 41 5f 53 48 4d 0a 23 65 6c 73 65 0a 3f 3f VIA_SHM.#else.??
0a30: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 .#endif.#endif.#
0a40: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 23 69 endif.#endif..#i
0a50: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e nclude <stdio.h>
0a60: 20 2f 2a 20 64 65 63 6c 61 72 65 73 20 66 70 72 /* declares fpr
0a70: 69 6e 74 66 28 29 20 2a 2f 0a 0a 23 69 6e 63 6c intf() */..#incl
0a80: 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 ude <sys/types.h
0a90: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c >.#include <stdl
0aa0: 69 62 2e 68 3e 20 2f 2a 20 64 65 63 6c 61 72 65 ib.h> /* declare
0ab0: 73 20 61 62 6f 72 74 28 29 2c 20 6d 61 6c 6c 6f s abort(), mallo
0ac0: 63 28 29 2c 20 66 72 65 65 28 29 20 2a 2f 0a 23 c(), free() */.#
0ad0: 69 66 64 65 66 20 48 41 56 45 5f 55 4e 49 53 54 ifdef HAVE_UNIST
0ae0: 44 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 75 6e D_H.#include <un
0af0: 69 73 74 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a istd.h>.#endif..
0b00: 2f 2a 20 44 65 63 6c 61 72 65 20 67 65 74 70 61 /* Declare getpa
0b10: 67 65 73 69 7a 65 28 29 2e 20 2a 2f 0a 23 69 66 gesize(). */.#if
0b20: 64 65 66 20 48 41 56 45 5f 47 45 54 50 41 47 45 def HAVE_GETPAGE
0b30: 53 49 5a 45 0a 23 69 66 64 65 66 20 5f 5f 63 70 SIZE.#ifdef __cp
0b40: 6c 75 73 70 6c 75 73 0a 65 78 74 65 72 6e 20 22 lusplus.extern "
0b50: 43 22 20 52 45 54 47 45 54 50 41 47 45 53 49 5a C" RETGETPAGESIZ
0b60: 45 54 59 50 45 20 67 65 74 70 61 67 65 73 69 7a ETYPE getpagesiz
0b70: 65 20 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a e (void);.#else.
0b80: 65 78 74 65 72 6e 20 52 45 54 47 45 54 50 41 47 extern RETGETPAG
0b90: 45 53 49 5a 45 54 59 50 45 20 67 65 74 70 61 67 ESIZETYPE getpag
0ba0: 65 73 69 7a 65 20 28 76 6f 69 64 29 3b 0a 23 65 esize (void);.#e
0bb0: 6e 64 69 66 0a 23 65 6c 73 65 0a 23 69 66 64 65 ndif.#else.#ifde
0bc0: 66 20 48 41 56 45 5f 53 59 53 5f 50 41 52 41 4d f HAVE_SYS_PARAM
0bd0: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 _H.#include <sys
0be0: 2f 70 61 72 61 6d 2e 68 3e 0a 23 65 6c 73 65 0a /param.h>.#else.
0bf0: 2f 2a 20 4e 6f 74 20 55 6e 69 78 2c 20 65 2e 67 /* Not Unix, e.g
0c00: 2e 20 6d 69 6e 67 77 33 32 20 2a 2f 0a 23 64 65 . mingw32 */.#de
0c10: 66 69 6e 65 20 50 41 47 45 53 49 5a 45 20 34 30 fine PAGESIZE 40
0c20: 39 36 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 96.#endif.#defin
0c30: 65 20 67 65 74 70 61 67 65 73 69 7a 65 28 29 20 e getpagesize()
0c40: 50 41 47 45 53 49 5a 45 0a 23 65 6e 64 69 66 0a PAGESIZE.#endif.
0c50: 0a 2f 2a 20 44 65 63 6c 61 72 65 20 6d 70 72 6f ./* Declare mpro
0c60: 74 65 63 74 28 29 20 6f 72 20 65 71 75 69 76 61 tect() or equiva
0c70: 6c 65 6e 74 2e 20 2a 2f 0a 23 69 66 64 65 66 20 lent. */.#ifdef
0c80: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d EXECUTABLE_VIA_M
0c90: 50 52 4f 54 45 43 54 0a 23 69 66 64 65 66 20 48 PROTECT.#ifdef H
0ca0: 41 56 45 5f 4d 41 43 48 5f 56 4d 0a 23 69 6e 63 AVE_MACH_VM.#inc
0cb0: 6c 75 64 65 20 3c 73 79 73 2f 72 65 73 6f 75 72 lude <sys/resour
0cc0: 63 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c ce.h>.#include <
0cd0: 6d 61 63 68 2f 6d 61 63 68 5f 69 6e 74 65 72 66 mach/mach_interf
0ce0: 61 63 65 2e 68 3e 0a 23 69 66 64 65 66 20 4e 65 ace.h>.#ifdef Ne
0cf0: 58 54 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 XT.#include <mac
0d00: 68 2f 6d 61 63 68 5f 69 6e 69 74 2e 68 3e 0a 23 h/mach_init.h>.#
0d10: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6f endif.#ifdef __o
0d20: 73 66 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 3c 6d sf__.#include <m
0d30: 61 63 68 5f 69 6e 69 74 2e 68 3e 0a 23 65 6e 64 ach_init.h>.#end
0d40: 69 66 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 63 if.#include <mac
0d50: 68 2f 6d 61 63 68 69 6e 65 2f 76 6d 5f 70 61 72 h/machine/vm_par
0d60: 61 6d 2e 68 3e 0a 23 65 6c 73 65 0a 23 69 66 64 am.h>.#else.#ifd
0d70: 65 66 20 48 41 56 45 5f 53 59 53 5f 4d 38 38 4b ef HAVE_SYS_M88K
0d80: 42 43 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c BCS_H.#include <
0d90: 73 79 73 2f 6d 38 38 6b 62 63 73 2e 68 3e 0a 23 sys/m88kbcs.h>.#
0da0: 64 65 66 69 6e 65 20 67 65 74 70 61 67 65 73 69 define getpagesi
0db0: 7a 65 28 29 20 20 34 30 39 36 20 20 2f 2a 20 3f ze() 4096 /* ?
0dc0: 3f 20 2a 2f 0a 23 65 6c 73 65 0a 23 69 6e 63 6c ? */.#else.#incl
0dd0: 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 ude <sys/types.h
0de0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f >.#include <sys/
0df0: 6d 6d 61 6e 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 mman.h>.#endif.#
0e00: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a endif.#endif../*
0e10: 20 44 65 63 6c 61 72 65 20 6d 6d 61 70 28 29 2e Declare mmap().
0e20: 20 2a 2f 0a 23 69 66 64 65 66 20 45 58 45 43 55 */.#ifdef EXECU
0e30: 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 0a 23 TABLE_VIA_MMAP.#
0e40: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 70 include <sys/typ
0e50: 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c es.h>.#include <
0e60: 73 79 73 2f 6d 6d 61 6e 2e 68 3e 0a 23 69 66 20 sys/mman.h>.#if
0e70: 21 64 65 66 69 6e 65 64 28 50 52 4f 54 5f 45 58 !defined(PROT_EX
0e80: 45 43 29 20 26 26 20 64 65 66 69 6e 65 64 28 50 EC) && defined(P
0e90: 52 4f 54 5f 45 58 45 43 55 54 45 29 20 2f 2a 20 ROT_EXECUTE) /*
0ea0: 49 72 69 78 20 34 2e 30 2e 35 20 6e 65 65 64 73 Irix 4.0.5 needs
0eb0: 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 this */.#define
0ec0: 20 50 52 4f 54 5f 45 58 45 43 20 50 52 4f 54 5f PROT_EXEC PROT_
0ed0: 45 58 45 43 55 54 45 0a 23 65 6e 64 69 66 0a 23 EXECUTE.#endif.#
0ee0: 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 endif../* Declar
0ef0: 65 20 6f 70 65 6e 28 29 2e 20 2a 2f 0a 23 69 66 e open(). */.#if
0f00: 64 65 66 20 45 58 45 43 55 54 41 42 4c 45 5f 56 def EXECUTABLE_V
0f10: 49 41 5f 4d 4d 41 50 5f 44 45 56 5a 45 52 4f 0a IA_MMAP_DEVZERO.
0f20: 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 74 79 #include <sys/ty
0f30: 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 pes.h>.#include
0f40: 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 69 6e 63 6c <unistd.h>.#incl
0f50: 75 64 65 20 3c 66 63 6e 74 6c 2e 68 3e 0a 23 65 ude <fcntl.h>.#e
0f60: 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 65 ndif../* Declare
0f70: 20 73 68 6d 67 65 74 28 29 2c 20 73 68 6d 61 74 shmget(), shmat
0f80: 28 29 2c 20 73 68 6d 63 74 6c 28 29 2e 20 2a 2f (), shmctl(). */
0f90: 0a 23 69 66 64 65 66 20 45 58 45 43 55 54 41 42 .#ifdef EXECUTAB
0fa0: 4c 45 5f 56 49 41 5f 53 48 4d 0a 23 69 6e 63 6c LE_VIA_SHM.#incl
0fb0: 75 64 65 20 3c 73 79 73 2f 74 79 70 65 73 2e 68 ude <sys/types.h
0fc0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f >.#include <sys/
0fd0: 69 70 63 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 ipc.h>.#include
0fe0: 3c 73 79 73 2f 73 68 6d 2e 68 3e 0a 23 69 66 64 <sys/shm.h>.#ifd
0ff0: 65 66 20 48 41 56 45 5f 53 59 53 5f 53 59 53 4d ef HAVE_SYS_SYSM
1000: 41 43 52 4f 53 5f 48 0a 23 69 6e 63 6c 75 64 65 ACROS_H.#include
1010: 20 3c 73 79 73 2f 73 79 73 6d 61 63 72 6f 73 2e <sys/sysmacros.
1020: 68 3e 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 h>.#endif.#endif
1030: 0a 0a 2f 2a 20 53 75 70 70 6f 72 74 20 66 6f 72 ../* Support for
1040: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 63 instruction cac
1050: 68 65 20 66 6c 75 73 68 2e 20 2a 2f 0a 23 69 66 he flush. */.#if
1060: 64 65 66 20 5f 5f 69 33 38 36 5f 5f 0a 23 69 66 def __i386__.#if
1070: 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 defined(_WIN32)
1080: 20 2f 2a 20 57 69 6e 64 6f 77 73 4e 54 20 6f 72 /* WindowsNT or
1090: 20 57 69 6e 64 6f 77 73 39 35 20 2a 2f 0a 23 64 Windows95 */.#d
10a0: 65 66 69 6e 65 20 57 49 4e 33 32 5f 4c 45 41 4e efine WIN32_LEAN
10b0: 5f 41 4e 44 5f 4d 45 41 4e 0a 23 64 65 66 69 6e _AND_MEAN.#defin
10c0: 65 20 57 49 4e 33 32 5f 45 58 54 52 41 5f 4c 45 e WIN32_EXTRA_LE
10d0: 41 4e 0a 23 69 6e 63 6c 75 64 65 20 3c 77 69 6e AN.#include <win
10e0: 64 6f 77 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 dows.h>.#endif.#
10f0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d endif.#ifdef __m
1100: 36 38 6b 5f 5f 0a 23 69 66 20 64 65 66 69 6e 65 68k__.#if define
1110: 64 28 41 4d 49 47 41 29 20 2f 2a 20 41 6d 69 67 d(AMIGA) /* Amig
1120: 61 20 72 75 6e 6e 69 6e 67 20 41 6d 69 67 61 4f a running AmigaO
1130: 53 2c 20 6e 6f 74 20 4c 69 6e 75 78 20 2a 2f 0a S, not Linux */.
1140: 23 69 6e 63 6c 75 64 65 20 3c 65 78 65 63 2f 74 #include <exec/t
1150: 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 ypes.h>.#include
1160: 20 3c 65 78 65 63 2f 65 78 65 63 62 61 73 65 2e <exec/execbase.
1170: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 70 72 6f h>.#include <pro
1180: 74 6f 2f 65 78 65 63 2e 68 3e 0a 23 65 6e 64 69 to/exec.h>.#endi
1190: 66 0a 23 69 66 64 65 66 20 68 70 75 78 0a 23 69 f.#ifdef hpux.#i
11a0: 6e 63 6c 75 64 65 20 3c 73 79 73 2f 63 61 63 68 nclude <sys/cach
11b0: 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 65 6e 64 e.h>.#endif.#end
11c0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
11d0: 5f 6d 69 70 73 5f 5f 29 20 7c 7c 20 64 65 66 69 _mips__) || defi
11e0: 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f 29 ned(__mipsn32__)
11f0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d 69 || defined(__mi
1200: 70 73 36 34 5f 5f 29 0a 23 69 66 64 65 66 20 75 ps64__).#ifdef u
1210: 6c 74 72 69 78 0a 23 69 6e 63 6c 75 64 65 20 3c ltrix.#include <
1220: 6d 69 70 73 2f 63 61 63 68 65 63 74 6c 2e 68 3e mips/cachectl.h>
1230: 0a 23 65 6c 73 65 0a 23 69 66 64 65 66 20 6c 69 .#else.#ifdef li
1240: 6e 75 78 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 nux.#include <as
1250: 6d 2f 63 61 63 68 65 63 74 6c 2e 68 3e 0a 23 65 m/cachectl.h>.#e
1260: 6c 73 65 0a 23 69 66 64 65 66 20 48 41 56 45 5f lse.#ifdef HAVE_
1270: 53 59 53 5f 43 41 43 48 45 43 54 4c 5f 48 0a 23 SYS_CACHECTL_H.#
1280: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 63 61 63 include <sys/cac
1290: 68 65 63 74 6c 2e 68 3e 0a 23 65 6e 64 69 66 0a hectl.h>.#endif.
12a0: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 65 #endif.#endif.#e
12b0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d 38 ndif.#ifdef __m8
12c0: 38 6b 5f 5f 0a 23 69 6e 63 6c 75 64 65 20 3c 73 8k__.#include <s
12d0: 79 73 2f 73 79 73 6c 6f 63 61 6c 2e 68 3e 0a 23 ys/syslocal.h>.#
12e0: 65 6e 64 69 66 0a 2f 2a 20 49 6e 6c 69 6e 65 20 endif./* Inline
12f0: 61 73 73 65 6d 62 6c 79 20 66 75 6e 63 74 69 6f assembly functio
1300: 6e 20 66 6f 72 20 69 6e 73 74 72 75 63 74 69 6f n for instructio
1310: 6e 20 63 61 63 68 65 20 66 6c 75 73 68 2e 20 2a n cache flush. *
1320: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f /.#if defined(__
1330: 73 70 61 72 63 5f 5f 29 20 7c 7c 20 64 65 66 69 sparc__) || defi
1340: 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 ned(__sparc64__)
1350: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 6c || defined(__al
1360: 70 68 61 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 pha__) || define
1370: 64 28 5f 5f 68 70 70 61 6f 6c 64 5f 5f 29 20 7c d(__hppaold__) |
1380: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 6f 77 65 | defined(__powe
1390: 72 70 63 73 79 73 76 34 5f 5f 29 20 7c 7c 20 64 rpcsysv4__) || d
13a0: 65 66 69 6e 65 64 28 5f 5f 63 6f 6e 76 65 78 5f efined(__convex_
13b0: 5f 29 0a 23 69 66 64 65 66 20 5f 5f 47 4e 55 43 _).#ifdef __GNUC
13c0: 5f 5f 0a 65 78 74 65 72 6e 20 69 6e 6c 69 6e 65 __.extern inline
13d0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 .#if defined(__s
13e0: 70 61 72 63 5f 5f 29 20 7c 7c 20 64 65 66 69 6e parc__) || defin
13f0: 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a ed(__sparc64__).
1400: 23 69 6e 63 6c 75 64 65 20 22 63 61 63 68 65 2d #include "cache-
1410: 73 70 61 72 63 2e 63 22 0a 23 65 6e 64 69 66 0a sparc.c".#endif.
1420: 23 69 66 64 65 66 20 5f 5f 61 6c 70 68 61 5f 5f #ifdef __alpha__
1430: 0a 23 69 6e 63 6c 75 64 65 20 22 63 61 63 68 65 .#include "cache
1440: 2d 61 6c 70 68 61 2e 63 22 0a 23 65 6e 64 69 66 -alpha.c".#endif
1450: 0a 23 69 66 64 65 66 20 5f 5f 68 70 70 61 5f 5f .#ifdef __hppa__
1460: 0a 23 69 6e 63 6c 75 64 65 20 22 63 61 63 68 65 .#include "cache
1470: 2d 68 70 70 61 2e 63 22 0a 23 65 6e 64 69 66 0a -hppa.c".#endif.
1480: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 70 6f #if defined(__po
1490: 77 65 72 70 63 5f 5f 29 20 26 26 20 21 64 65 66 werpc__) && !def
14a0: 69 6e 65 64 28 5f 5f 70 6f 77 65 72 70 63 36 34 ined(__powerpc64
14b0: 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 61 __).#include "ca
14c0: 63 68 65 2d 70 6f 77 65 72 70 63 2e 63 22 0a 23 che-powerpc.c".#
14d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 63 endif.#ifdef __c
14e0: 6f 6e 76 65 78 5f 5f 0a 23 69 6e 63 6c 75 64 65 onvex__.#include
14f0: 20 22 63 61 63 68 65 2d 63 6f 6e 76 65 78 2e 63 "cache-convex.c
1500: 22 0a 23 65 6e 64 69 66 0a 23 65 6c 73 65 0a 23 ".#endif.#else.#
1510: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 if defined(__spa
1520: 72 63 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 rc__) || defined
1530: 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 65 78 (__sparc64__).ex
1540: 74 65 72 6e 20 76 6f 69 64 20 5f 5f 54 52 5f 63 tern void __TR_c
1550: 6c 65 61 72 5f 63 61 63 68 65 5f 34 28 29 3b 0a lear_cache_4();.
1560: 23 65 6c 73 65 0a 65 78 74 65 72 6e 20 76 6f 69 #else.extern voi
1570: 64 20 5f 5f 54 52 5f 63 6c 65 61 72 5f 63 61 63 d __TR_clear_cac
1580: 68 65 28 29 3b 0a 23 65 6e 64 69 66 0a 23 65 6e he();.#endif.#en
1590: 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4c dif.#endif../* L
15a0: 65 6e 67 74 68 20 61 6e 64 20 61 6c 69 67 6e 6d ength and alignm
15b0: 65 6e 74 20 6f 66 20 74 72 61 6d 70 6f 6c 69 6e ent of trampolin
15c0: 65 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 69 33 e */.#ifdef __i3
15d0: 38 36 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 86__.#define TRA
15e0: 4d 50 5f 4c 45 4e 47 54 48 20 31 35 0a 23 64 65 MP_LENGTH 15.#de
15f0: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
1600: 20 31 36 20 20 2f 2a 20 34 20 66 6f 72 20 61 20 16 /* 4 for a
1610: 69 33 38 36 2c 20 31 36 20 66 6f 72 20 61 20 69 i386, 16 for a i
1620: 34 38 36 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 486 */.#endif.#i
1630: 66 64 65 66 20 5f 5f 6d 36 38 6b 5f 5f 0a 23 64 fdef __m68k__.#d
1640: 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 efine TRAMP_LENG
1650: 54 48 20 31 38 0a 23 64 65 66 69 6e 65 20 54 52 TH 18.#define TR
1660: 41 4d 50 5f 41 4c 49 47 4e 20 31 36 0a 23 65 6e AMP_ALIGN 16.#en
1670: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
1680: 5f 5f 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 65 __mips__) && !de
1690: 66 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f fined(__mipsn32_
16a0: 5f 29 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 _).#define TRAMP
16b0: 5f 4c 45 4e 47 54 48 20 33 32 0a 23 64 65 66 69 _LENGTH 32.#defi
16c0: 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 34 ne TRAMP_ALIGN 4
16d0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
16e0: 5f 6d 69 70 73 6e 33 32 5f 5f 0a 23 64 65 66 69 _mipsn32__.#defi
16f0: 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 ne TRAMP_LENGTH
1700: 33 36 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 36.#define TRAMP
1710: 5f 41 4c 49 47 4e 20 34 0a 23 65 6e 64 69 66 0a _ALIGN 4.#endif.
1720: 23 69 66 64 65 66 20 5f 5f 6d 69 70 73 36 34 6f #ifdef __mips64o
1730: 6c 64 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 ld__.#define TRA
1740: 4d 50 5f 4c 45 4e 47 54 48 20 38 34 0a 23 64 65 MP_LENGTH 84.#de
1750: 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e fine TRAMP_ALIGN
1760: 20 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 4.#endif.#ifdef
1770: 20 5f 5f 6d 69 70 73 36 34 5f 5f 0a 23 64 65 66 __mips64__.#def
1780: 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 ine TRAMP_LENGTH
1790: 20 34 38 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 48.#define TRAM
17a0: 50 5f 41 4c 49 47 4e 20 38 0a 23 65 6e 64 69 66 P_ALIGN 8.#endif
17b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 .#if defined(__s
17c0: 70 61 72 63 5f 5f 29 20 26 26 20 21 64 65 66 69 parc__) && !defi
17d0: 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 5f 5f 29 ned(__sparc64__)
17e0: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c .#define TRAMP_L
17f0: 45 4e 47 54 48 20 32 38 0a 23 64 65 66 69 6e 65 ENGTH 28.#define
1800: 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 31 36 0a TRAMP_ALIGN 16.
1810: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
1820: 73 70 61 72 63 36 34 5f 5f 0a 23 64 65 66 69 6e sparc64__.#defin
1830: 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 34 e TRAMP_LENGTH 4
1840: 38 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 8.#define TRAMP_
1850: 41 4c 49 47 4e 20 31 36 0a 23 65 6e 64 69 66 0a ALIGN 16.#endif.
1860: 23 69 66 64 65 66 20 5f 5f 61 6c 70 68 61 5f 5f #ifdef __alpha__
1870: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c .#define TRAMP_L
1880: 45 4e 47 54 48 20 34 38 0a 23 64 65 66 69 6e 65 ENGTH 48.#define
1890: 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 38 0a 23 TRAMP_ALIGN 8.#
18a0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 68 endif.#ifdef __h
18b0: 70 70 61 6f 6c 64 5f 5f 0a 23 64 65 66 69 6e 65 ppaold__.#define
18c0: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 35 36 TRAMP_LENGTH 56
18d0: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 .#define TRAMP_A
18e0: 4c 49 47 4e 20 31 36 0a 23 65 6e 64 69 66 0a 23 LIGN 16.#endif.#
18f0: 69 66 64 65 66 20 5f 5f 68 70 70 61 6e 65 77 5f ifdef __hppanew_
1900: 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f _.#define TRAMP_
1910: 4c 45 4e 47 54 48 20 32 30 0a 23 64 65 66 69 6e LENGTH 20.#defin
1920: 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 31 36 e TRAMP_ALIGN 16
1930: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 42 .#define TRAMP_B
1940: 49 41 53 20 32 0a 23 65 6e 64 69 66 0a 23 69 66 IAS 2.#endif.#if
1950: 64 65 66 20 5f 5f 61 72 6d 5f 5f 0a 23 64 65 66 def __arm__.#def
1960: 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 ine TRAMP_LENGTH
1970: 20 33 36 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 36.#define TRAM
1980: 50 5f 41 4c 49 47 4e 20 34 0a 23 65 6e 64 69 66 P_ALIGN 4.#endif
1990: 0a 23 69 66 64 65 66 20 5f 5f 70 6f 77 65 72 70 .#ifdef __powerp
19a0: 63 73 79 73 76 34 5f 5f 0a 23 64 65 66 69 6e 65 csysv4__.#define
19b0: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 33 36 TRAMP_LENGTH 36
19c0: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 .#define TRAMP_A
19d0: 4c 49 47 4e 20 34 0a 23 65 6e 64 69 66 0a 23 69 LIGN 4.#endif.#i
19e0: 66 64 65 66 20 5f 5f 70 6f 77 65 72 70 63 61 69 fdef __powerpcai
19f0: 78 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d x__.#define TRAM
1a00: 50 5f 4c 45 4e 47 54 48 20 32 34 0a 23 64 65 66 P_LENGTH 24.#def
1a10: 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 ine TRAMP_ALIGN
1a20: 34 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 4.#endif.#ifdef
1a30: 5f 5f 70 6f 77 65 72 70 63 36 34 61 69 78 5f 5f __powerpc64aix__
1a40: 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c .#define TRAMP_L
1a50: 45 4e 47 54 48 20 34 38 0a 23 64 65 66 69 6e 65 ENGTH 48.#define
1a60: 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 38 0a 23 TRAMP_ALIGN 8.#
1a70: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 6d endif.#ifdef __m
1a80: 38 38 6b 5f 5f 0a 23 64 65 66 69 6e 65 20 54 52 88k__.#define TR
1a90: 41 4d 50 5f 4c 45 4e 47 54 48 20 33 32 0a 23 64 AMP_LENGTH 32.#d
1aa0: 65 66 69 6e 65 20 54 52 41 4d 50 5f 41 4c 49 47 efine TRAMP_ALIG
1ab0: 4e 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 N 8.#endif.#ifde
1ac0: 66 20 5f 5f 63 6f 6e 76 65 78 5f 5f 0a 23 64 65 f __convex__.#de
1ad0: 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 fine TRAMP_LENGT
1ae0: 48 20 32 30 0a 23 64 65 66 69 6e 65 20 54 52 41 H 20.#define TRA
1af0: 4d 50 5f 41 4c 49 47 4e 20 34 0a 23 65 6e 64 69 MP_ALIGN 4.#endi
1b00: 66 0a 23 69 66 64 65 66 20 5f 5f 69 61 36 34 5f f.#ifdef __ia64_
1b10: 5f 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f _.#define TRAMP_
1b20: 4c 45 4e 47 54 48 20 34 30 0a 23 64 65 66 69 6e LENGTH 40.#defin
1b30: 65 20 54 52 41 4d 50 5f 41 4c 49 47 4e 20 31 36 e TRAMP_ALIGN 16
1b40: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
1b50: 5f 78 38 36 5f 36 34 5f 5f 0a 23 64 65 66 69 6e _x86_64__.#defin
1b60: 65 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 20 33 e TRAMP_LENGTH 3
1b70: 32 0a 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 2.#define TRAMP_
1b80: 41 4c 49 47 4e 20 31 36 0a 23 65 6e 64 69 66 0a ALIGN 16.#endif.
1b90: 23 69 66 64 65 66 20 5f 5f 73 33 39 30 5f 5f 0a #ifdef __s390__.
1ba0: 23 64 65 66 69 6e 65 20 54 52 41 4d 50 5f 4c 45 #define TRAMP_LE
1bb0: 4e 47 54 48 20 33 36 0a 23 64 65 66 69 6e 65 20 NGTH 36.#define
1bc0: 54 52 41 4d 50 5f 41 4c 49 47 4e 20 32 0a 23 65 TRAMP_ALIGN 2.#e
1bd0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 54 52 ndif..#ifndef TR
1be0: 41 4d 50 5f 42 49 41 53 0a 23 64 65 66 69 6e 65 AMP_BIAS.#define
1bf0: 20 54 52 41 4d 50 5f 42 49 41 53 20 30 0a 23 65 TRAMP_BIAS 0.#e
1c00: 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e ndif..#if !defin
1c10: 65 64 28 43 4f 44 45 5f 45 58 45 43 55 54 41 42 ed(CODE_EXECUTAB
1c20: 4c 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 LE) && !defined(
1c30: 45 58 45 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d EXECUTABLE_VIA_M
1c40: 50 52 4f 54 45 43 54 29 0a 2f 2a 20 41 49 58 20 PROTECT)./* AIX
1c50: 64 6f 65 73 6e 27 74 20 73 75 70 70 6f 72 74 20 doesn't support
1c60: 6d 70 72 6f 74 65 63 74 28 29 20 69 6e 20 6d 61 mprotect() in ma
1c70: 6c 6c 6f 63 27 65 64 20 6d 65 6d 6f 72 79 2e 20 lloc'ed memory.
1c80: 4d 75 73 74 20 67 65 74 20 70 61 67 65 73 20 6f Must get pages o
1c90: 66 0a 20 2a 20 6d 65 6d 6f 72 79 20 77 69 74 68 f. * memory with
1ca0: 20 65 78 65 63 75 74 65 20 70 65 72 6d 69 73 73 execute permiss
1cb0: 69 6f 6e 20 76 69 61 20 6d 6d 61 70 28 29 2e 20 ion via mmap().
1cc0: 54 68 65 6e 20 6b 65 65 70 20 61 20 66 72 65 65 Then keep a free
1cd0: 20 6c 69 73 74 20 6f 66 0a 20 2a 20 66 72 65 65 list of. * free
1ce0: 20 74 72 61 6d 70 6f 6c 69 6e 65 73 2e 0a 20 2a trampolines.. *
1cf0: 2f 0a 73 74 61 74 69 63 20 63 68 61 72 2a 20 66 /.static char* f
1d00: 72 65 65 6c 69 73 74 20 3d 20 4e 55 4c 4c 3b 0a reelist = NULL;.
1d10: 23 65 6e 64 69 66 0a 0a 5f 5f 54 52 5f 66 75 6e #endif..__TR_fun
1d20: 63 74 69 6f 6e 20 61 6c 6c 6f 63 5f 74 72 61 6d ction alloc_tram
1d30: 70 6f 6c 69 6e 65 20 28 5f 5f 54 52 5f 66 75 6e poline (__TR_fun
1d40: 63 74 69 6f 6e 20 61 64 64 72 65 73 73 2c 20 76 ction address, v
1d50: 6f 69 64 2a 20 76 61 72 69 61 62 6c 65 2c 20 76 oid* variable, v
1d60: 6f 69 64 2a 20 64 61 74 61 29 0a 7b 0a 20 20 63 oid* data).{. c
1d70: 68 61 72 2a 20 66 75 6e 63 74 69 6f 6e 3b 0a 0a har* function;..
1d80: 23 69 66 20 21 64 65 66 69 6e 65 64 28 43 4f 44 #if !defined(COD
1d90: 45 5f 45 58 45 43 55 54 41 42 4c 45 29 0a 20 20 E_EXECUTABLE).
1da0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 70 61 67 65 static long page
1db0: 73 69 7a 65 20 3d 20 30 3b 0a 23 69 66 20 64 65 size = 0;.#if de
1dc0: 66 69 6e 65 64 28 45 58 45 43 55 54 41 42 4c 45 fined(EXECUTABLE
1dd0: 5f 56 49 41 5f 4d 4d 41 50 5f 44 45 56 5a 45 52 _VIA_MMAP_DEVZER
1de0: 4f 29 0a 20 20 73 74 61 74 69 63 20 69 6e 74 20 O). static int
1df0: 7a 65 72 6f 5f 66 64 3b 0a 23 65 6e 64 69 66 0a zero_fd;.#endif.
1e00: 20 20 2f 2a 20 46 69 72 73 74 2c 20 67 65 74 20 /* First, get
1e10: 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 6f 6e the page size on
1e20: 63 65 20 61 6e 64 20 66 6f 72 20 61 6c 6c 2e 20 ce and for all.
1e30: 2a 2f 0a 20 20 69 66 20 28 21 70 61 67 65 73 69 */. if (!pagesi
1e40: 7a 65 29 0a 20 20 20 20 7b 0a 23 69 66 20 64 65 ze). {.#if de
1e50: 66 69 6e 65 64 28 48 41 56 45 5f 4d 41 43 48 5f fined(HAVE_MACH_
1e60: 56 4d 29 0a 20 20 20 20 20 20 70 61 67 65 73 69 VM). pagesi
1e70: 7a 65 20 3d 20 76 6d 5f 70 61 67 65 5f 73 69 7a ze = vm_page_siz
1e80: 65 3b 0a 23 65 6c 73 65 0a 20 20 20 20 20 20 70 e;.#else. p
1e90: 61 67 65 73 69 7a 65 20 3d 20 67 65 74 70 61 67 agesize = getpag
1ea0: 65 73 69 7a 65 28 29 3b 0a 23 65 6e 64 69 66 0a esize();.#endif.
1eb0: 23 69 66 20 64 65 66 69 6e 65 64 28 45 58 45 43 #if defined(EXEC
1ec0: 55 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 5f UTABLE_VIA_MMAP_
1ed0: 44 45 56 5a 45 52 4f 29 0a 20 20 20 20 20 20 7a DEVZERO). z
1ee0: 65 72 6f 5f 66 64 20 3d 20 6f 70 65 6e 28 22 2f ero_fd = open("/
1ef0: 64 65 76 2f 7a 65 72 6f 22 2c 4f 5f 52 44 4f 4e dev/zero",O_RDON
1f00: 4c 59 2c 30 36 34 34 29 3b 0a 20 20 20 20 20 20 LY,0644);.
1f10: 69 66 20 28 7a 65 72 6f 5f 66 64 20 3c 20 30 29 if (zero_fd < 0)
1f20: 0a 20 20 20 20 20 20 20 20 7b 20 66 70 72 69 6e . { fprin
1f30: 74 66 28 73 74 64 65 72 72 2c 22 74 72 61 6d 70 tf(stderr,"tramp
1f40: 6f 6c 69 6e 65 3a 20 43 61 6e 6e 6f 74 20 6f 70 oline: Cannot op
1f50: 65 6e 20 2f 64 65 76 2f 7a 65 72 6f 21 5c 6e 22 en /dev/zero!\n"
1f60: 29 3b 20 61 62 6f 72 74 28 29 3b 20 7d 0a 23 65 ); abort(); }.#e
1f70: 6e 64 69 66 0a 20 20 20 20 7d 0a 23 65 6e 64 69 ndif. }.#endi
1f80: 66 0a 0a 20 20 2f 2a 20 31 2e 20 41 6c 6c 6f 63 f.. /* 1. Alloc
1f90: 61 74 65 20 72 6f 6f 6d 20 2a 2f 0a 0a 23 69 66 ate room */..#if
1fa0: 20 21 64 65 66 69 6e 65 64 28 43 4f 44 45 5f 45 !defined(CODE_E
1fb0: 58 45 43 55 54 41 42 4c 45 29 20 26 26 20 21 64 XECUTABLE) && !d
1fc0: 65 66 69 6e 65 64 28 45 58 45 43 55 54 41 42 4c efined(EXECUTABL
1fd0: 45 5f 56 49 41 5f 4d 50 52 4f 54 45 43 54 29 0a E_VIA_MPROTECT).
1fe0: 20 20 69 66 20 28 66 72 65 65 6c 69 73 74 20 3d if (freelist =
1ff0: 3d 20 4e 55 4c 4c 29 0a 20 20 20 20 7b 20 2f 2a = NULL). { /*
2000: 20 47 65 74 20 61 20 6e 65 77 20 70 61 67 65 2e Get a new page.
2010: 20 2a 2f 0a 20 20 20 20 20 20 63 68 61 72 2a 20 */. char*
2020: 70 61 67 65 3b 0a 23 69 66 64 65 66 20 45 58 45 page;.#ifdef EXE
2030: 43 55 54 41 42 4c 45 5f 56 49 41 5f 4d 4d 41 50 CUTABLE_VIA_MMAP
2040: 5f 41 4e 4f 4e 59 4d 4f 55 53 0a 20 20 20 20 20 _ANONYMOUS.
2050: 20 70 61 67 65 20 3d 20 6d 6d 61 70 28 30 2c 20 page = mmap(0,
2060: 70 61 67 65 73 69 7a 65 2c 20 50 52 4f 54 5f 52 pagesize, PROT_R
2070: 45 41 44 20 7c 20 50 52 4f 54 5f 57 52 49 54 45 EAD | PROT_WRITE
2080: 20 7c 20 50 52 4f 54 5f 45 58 45 43 2c 20 4d 41 | PROT_EXEC, MA
2090: 50 5f 41 4e 4f 4e 59 4d 4f 55 53 20 7c 20 4d 41 P_ANONYMOUS | MA
20a0: 50 5f 56 41 52 49 41 42 4c 45 2c 20 2d 31 2c 20 P_VARIABLE, -1,
20b0: 30 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 0);.#endif.#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 44 45 56 5a 45 52 4f 0a 20 20 _MMAP_DEVZERO.
20e0: 20 20 20 20 70 61 67 65 20 3d 20 6d 6d 61 70 28 page = mmap(
20f0: 30 2c 20 70 61 67 65 73 69 7a 65 2c 20 50 52 4f 0, pagesize, PRO
2100: 54 5f 52 45 41 44 20 7c 20 50 52 4f 54 5f 57 52 T_READ | PROT_WR
2110: 49 54 45 20 7c 20 50 52 4f 54 5f 45 58 45 43 2c ITE | PROT_EXEC,
2120: 20 4d 41 50 5f 50 52 49 56 41 54 45 2c 20 7a 65 MAP_PRIVATE, ze
2130: 72 6f 5f 66 64 2c 20 30 29 3b 0a 23 65 6e 64 69 ro_fd, 0);.#endi
2140: 66 0a 23 69 66 64 65 66 20 45 58 45 43 55 54 41 f.#ifdef EXECUTA
2150: 42 4c 45 5f 56 49 41 5f 53 48 4d 0a 20 20 20 20 BLE_VIA_SHM.
2160: 20 20 69 6e 74 20 73 68 6d 69 64 20 3d 20 73 68 int shmid = sh
2170: 6d 67 65 74 28 49 50 43 5f 50 52 49 56 41 54 45 mget(IPC_PRIVATE
2180: 2c 20 70 61 67 65 73 69 7a 65 2c 20 30 37 30 30 , pagesize, 0700
2190: 7c 49 50 43 5f 43 52 45 41 54 29 3b 0a 20 20 20 |IPC_CREAT);.
21a0: 20 20 20 69 66 20 28 73 68 6d 69 64 3c 30 29 0a if (shmid<0).
21b0: 20 20 20 20 20 20 20 20 7b 20 70 61 67 65 20 3d { page =
21c0: 20 28 63 68 61 72 2a 29 28 2d 31 29 3b 20 7d 0a (char*)(-1); }.
21d0: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 else.
21e0: 20 20 20 7b 20 70 61 67 65 20 3d 20 73 68 6d 61 { page = shma
21f0: 74 28 73 68 6d 69 64 2c 20 30 2c 20 30 29 3b 20 t(shmid, 0, 0);
2200: 73 68 6d 63 74 6c 28 73 68 6d 69 64 2c 20 49 50 shmctl(shmid, IP
2210: 43 5f 52 4d 49 44 2c 20 30 29 3b 20 7d 0a 23 65 C_RMID, 0); }.#e
2220: 6e 64 69 66 0a 20 20 20 20 20 20 69 66 20 28 70 ndif. if (p
2230: 61 67 65 20 3d 3d 20 28 63 68 61 72 2a 29 28 2d age == (char*)(-
2240: 31 29 29 0a 20 20 20 20 20 20 20 20 7b 20 66 70 1)). { fp
2250: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 74 72 rintf(stderr,"tr
2260: 61 6d 70 6f 6c 69 6e 65 3a 20 4f 75 74 20 6f 66 ampoline: Out of
2270: 20 76 69 72 74 75 61 6c 20 6d 65 6d 6f 72 79 21 virtual memory!
2280: 5c 6e 22 29 3b 20 61 62 6f 72 74 28 29 3b 20 7d \n"); abort(); }
2290: 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 . /* Fill i
22a0: 74 20 77 69 74 68 20 66 72 65 65 20 74 72 61 6d t with free tram
22b0: 70 6f 6c 69 6e 65 73 2e 20 2a 2f 0a 20 20 20 20 polines. */.
22c0: 20 20 7b 20 63 68 61 72 2a 2a 20 6c 61 73 74 20 { char** last
22d0: 3d 20 26 66 72 65 65 6c 69 73 74 3b 0a 20 20 20 = &freelist;.
22e0: 20 20 20 20 20 63 68 61 72 2a 20 70 61 67 65 5f char* page_
22f0: 65 6e 64 20 3d 20 70 61 67 65 20 2b 20 70 61 67 end = page + pag
2300: 65 73 69 7a 65 3b 0a 20 20 20 20 20 20 20 20 77 esize;. w
2310: 68 69 6c 65 20 28 70 61 67 65 2b 54 52 41 4d 50 hile (page+TRAMP
2320: 5f 4c 45 4e 47 54 48 20 3c 3d 20 70 61 67 65 5f _LENGTH <= page_
2330: 65 6e 64 29 0a 20 20 20 20 20 20 20 20 20 20 7b end). {
2340: 20 2a 6c 61 73 74 20 3d 20 70 61 67 65 3b 20 6c *last = page; l
2350: 61 73 74 20 3d 20 28 63 68 61 72 2a 2a 29 70 61 ast = (char**)pa
2360: 67 65 3b 20 70 61 67 65 20 2b 3d 20 54 52 41 4d ge; page += TRAM
2370: 50 5f 4c 45 4e 47 54 48 3b 20 7d 0a 20 20 20 20 P_LENGTH; }.
2380: 20 20 20 20 2a 6c 61 73 74 20 3d 20 4e 55 4c 4c *last = NULL
2390: 3b 0a 20 20 20 20 7d 20 7d 0a 20 20 66 75 6e 63 ;. } }. func
23a0: 74 69 6f 6e 20 3d 20 66 72 65 65 6c 69 73 74 3b tion = freelist;
23b0: 20 66 72 65 65 6c 69 73 74 20 3d 20 2a 28 63 68 freelist = *(ch
23c0: 61 72 2a 2a 29 66 72 65 65 6c 69 73 74 3b 0a 23 ar**)freelist;.#
23d0: 65 6c 73 65 0a 20 20 7b 20 63 68 61 72 2a 20 72 else. { char* r
23e0: 6f 6f 6d 20 3d 20 28 63 68 61 72 2a 29 20 6d 61 oom = (char*) ma
23f0: 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 76 6f 69 64 lloc(sizeof(void
2400: 2a 29 20 2b 20 54 52 41 4d 50 5f 4c 45 4e 47 54 *) + TRAMP_LENGT
2410: 48 20 2b 20 54 52 41 4d 50 5f 41 4c 49 47 4e 2d H + TRAMP_ALIGN-
2420: 31 29 3b 0a 20 20 20 20 69 66 20 28 21 72 6f 6f 1);. if (!roo
2430: 6d 29 0a 20 20 20 20 20 20 7b 20 66 70 72 69 6e m). { fprin
2440: 74 66 28 73 74 64 65 72 72 2c 22 74 72 61 6d 70 tf(stderr,"tramp
2450: 6f 6c 69 6e 65 3a 20 4f 75 74 20 6f 66 20 76 69 oline: Out of vi
2460: 72 74 75 61 6c 20 6d 65 6d 6f 72 79 21 5c 6e 22 rtual memory!\n"
2470: 29 3b 20 61 62 6f 72 74 28 29 3b 20 7d 0a 20 20 ); abort(); }.
2480: 20 20 66 75 6e 63 74 69 6f 6e 20 3d 20 28 63 68 function = (ch
2490: 61 72 2a 29 28 28 28 6c 6f 6e 67 29 72 6f 6f 6d ar*)(((long)room
24a0: 20 2b 20 73 69 7a 65 6f 66 28 76 6f 69 64 2a 29 + sizeof(void*)
24b0: 20 2b 20 54 52 41 4d 50 5f 41 4c 49 47 4e 2d 31 + TRAMP_ALIGN-1
24c0: 29 20 26 20 2d 54 52 41 4d 50 5f 41 4c 49 47 4e ) & -TRAMP_ALIGN
24d0: 29 3b 0a 20 20 20 20 28 28 63 68 61 72 2a 2a 29 );. ((char**)
24e0: 66 75 6e 63 74 69 6f 6e 29 5b 2d 31 5d 20 3d 20 function)[-1] =
24f0: 72 6f 6f 6d 3b 20 2f 2a 20 62 61 63 6b 70 6f 69 room; /* backpoi
2500: 6e 74 65 72 20 66 6f 72 20 66 72 65 65 5f 74 72 nter for free_tr
2510: 61 6d 70 6f 6c 69 6e 65 28 29 20 2a 2f 0a 20 20 ampoline() */.
2520: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 32 }.#endif.. /* 2
2530: 2e 20 46 69 6c 6c 20 6f 75 74 20 74 68 65 20 74 . Fill out the t
2540: 72 61 6d 70 6f 6c 69 6e 65 20 2a 2f 0a 23 69 66 rampoline */.#if
2550: 64 65 66 20 5f 5f 69 33 38 36 5f 5f 0a 20 20 2f def __i386__. /
2560: 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a * function:. *
2570: 20 20 20 20 6d 6f 76 6c 20 24 3c 64 61 74 61 3e movl $<data>
2580: 2c 3c 76 61 72 69 61 62 6c 65 3e 09 09 43 37 20 ,<variable>..C7
2590: 30 35 20 3c 76 61 72 69 61 62 6c 65 3e 20 3c 64 05 <variable> <d
25a0: 61 74 61 3e 0a 20 20 20 2a 20 20 20 20 6a 6d 70 ata>. * jmp
25b0: 20 3c 61 64 64 72 65 73 73 3e 09 09 09 45 39 20 <address>...E9
25c0: 3c 61 64 64 72 65 73 73 3e 2d 3c 68 65 72 65 3e <address>-<here>
25d0: 0a 20 20 20 2a 20 68 65 72 65 3a 0a 20 20 20 2a . * here:. *
25e0: 2f 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 /. *(short *) (
25f0: 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 function + 0) =
2600: 30 78 30 35 43 37 3b 0a 20 20 2a 28 6c 6f 6e 67 0x05C7;. *(long
2610: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
2620: 20 32 29 20 3d 20 28 6c 6f 6e 67 29 20 76 61 72 2) = (long) var
2630: 69 61 62 6c 65 3b 0a 20 20 2a 28 6c 6f 6e 67 20 iable;. *(long
2640: 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
2650: 36 29 20 3d 20 28 6c 6f 6e 67 29 20 64 61 74 61 6) = (long) data
2660: 3b 0a 20 20 2a 28 63 68 61 72 20 2a 29 20 20 28 ;. *(char *) (
2670: 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 function +10) =
2680: 30 78 45 39 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 0xE9;. *(long *
2690: 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 31 ) (function +11
26a0: 29 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 72 65 ) = (long) addre
26b0: 73 73 20 2d 20 28 6c 6f 6e 67 29 20 28 66 75 6e ss - (long) (fun
26c0: 63 74 69 6f 6e 20 2b 20 31 35 29 3b 0a 23 64 65 ction + 15);.#de
26d0: 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 75 fine is_tramp(fu
26e0: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 nction) \. *(u
26f0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
2700: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 (function + 0)
2710: 3d 3d 20 30 78 30 35 43 37 20 26 26 20 5c 0a 20 == 0x05C7 && \.
2720: 20 2a 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 *(unsigned char
2730: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
2740: 31 30 29 20 3d 3d 20 30 78 45 39 0a 23 64 65 66 10) == 0xE9.#def
2750: 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 ine tramp_addres
2760: 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 s(function) \.
2770: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
2780: 63 74 69 6f 6e 20 2b 31 31 29 20 2b 20 28 6c 6f ction +11) + (lo
2790: 6e 67 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 ng) (function +
27a0: 31 35 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 15).#define tram
27b0: 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 p_variable(funct
27c0: 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 ion) \. *(long
27d0: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
27e0: 20 32 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 2).#define tram
27f0: 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 p_data(function)
2800: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
2810: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 0a (function + 6).
2820: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
2830: 6d 36 38 6b 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 m68k__. /* func
2840: 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 6d 6f tion:. * mo
2850: 76 65 6c 20 23 3c 64 61 74 61 3e 2c 3c 76 61 72 vel #<data>,<var
2860: 69 61 62 6c 65 3e 09 32 33 20 46 43 20 3c 64 61 iable>.23 FC <da
2870: 74 61 3e 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 ta> <variable>.
2880: 20 20 2a 20 20 20 20 6a 6d 70 20 3c 61 64 64 72 * jmp <addr
2890: 65 73 73 3e 09 09 09 34 45 20 46 39 20 3c 61 64 ess>...4E F9 <ad
28a0: 64 72 65 73 73 3e 0a 20 20 20 2a 20 20 20 20 6e dress>. * n
28b0: 6f 70 09 09 09 09 34 45 20 37 31 0a 20 20 20 2a op....4E 71. *
28c0: 2f 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 /. *(short *) (
28d0: 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 function + 0) =
28e0: 30 78 32 33 46 43 3b 0a 20 20 2a 28 6c 6f 6e 67 0x23FC;. *(long
28f0: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
2900: 20 32 29 20 3d 20 28 6c 6f 6e 67 29 20 64 61 74 2) = (long) dat
2910: 61 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 a;. *(long *)
2920: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d (function + 6) =
2930: 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 (long) variable
2940: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
2950: 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 function +10) =
2960: 30 78 34 45 46 39 3b 0a 20 20 2a 28 6c 6f 6e 67 0x4EF9;. *(long
2970: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
2980: 31 32 29 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 12) = (long) add
2990: 72 65 73 73 3b 0a 20 20 2a 28 73 68 6f 72 74 20 ress;. *(short
29a0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 *) (function +16
29b0: 29 20 3d 20 30 78 34 45 37 31 3b 0a 23 64 65 66 ) = 0x4E71;.#def
29c0: 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e ine is_tramp(fun
29d0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e ction) \. *(un
29e0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
29f0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d (function + 0) =
2a00: 3d 20 30 78 32 33 46 43 20 26 26 20 5c 0a 20 20 = 0x23FC && \.
2a10: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
2a20: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
2a30: 30 29 20 3d 3d 20 30 78 34 45 46 39 20 26 26 20 0) == 0x4EF9 &&
2a40: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
2a50: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
2a60: 6e 20 2b 31 36 29 20 3d 3d 20 30 78 34 45 37 31 n +16) == 0x4E71
2a70: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
2a80: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
2a90: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
2aa0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 0a (function +12).
2ab0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 #define tramp_va
2ac0: 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 riable(function)
2ad0: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
2ae0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 0a (function + 6).
2af0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
2b00: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
2b10: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
2b20: 6e 63 74 69 6f 6e 20 2b 20 32 29 0a 23 65 6e 64 nction + 2).#end
2b30: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f if.#if defined(_
2b40: 5f 6d 69 70 73 5f 5f 29 20 26 26 20 21 64 65 66 _mips__) && !def
2b50: 69 6e 65 64 28 5f 5f 6d 69 70 73 6e 33 32 5f 5f ined(__mipsn32__
2b60: 29 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a ). /* function:
2b70: 0a 20 20 20 2a 20 20 20 20 6c 69 20 24 32 2c 3c . * li $2,<
2b80: 64 61 74 61 3e 26 30 78 66 66 66 66 30 30 30 30 data>&0xffff0000
2b90: 09 09 33 43 20 30 32 20 68 69 31 36 28 3c 64 61 ..3C 02 hi16(<da
2ba0: 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 6f 72 69 ta>). * ori
2bb0: 20 24 32 2c 24 32 2c 3c 64 61 74 61 3e 26 30 78 $2,$2,<data>&0x
2bc0: 66 66 66 66 09 09 33 34 20 34 32 20 6c 6f 31 36 ffff..34 42 lo16
2bd0: 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 (<data>). *
2be0: 20 73 77 20 24 32 2c 3c 76 61 72 69 61 62 6c 65 sw $2,<variable
2bf0: 3e 09 09 33 43 20 30 31 20 68 69 31 36 28 3c 76 >..3C 01 hi16(<v
2c00: 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 20 ariable>). *
2c10: 20 20 09 09 09 09 41 43 20 32 32 20 6c 6f 31 36 ....AC 22 lo16
2c20: 28 3c 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 (<variable>).
2c30: 2a 20 20 20 20 6c 69 20 24 32 35 2c 3c 61 64 64 * li $25,<add
2c40: 72 65 73 73 3e 26 30 78 66 66 66 66 30 30 30 30 ress>&0xffff0000
2c50: 09 33 43 20 31 39 20 68 69 31 36 28 3c 61 64 64 .3C 19 hi16(<add
2c60: 72 65 73 73 3e 29 0a 20 20 20 2a 20 20 20 20 6f ress>). * o
2c70: 72 69 20 24 32 35 2c 24 32 35 2c 3c 61 64 64 72 ri $25,$25,<addr
2c80: 65 73 73 3e 26 30 78 66 66 66 66 09 33 37 20 33 ess>&0xffff.37 3
2c90: 39 20 6c 6f 31 36 28 3c 61 64 64 72 65 73 73 3e 9 lo16(<address>
2ca0: 29 0a 20 20 20 2a 20 20 20 20 6a 20 24 32 35 09 ). * j $25.
2cb0: 09 09 09 30 33 20 32 30 20 30 30 20 30 38 0a 20 ...03 20 00 08.
2cc0: 20 20 2a 20 20 20 20 6e 6f 70 09 09 09 09 30 30 * nop....00
2cd0: 20 30 30 20 30 30 20 30 30 0a 20 20 20 2a 2f 0a 00 00 00. */.
2ce0: 20 20 2f 2a 20 57 68 61 74 20 61 62 6f 75 74 20 /* What about
2cf0: 62 69 67 20 65 6e 64 69 61 6e 20 2f 20 6c 69 74 big endian / lit
2d00: 74 6c 65 20 65 6e 64 69 61 6e 20 3f 3f 20 2a 2f tle endian ?? */
2d10: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
2d20: 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 unction + 0) = 0
2d30: 78 33 43 30 32 3b 0a 20 20 2a 28 73 68 6f 72 74 x3C02;. *(short
2d40: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
2d50: 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 2) = (unsigned l
2d60: 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 31 36 3b ong) data >> 16;
2d70: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
2d80: 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 20 30 unction + 4) = 0
2d90: 78 33 34 34 32 3b 0a 20 20 2a 28 73 68 6f 72 74 x3442;. *(short
2da0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
2db0: 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6) = (unsigned l
2dc0: 6f 6e 67 29 20 64 61 74 61 20 26 20 30 78 66 66 ong) data & 0xff
2dd0: 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 ff;. *(short *)
2de0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
2df0: 3d 20 30 78 33 43 30 31 3b 0a 20 20 2a 28 73 68 = 0x3C01;. *(sh
2e00: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
2e10: 20 2b 31 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 +10) = (unsigne
2e20: 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 d long) variable
2e30: 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 >> 16;. *(shor
2e40: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
2e50: 31 32 29 20 3d 20 30 78 41 43 32 32 3b 0a 20 20 12) = 0xAC22;.
2e60: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
2e70: 74 69 6f 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 tion +14) = (uns
2e80: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 igned long) vari
2e90: 61 62 6c 65 20 26 20 30 78 66 66 66 66 3b 0a 20 able & 0xffff;.
2ea0: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
2eb0: 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 33 ction +16) = 0x3
2ec0: 43 31 39 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a C19;. *(short *
2ed0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 ) (function +18)
2ee0: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
2ef0: 67 29 20 61 64 64 72 65 73 73 20 3e 3e 20 31 36 g) address >> 16
2f00: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
2f10: 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 function +20) =
2f20: 30 78 33 37 33 39 3b 0a 20 20 2a 28 73 68 6f 72 0x3739;. *(shor
2f30: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
2f40: 32 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 22) = (unsigned
2f50: 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 20 26 20 long) address &
2f60: 30 78 66 66 66 66 3b 0a 20 20 2a 28 6c 6f 6e 67 0xffff;. *(long
2f70: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
2f80: 32 34 29 20 3d 20 30 78 30 33 32 30 30 30 30 38 24) = 0x03200008
2f90: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 ;. *(long *) (
2fa0: 66 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 function +28) =
2fb0: 30 78 30 30 30 30 30 30 30 30 3b 0a 23 64 65 66 0x00000000;.#def
2fc0: 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e ine is_tramp(fun
2fd0: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e ction) \. *(un
2fe0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
2ff0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d (function + 0) =
3000: 3d 20 30 78 33 43 30 32 20 26 26 20 5c 0a 20 20 = 0x3C02 && \.
3010: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
3020: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
3030: 34 29 20 3d 3d 20 30 78 33 34 34 32 20 26 26 20 4) == 0x3442 &&
3040: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
3050: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
3060: 6e 20 2b 20 38 29 20 3d 3d 20 30 78 33 43 30 31 n + 8) == 0x3C01
3070: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
3080: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
3090: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 ction +12) == 0x
30a0: 41 43 32 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e AC22 && \. *(un
30b0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
30c0: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
30d0: 3d 20 30 78 33 43 31 39 20 26 26 20 5c 0a 20 20 = 0x3C19 && \.
30e0: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
30f0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
3100: 30 29 20 3d 3d 20 30 78 33 37 33 39 20 26 26 20 0) == 0x3739 &&
3110: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c \. *(unsigned l
3120: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
3130: 6e 20 2b 32 34 29 20 3d 3d 20 30 78 30 33 32 30 n +24) == 0x0320
3140: 30 30 30 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 0008 && \. *(un
3150: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 20 signed long *)
3160: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d (function +28) =
3170: 3d 20 30 78 30 30 30 30 30 30 30 30 0a 23 64 65 = 0x00000000.#de
3180: 66 69 6e 65 20 68 69 6c 6f 28 68 69 77 6f 72 64 fine hilo(hiword
3190: 2c 6c 6f 77 6f 72 64 29 20 20 5c 0a 20 20 28 28 ,loword) \. ((
31a0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
31b0: 28 68 69 77 6f 72 64 29 20 3c 3c 20 31 36 29 20 (hiword) << 16)
31c0: 7c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 | (unsigned long
31d0: 29 20 28 6c 6f 77 6f 72 64 29 29 0a 23 64 65 66 ) (loword)).#def
31e0: 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 ine tramp_addres
31f0: 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 s(function) \.
3200: 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 hilo(*(unsigned
3210: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
3220: 69 6f 6e 20 2b 31 38 29 2c 20 2a 28 75 6e 73 69 ion +18), *(unsi
3230: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
3240: 75 6e 63 74 69 6f 6e 20 2b 32 32 29 29 0a 23 64 unction +22)).#d
3250: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
3260: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
3270: 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 \. hilo(*(unsig
3280: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
3290: 6e 63 74 69 6f 6e 20 2b 31 30 29 2c 20 2a 28 75 nction +10), *(u
32a0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
32b0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 29 (function +14))
32c0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 .#define tramp_d
32d0: 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ata(function) \
32e0: 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e . hilo(*(unsign
32f0: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
3300: 63 74 69 6f 6e 20 2b 20 32 29 2c 20 2a 28 75 6e ction + 2), *(un
3310: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
3320: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 29 0a (function + 6)).
3330: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
3340: 6d 69 70 73 6e 33 32 5f 5f 0a 20 20 2f 2a 20 66 mipsn32__. /* f
3350: 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 unction:. *
3360: 20 6c 77 20 24 32 2c 32 34 28 24 32 35 29 09 09 lw $2,24($25)..
3370: 09 38 46 20 32 32 20 30 30 20 31 38 0a 20 20 20 .8F 22 00 18.
3380: 2a 20 20 20 20 6c 77 20 24 33 2c 32 38 28 24 32 * lw $3,28($2
3390: 35 29 09 09 09 38 46 20 32 33 20 30 30 20 31 43 5)...8F 23 00 1C
33a0: 0a 20 20 20 2a 20 20 20 20 73 77 20 24 33 2c 30 . * sw $3,0
33b0: 28 24 32 29 09 09 09 41 43 20 34 33 20 30 30 20 ($2)...AC 43 00
33c0: 30 30 0a 20 20 20 2a 20 20 20 20 6c 77 20 24 32 00. * lw $2
33d0: 35 2c 33 32 28 24 32 35 29 09 09 09 38 46 20 33 5,32($25)...8F 3
33e0: 39 20 30 30 20 32 30 0a 20 20 20 2a 20 20 20 20 9 00 20. *
33f0: 6a 20 24 32 35 09 09 09 09 30 33 20 32 30 20 30 j $25....03 20 0
3400: 30 20 30 38 0a 20 20 20 2a 20 20 20 20 6e 6f 70 0 08. * nop
3410: 09 09 09 09 30 30 20 30 30 20 30 30 20 30 30 0a ....00 00 00 00.
3420: 20 20 20 2a 20 20 20 20 2e 77 6f 72 64 20 3c 76 * .word <v
3430: 61 72 69 61 62 6c 65 3e 09 09 3c 76 61 72 69 61 ariable>..<varia
3440: 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 2e 77 6f ble>. * .wo
3450: 72 64 20 3c 64 61 74 61 3e 09 09 09 3c 64 61 74 rd <data>...<dat
3460: 61 3e 0a 20 20 20 2a 20 20 20 20 2e 77 6f 72 64 a>. * .word
3470: 20 3c 61 64 64 72 65 73 73 3e 09 09 09 3c 61 64 <address>...<ad
3480: 64 72 65 73 73 3e 0a 20 20 20 2a 2f 0a 20 20 2f dress>. */. /
3490: 2a 20 57 68 61 74 20 61 62 6f 75 74 20 62 69 67 * What about big
34a0: 20 65 6e 64 69 61 6e 20 2f 20 6c 69 74 74 6c 65 endian / little
34b0: 20 65 6e 64 69 61 6e 20 3f 3f 20 2a 2f 0a 20 20 endian ?? */.
34c0: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
34d0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 ) (function + 0)
34e0: 20 3d 20 30 78 38 46 32 32 30 30 31 38 3b 0a 20 = 0x8F220018;.
34f0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 *(unsigned int
3500: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 *) (function + 4
3510: 29 20 3d 20 30 78 38 46 32 33 30 30 31 43 3b 0a ) = 0x8F23001C;.
3520: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 *(unsigned int
3530: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
3540: 38 29 20 3d 20 30 78 41 43 34 33 30 30 30 30 3b 8) = 0xAC430000;
3550: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e . *(unsigned in
3560: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
3570: 31 32 29 20 3d 20 30 78 38 46 33 39 30 30 32 30 12) = 0x8F390020
3580: 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 ;. *(unsigned i
3590: 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 nt *) (function
35a0: 2b 31 36 29 20 3d 20 30 78 30 33 32 30 30 30 30 +16) = 0x0320000
35b0: 38 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 8;. *(unsigned
35c0: 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e int *) (function
35d0: 20 2b 32 30 29 20 3d 20 30 78 30 30 30 30 30 30 +20) = 0x000000
35e0: 30 30 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 00;. *(unsigned
35f0: 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f int *) (functio
3600: 6e 20 2b 32 34 29 20 3d 20 28 75 6e 73 69 67 6e n +24) = (unsign
3610: 65 64 20 69 6e 74 29 20 76 61 72 69 61 62 6c 65 ed int) variable
3620: 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 ;. *(unsigned i
3630: 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 nt *) (function
3640: 2b 32 38 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 +28) = (unsigned
3650: 20 69 6e 74 29 20 64 61 74 61 3b 0a 20 20 2a 28 int) data;. *(
3660: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 unsigned int *)
3670: 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d (function +32) =
3680: 20 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 (unsigned int)
3690: 61 64 64 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 address;.#define
36a0: 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 is_tramp(functi
36b0: 6f 6e 29 20 20 5c 0a 20 20 2a 28 69 6e 74 20 2a on) \. *(int *
36c0: 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 ) (func
36d0: 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 38 tion + 0) == 0x8
36e0: 46 32 32 30 30 31 38 20 26 26 20 5c 0a 20 20 2a F220018 && \. *
36f0: 28 69 6e 74 20 2a 29 20 20 20 20 20 20 20 20 20 (int *)
3700: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 (function + 4)
3710: 3d 3d 20 30 78 38 46 32 33 30 30 31 43 20 26 26 == 0x8F23001C &&
3720: 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 \. *(int *)
3730: 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e (function
3740: 20 2b 20 38 29 20 3d 3d 20 30 78 41 43 34 33 30 + 8) == 0xAC430
3750: 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 000 && \. *(int
3760: 20 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 75 *) (fu
3770: 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 nction +12) == 0
3780: 78 38 46 33 39 30 30 32 30 20 26 26 20 5c 0a 20 x8F390020 && \.
3790: 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 20 20 20 *(int *)
37a0: 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 (function +16
37b0: 29 20 3d 3d 20 30 78 30 33 32 30 30 30 30 38 20 ) == 0x03200008
37c0: 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 && \. *(int *)
37d0: 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 (functi
37e0: 6f 6e 20 2b 32 30 29 20 3d 3d 20 30 78 30 30 30 on +20) == 0x000
37f0: 30 30 30 30 30 0a 23 64 65 66 69 6e 65 20 74 72 00000.#define tr
3800: 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e 63 amp_address(func
3810: 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 tion) \. *(uns
3820: 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 igned int *) (fu
3830: 6e 63 74 69 6f 6e 20 2b 33 32 29 0a 23 64 65 66 nction +32).#def
3840: 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 ine tramp_variab
3850: 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a le(function) \.
3860: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 *(unsigned int
3870: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
3880: 34 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 4).#define tramp
3890: 5f 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 _data(function)
38a0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
38b0: 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e int *) (function
38c0: 20 2b 32 38 29 0a 23 65 6e 64 69 66 0a 23 69 66 +28).#endif.#if
38d0: 64 65 66 20 5f 5f 6d 69 70 73 36 34 6f 6c 64 5f def __mips64old_
38e0: 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a _. /* function:
38f0: 0a 20 20 20 2a 20 20 20 20 64 6c 69 20 24 32 2c . * dli $2,
3900: 3c 76 61 72 69 61 62 6c 65 3e 09 09 33 43 20 30 <variable>..3C 0
3910: 32 20 68 69 31 36 28 68 69 33 32 28 3c 76 61 72 2 hi16(hi32(<var
3920: 69 61 62 6c 65 3e 29 29 0a 20 20 20 2a 09 09 09 iable>)). *...
3930: 09 09 33 34 20 34 32 20 6c 6f 31 36 28 68 69 33 ..34 42 lo16(hi3
3940: 32 28 3c 76 61 72 69 61 62 6c 65 3e 29 29 0a 20 2(<variable>)).
3950: 20 20 2a 09 09 09 09 09 30 30 20 30 32 20 31 34 *.....00 02 14
3960: 20 33 38 0a 20 20 20 2a 09 09 09 09 09 33 34 20 38. *.....34
3970: 34 32 20 68 69 31 36 28 6c 6f 33 32 28 3c 76 61 42 hi16(lo32(<va
3980: 72 69 61 62 6c 65 3e 29 29 0a 20 20 20 2a 09 09 riable>)). *..
3990: 09 09 09 30 30 20 30 32 20 31 34 20 33 38 0a 20 ...00 02 14 38.
39a0: 20 20 2a 09 09 09 09 09 33 34 20 34 32 20 6c 6f *.....34 42 lo
39b0: 31 36 28 6c 6f 33 32 28 3c 76 61 72 69 61 62 6c 16(lo32(<variabl
39c0: 65 3e 29 29 0a 20 20 20 2a 20 20 20 20 64 6c 69 e>)). * dli
39d0: 20 24 33 2c 3c 64 61 74 61 3e 09 09 09 33 43 20 $3,<data>...3C
39e0: 30 33 20 68 69 31 36 28 68 69 33 32 28 3c 64 61 03 hi16(hi32(<da
39f0: 74 61 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 33 ta>)). *.....3
3a00: 34 20 36 33 20 6c 6f 31 36 28 68 69 33 32 28 3c 4 63 lo16(hi32(<
3a10: 64 61 74 61 3e 29 29 0a 20 20 20 2a 09 09 09 09 data>)). *....
3a20: 09 30 30 20 30 33 20 31 43 20 33 38 0a 20 20 20 .00 03 1C 38.
3a30: 2a 09 09 09 09 09 33 34 20 36 33 20 68 69 31 36 *.....34 63 hi16
3a40: 28 6c 6f 33 32 28 3c 64 61 74 61 3e 29 29 0a 20 (lo32(<data>)).
3a50: 20 20 2a 09 09 09 09 09 30 30 20 30 33 20 31 43 *.....00 03 1C
3a60: 20 33 38 0a 20 20 20 2a 09 09 09 09 09 33 34 20 38. *.....34
3a70: 36 33 20 6c 6f 31 36 28 6c 6f 33 32 28 3c 64 61 63 lo16(lo32(<da
3a80: 74 61 3e 29 29 0a 20 20 20 2a 20 20 20 20 73 64 ta>)). * sd
3a90: 20 24 33 2c 30 28 24 32 29 09 09 09 46 43 20 34 $3,0($2)...FC 4
3aa0: 33 20 30 30 20 30 30 0a 20 20 20 2a 20 20 20 20 3 00 00. *
3ab0: 64 6c 69 20 24 32 35 2c 3c 61 64 64 72 65 73 73 dli $25,<address
3ac0: 3e 09 09 33 43 20 31 39 20 68 69 31 36 28 68 69 >..3C 19 hi16(hi
3ad0: 33 32 28 3c 61 64 64 72 65 73 73 3e 29 29 0a 20 32(<address>)).
3ae0: 20 20 2a 09 09 09 09 09 33 37 20 33 39 20 6c 6f *.....37 39 lo
3af0: 31 36 28 68 69 33 32 28 3c 61 64 64 72 65 73 73 16(hi32(<address
3b00: 3e 29 29 0a 20 20 20 2a 09 09 09 09 09 30 30 20 >)). *.....00
3b10: 31 39 20 43 43 20 33 38 0a 20 20 20 2a 09 09 09 19 CC 38. *...
3b20: 09 09 33 37 20 33 39 20 68 69 31 36 28 6c 6f 33 ..37 39 hi16(lo3
3b30: 32 28 3c 61 64 64 72 65 73 73 3e 29 29 0a 20 20 2(<address>)).
3b40: 20 2a 09 09 09 09 09 30 30 20 31 39 20 43 43 20 *.....00 19 CC
3b50: 33 38 0a 20 20 20 2a 09 09 09 09 09 33 37 20 33 38. *.....37 3
3b60: 39 20 6c 6f 31 36 28 6c 6f 33 32 28 3c 61 64 64 9 lo16(lo32(<add
3b70: 72 65 73 73 3e 29 29 0a 20 20 20 2a 20 20 20 20 ress>)). *
3b80: 6a 20 24 32 35 09 09 09 09 30 33 20 32 30 20 30 j $25....03 20 0
3b90: 30 20 30 38 0a 20 20 20 2a 20 20 20 20 6e 6f 70 0 08. * nop
3ba0: 09 09 09 09 30 30 20 30 30 20 30 30 20 30 30 0a ....00 00 00 00.
3bb0: 20 20 20 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 20 */. /* What
3bc0: 61 62 6f 75 74 20 62 69 67 20 65 6e 64 69 61 6e about big endian
3bd0: 20 2f 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e / little endian
3be0: 20 3f 3f 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 ?? */. *(short
3bf0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
3c00: 30 29 20 3d 20 30 78 33 43 30 32 3b 0a 20 20 2a 0) = 0x3C02;. *
3c10: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
3c20: 69 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 ion + 2) = (unsi
3c30: 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 gned long) varia
3c40: 62 6c 65 20 3e 3e 20 34 38 3b 0a 20 20 2a 28 73 ble >> 48;. *(s
3c50: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
3c60: 6e 20 2b 20 34 29 20 3d 20 30 78 33 34 34 32 3b n + 4) = 0x3442;
3c70: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
3c80: 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 unction + 6) = (
3c90: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
3ca0: 76 61 72 69 61 62 6c 65 20 3e 3e 20 33 32 29 20 variable >> 32)
3cb0: 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e & 0xffff;. *(in
3cc0: 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e t *) (function
3cd0: 20 2b 20 38 29 20 3d 20 30 78 30 30 30 32 31 34 + 8) = 0x000214
3ce0: 33 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 38;. *(short *)
3cf0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 (function +12)
3d00: 3d 20 30 78 33 34 34 32 3b 0a 20 20 2a 28 73 68 = 0x3442;. *(sh
3d10: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3d20: 20 2b 31 34 29 20 3d 20 28 28 75 6e 73 69 67 6e +14) = ((unsign
3d30: 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c ed long) variabl
3d40: 65 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 66 e >> 16) & 0xfff
3d50: 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 f;. *(int *)
3d60: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
3d70: 20 30 78 30 30 30 32 31 34 33 38 3b 0a 20 20 2a 0x00021438;. *
3d80: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
3d90: 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 33 34 34 ion +20) = 0x344
3da0: 32 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 2;. *(short *)
3db0: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 20 3d (function +22) =
3dc0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long)
3dd0: 20 76 61 72 69 61 62 6c 65 20 26 20 30 78 66 66 variable & 0xff
3de0: 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 ff;. *(short *)
3df0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 (function +24)
3e00: 3d 20 30 78 33 43 30 33 3b 0a 20 20 2a 28 73 68 = 0x3C03;. *(sh
3e10: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3e20: 20 2b 32 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 +26) = (unsigne
3e30: 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 d long) data >>
3e40: 34 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 48;. *(short *)
3e50: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 (function +28)
3e60: 3d 20 30 78 33 34 36 33 3b 0a 20 20 2a 28 73 68 = 0x3463;. *(sh
3e70: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
3e80: 20 2b 33 30 29 20 3d 20 28 28 75 6e 73 69 67 6e +30) = ((unsign
3e90: 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 3e 3e ed long) data >>
3ea0: 20 33 32 29 20 26 20 30 78 66 66 66 66 3b 0a 20 32) & 0xffff;.
3eb0: 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 75 6e *(int *) (fun
3ec0: 63 74 69 6f 6e 20 2b 33 32 29 20 3d 20 30 78 30 ction +32) = 0x0
3ed0: 30 30 33 31 43 33 38 3b 0a 20 20 2a 28 73 68 6f 0031C38;. *(sho
3ee0: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
3ef0: 2b 33 36 29 20 3d 20 30 78 33 34 36 33 3b 0a 20 +36) = 0x3463;.
3f00: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
3f10: 63 74 69 6f 6e 20 2b 33 38 29 20 3d 20 28 28 75 ction +38) = ((u
3f20: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 nsigned long) da
3f30: 74 61 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 ta >> 16) & 0xff
3f40: 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 ff;. *(int *)
3f50: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 (function +40)
3f60: 3d 20 30 78 30 30 30 33 31 43 33 38 3b 0a 20 20 = 0x00031C38;.
3f70: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
3f80: 74 69 6f 6e 20 2b 34 34 29 20 3d 20 30 78 33 34 tion +44) = 0x34
3f90: 36 33 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 63;. *(short *)
3fa0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 36 29 20 (function +46)
3fb0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
3fc0: 29 20 64 61 74 61 20 26 20 30 78 66 66 66 66 3b ) data & 0xffff;
3fd0: 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 . *(int *) (f
3fe0: 75 6e 63 74 69 6f 6e 20 2b 34 38 29 20 3d 20 30 unction +48) = 0
3ff0: 78 46 43 34 33 30 30 30 30 3b 0a 20 20 2a 28 73 xFC430000;. *(s
4000: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
4010: 6e 20 2b 35 32 29 20 3d 20 30 78 33 43 31 39 3b n +52) = 0x3C19;
4020: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
4030: 75 6e 63 74 69 6f 6e 20 2b 35 34 29 20 3d 20 28 unction +54) = (
4040: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 unsigned long) a
4050: 64 64 72 65 73 73 20 3e 3e 20 34 38 3b 0a 20 20 ddress >> 48;.
4060: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
4070: 74 69 6f 6e 20 2b 35 36 29 20 3d 20 30 78 33 37 tion +56) = 0x37
4080: 33 39 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 39;. *(short *)
4090: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 38 29 20 (function +58)
40a0: 3d 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = ((unsigned lon
40b0: 67 29 20 61 64 64 72 65 73 73 20 3e 3e 20 33 32 g) address >> 32
40c0: 29 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 ) & 0xffff;. *(
40d0: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
40e0: 6f 6e 20 2b 36 30 29 20 3d 20 30 78 30 30 31 39 on +60) = 0x0019
40f0: 43 43 33 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 CC38;. *(short
4100: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 36 34 *) (function +64
4110: 29 20 3d 20 30 78 33 37 33 39 3b 0a 20 20 2a 28 ) = 0x3739;. *(
4120: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
4130: 6f 6e 20 2b 36 36 29 20 3d 20 28 28 75 6e 73 69 on +66) = ((unsi
4140: 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 gned long) addre
4150: 73 73 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 ss >> 16) & 0xff
4160: 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 ff;. *(int *)
4170: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 36 38 29 20 (function +68)
4180: 3d 20 30 78 30 30 31 39 43 43 33 38 3b 0a 20 20 = 0x0019CC38;.
4190: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
41a0: 74 69 6f 6e 20 2b 37 32 29 20 3d 20 30 78 33 37 tion +72) = 0x37
41b0: 33 39 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 39;. *(short *)
41c0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 37 34 29 20 (function +74)
41d0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 = (unsigned long
41e0: 29 20 61 64 64 72 65 73 73 20 26 20 30 78 66 66 ) address & 0xff
41f0: 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 ff;. *(int *)
4200: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 37 36 29 20 (function +76)
4210: 3d 20 30 78 30 33 32 30 30 30 30 38 3b 0a 20 20 = 0x03200008;.
4220: 2a 28 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 *(int *) (func
4230: 74 69 6f 6e 20 2b 38 30 29 20 3d 20 30 78 30 30 tion +80) = 0x00
4240: 30 30 30 30 30 30 3b 0a 23 64 65 66 69 6e 65 20 000000;.#define
4250: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
4260: 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e n) \. *(unsign
4270: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
4280: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 ction + 0) == 0x
4290: 33 43 30 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e 3C02 && \. *(un
42a0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
42b0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
42c0: 3d 20 30 78 33 34 34 32 20 26 26 20 5c 0a 20 20 = 0x3442 && \.
42d0: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
42e0: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 ) (function +
42f0: 38 29 20 3d 3d 20 30 78 30 30 30 32 31 34 33 38 8) == 0x00021438
4300: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
4310: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
4320: 63 74 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 78 ction +12) == 0x
4330: 33 34 34 32 20 26 26 20 5c 0a 20 20 2a 28 75 6e 3442 && \. *(un
4340: 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 signed int *)
4350: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
4360: 3d 20 30 78 30 30 30 32 31 34 33 38 20 26 26 20 = 0x00021438 &&
4370: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
4380: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
4390: 6e 20 2b 32 30 29 20 3d 3d 20 30 78 33 34 34 32 n +20) == 0x3442
43a0: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
43b0: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
43c0: 63 74 69 6f 6e 20 2b 32 34 29 20 3d 3d 20 30 78 ction +24) == 0x
43d0: 33 43 30 33 20 26 26 20 5c 0a 20 20 2a 28 75 6e 3C03 && \. *(un
43e0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
43f0: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d (function +28) =
4400: 3d 20 30 78 33 34 36 33 20 26 26 20 5c 0a 20 20 = 0x3463 && \.
4410: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
4420: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 ) (function +3
4430: 32 29 20 3d 3d 20 30 78 30 30 30 33 31 43 33 38 2) == 0x00031C38
4440: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
4450: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
4460: 63 74 69 6f 6e 20 2b 33 36 29 20 3d 3d 20 30 78 ction +36) == 0x
4470: 33 34 36 33 20 26 26 20 5c 0a 20 20 2a 28 75 6e 3463 && \. *(un
4480: 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 signed int *)
4490: 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 20 3d (function +40) =
44a0: 3d 20 30 78 30 30 30 33 31 43 33 38 20 26 26 20 = 0x00031C38 &&
44b0: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
44c0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
44d0: 6e 20 2b 34 34 29 20 3d 3d 20 30 78 33 34 36 33 n +44) == 0x3463
44e0: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
44f0: 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e ed int *) (fun
4500: 63 74 69 6f 6e 20 2b 34 38 29 20 3d 3d 20 30 78 ction +48) == 0x
4510: 46 43 34 33 30 30 30 30 20 26 26 20 5c 0a 20 20 FC430000 && \.
4520: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
4530: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 *) (function +5
4540: 32 29 20 3d 3d 20 30 78 33 43 31 39 20 26 26 20 2) == 0x3C19 &&
4550: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
4560: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
4570: 6e 20 2b 35 36 29 20 3d 3d 20 30 78 33 37 33 39 n +56) == 0x3739
4580: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
4590: 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e ed int *) (fun
45a0: 63 74 69 6f 6e 20 2b 36 30 29 20 3d 3d 20 30 78 ction +60) == 0x
45b0: 30 30 31 39 43 43 33 38 20 26 26 20 5c 0a 20 20 0019CC38 && \.
45c0: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
45d0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 36 *) (function +6
45e0: 34 29 20 3d 3d 20 30 78 33 37 33 39 20 26 26 20 4) == 0x3739 &&
45f0: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 \. *(unsigned i
4600: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
4610: 6e 20 2b 36 38 29 20 3d 3d 20 30 78 30 30 31 39 n +68) == 0x0019
4620: 43 43 33 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e CC38 && \. *(un
4630: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
4640: 28 66 75 6e 63 74 69 6f 6e 20 2b 37 32 29 20 3d (function +72) =
4650: 3d 20 30 78 33 37 33 39 20 26 26 20 5c 0a 20 20 = 0x3739 && \.
4660: 2a 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a *(unsigned int *
4670: 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 37 ) (function +7
4680: 36 29 20 3d 3d 20 30 78 30 33 32 30 30 30 30 38 6) == 0x03200008
4690: 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e && \. *(unsign
46a0: 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e ed int *) (fun
46b0: 63 74 69 6f 6e 20 2b 38 30 29 20 3d 3d 20 30 78 ction +80) == 0x
46c0: 30 30 30 30 30 30 30 30 0a 23 64 65 66 69 6e 65 00000000.#define
46d0: 20 68 69 6c 6f 28 77 6f 72 64 33 2c 77 6f 72 64 hilo(word3,word
46e0: 32 2c 77 6f 72 64 31 2c 77 6f 72 64 30 29 20 20 2,word1,word0)
46f0: 5c 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 20 \. (((unsigned
4700: 6c 6f 6e 67 29 20 28 77 6f 72 64 33 29 20 3c 3c long) (word3) <<
4710: 20 34 38 29 20 7c 20 28 28 75 6e 73 69 67 6e 65 48) | ((unsigne
4720: 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 32 29 20 d long) (word2)
4730: 3c 3c 20 33 32 29 20 7c 20 5c 0a 20 20 20 28 28 << 32) | \. ((
4740: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 unsigned long) (
4750: 77 6f 72 64 31 29 20 3c 3c 20 31 36 29 20 7c 20 word1) << 16) |
4760: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
4770: 28 77 6f 72 64 30 29 29 0a 23 64 65 66 69 6e 65 (word0)).#define
4780: 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 tramp_address(f
4790: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 unction) \. hi
47a0: 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 lo(*(unsigned sh
47b0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
47c0: 20 2b 35 34 29 2c 20 5c 0a 20 20 20 20 20 20 20 +54), \.
47d0: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
47e0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 *) (function +5
47f0: 38 29 2c 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 8), \. *(u
4800: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
4810: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 36 36 29 2c (function +66),
4820: 20 5c 0a 20 20 20 20 20 20 20 2a 28 75 6e 73 69 \. *(unsi
4830: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
4840: 75 6e 63 74 69 6f 6e 20 2b 37 34 29 29 0a 23 64 unction +74)).#d
4850: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
4860: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
4870: 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 \. hilo(*(unsig
4880: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
4890: 6e 63 74 69 6f 6e 20 2b 20 32 29 2c 20 5c 0a 20 nction + 2), \.
48a0: 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 *(unsigned
48b0: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
48c0: 69 6f 6e 20 2b 20 36 29 2c 20 5c 0a 20 20 20 20 ion + 6), \.
48d0: 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 *(unsigned sh
48e0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
48f0: 20 2b 31 34 29 2c 20 5c 0a 20 20 20 20 20 20 20 +14), \.
4900: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
4910: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
4920: 32 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 2)).#define tram
4930: 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 p_data(function)
4940: 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 \. hilo(*(uns
4950: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
4960: 66 75 6e 63 74 69 6f 6e 20 2b 32 36 29 2c 20 5c function +26), \
4970: 0a 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e . *(unsign
4980: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
4990: 63 74 69 6f 6e 20 2b 33 30 29 2c 20 5c 0a 20 20 ction +30), \.
49a0: 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 *(unsigned
49b0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
49c0: 6f 6e 20 2b 33 38 29 2c 20 5c 0a 20 20 20 20 20 on +38), \.
49d0: 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f *(unsigned sho
49e0: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
49f0: 2b 34 36 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 +46)).#endif.#if
4a00: 64 65 66 20 5f 5f 6d 69 70 73 36 34 5f 5f 0a 20 def __mips64__.
4a10: 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 /* function:.
4a20: 20 2a 20 20 20 20 6c 64 20 24 32 2c 32 34 28 24 * ld $2,24($
4a30: 32 35 29 09 09 09 44 46 20 32 32 20 30 30 20 31 25)...DF 22 00 1
4a40: 38 0a 20 20 20 2a 20 20 20 20 6c 64 20 24 33 2c 8. * ld $3,
4a50: 33 32 28 24 32 35 29 09 09 09 44 46 20 32 33 20 32($25)...DF 23
4a60: 30 30 20 32 30 0a 20 20 20 2a 20 20 20 20 73 64 00 20. * sd
4a70: 20 24 33 2c 30 28 24 32 29 09 09 09 46 43 20 34 $3,0($2)...FC 4
4a80: 33 20 30 30 20 30 30 0a 20 20 20 2a 20 20 20 20 3 00 00. *
4a90: 6c 64 20 24 32 35 2c 34 30 28 24 32 35 29 09 09 ld $25,40($25)..
4aa0: 09 44 46 20 33 39 20 30 30 20 32 38 0a 20 20 20 .DF 39 00 28.
4ab0: 2a 20 20 20 20 6a 20 24 32 35 09 09 09 09 30 33 * j $25....03
4ac0: 20 32 30 20 30 30 20 30 38 0a 20 20 20 2a 20 20 20 00 08. *
4ad0: 20 20 6e 6f 70 09 09 09 09 30 30 20 30 30 20 30 nop....00 00 0
4ae0: 30 20 30 30 0a 20 20 20 2a 20 20 20 20 2e 64 77 0 00. * .dw
4af0: 6f 72 64 20 3c 76 61 72 69 61 62 6c 65 3e 09 09 ord <variable>..
4b00: 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 20 2a 20 <variable>. *
4b10: 20 20 20 2e 64 77 6f 72 64 20 3c 64 61 74 61 3e .dword <data>
4b20: 09 09 09 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 ...<data>. *
4b30: 20 20 2e 64 77 6f 72 64 20 3c 61 64 64 72 65 73 .dword <addres
4b40: 73 3e 09 09 3c 61 64 64 72 65 73 73 3e 0a 20 20 s>..<address>.
4b50: 20 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 20 61 62 */. /* What ab
4b60: 6f 75 74 20 62 69 67 20 65 6e 64 69 61 6e 20 2f out big endian /
4b70: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 3f little endian ?
4b80: 3f 20 2a 2f 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 ? */. *(long *)
4b90: 20 20 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 (funct
4ba0: 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 44 46 32 ion + 0) = 0xDF2
4bb0: 32 30 30 31 38 44 46 32 33 30 30 32 30 4c 3b 0a 20018DF230020L;.
4bc0: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 20 20 20 *(long *)
4bd0: 20 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b (function +
4be0: 20 38 29 20 3d 20 30 78 46 43 34 33 30 30 30 30 8) = 0xFC430000
4bf0: 44 46 33 39 30 30 32 38 4c 3b 0a 20 20 2a 28 6c DF390028L;. *(l
4c00: 6f 6e 67 20 2a 29 20 20 20 20 20 20 20 20 20 20 ong *)
4c10: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
4c20: 20 30 78 30 33 32 30 30 30 30 38 30 30 30 30 30 0x0320000800000
4c30: 30 30 30 4c 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 000L;. *(unsign
4c40: 65 64 20 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 ed long *) (func
4c50: 74 69 6f 6e 20 2b 32 34 29 20 3d 20 28 75 6e 73 tion +24) = (uns
4c60: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 igned long) vari
4c70: 61 62 6c 65 3b 0a 20 20 2a 28 75 6e 73 69 67 6e able;. *(unsign
4c80: 65 64 20 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 ed long *) (func
4c90: 74 69 6f 6e 20 2b 33 32 29 20 3d 20 28 75 6e 73 tion +32) = (uns
4ca0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 igned long) data
4cb0: 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 6c ;. *(unsigned l
4cc0: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
4cd0: 20 2b 34 30 29 20 3d 20 28 75 6e 73 69 67 6e 65 +40) = (unsigne
4ce0: 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 3b d long) address;
4cf0: 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d .#define is_tram
4d00: 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 p(function) \.
4d10: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 *(long *)
4d20: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 (function +
4d30: 30 29 20 3d 3d 20 30 78 44 46 32 32 30 30 31 38 0) == 0xDF220018
4d40: 44 46 32 33 30 30 32 30 4c 20 26 26 20 5c 0a 20 DF230020L && \.
4d50: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 *(long *)
4d60: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 (function +
4d70: 38 29 20 3d 3d 20 30 78 46 43 34 33 30 30 30 30 8) == 0xFC430000
4d80: 44 46 33 39 30 30 32 38 4c 20 26 26 20 5c 0a 20 DF390028L && \.
4d90: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 20 20 20 20 *(long *)
4da0: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 (function +1
4db0: 36 29 20 3d 3d 20 30 78 30 33 32 30 30 30 30 38 6) == 0x03200008
4dc0: 30 30 30 30 30 30 30 30 4c 0a 23 64 65 66 69 6e 00000000L.#defin
4dd0: 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 73 28 e tramp_address(
4de0: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
4df0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a (unsigned long *
4e00: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 29 ) (function +40)
4e10: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 .#define tramp_v
4e20: 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e ariable(function
4e30: 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ) \. *(unsigne
4e40: 64 20 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 d long *) (funct
4e50: 69 6f 6e 20 2b 32 34 29 0a 23 64 65 66 69 6e 65 ion +24).#define
4e60: 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 tramp_data(func
4e70: 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 tion) \. *(uns
4e80: 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 28 66 igned long *) (f
4e90: 75 6e 63 74 69 6f 6e 20 2b 33 32 29 0a 23 65 6e unction +32).#en
4ea0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
4eb0: 5f 5f 73 70 61 72 63 5f 5f 29 20 26 26 20 21 64 __sparc__) && !d
4ec0: 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 63 36 34 efined(__sparc64
4ed0: 5f 5f 29 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f __). /* functio
4ee0: 6e 3a 0a 20 20 20 2a 20 20 20 20 73 65 74 68 69 n:. * sethi
4ef0: 20 25 68 69 28 3c 76 61 72 69 61 62 6c 65 3e 29 %hi(<variable>)
4f00: 2c 25 67 31 09 30 33 30 30 30 30 30 30 20 7c 20 ,%g1.03000000 |
4f10: 28 3c 76 61 72 69 61 62 6c 65 3e 20 3e 3e 20 31 (<variable> >> 1
4f20: 30 29 0a 20 20 20 2a 20 20 20 20 73 65 74 68 69 0). * sethi
4f30: 20 25 68 69 28 3c 64 61 74 61 3e 29 2c 25 67 32 %hi(<data>),%g2
4f40: 09 09 30 35 30 30 30 30 30 30 20 7c 20 28 3c 64 ..05000000 | (<d
4f50: 61 74 61 3e 20 3e 3e 20 31 30 29 0a 20 20 20 2a ata> >> 10). *
4f60: 20 20 20 20 6f 72 20 25 67 32 2c 25 6c 6f 28 3c or %g2,%lo(<
4f70: 64 61 74 61 3e 29 2c 25 67 32 09 09 38 34 31 30 data>),%g2..8410
4f80: 41 30 30 30 20 7c 20 28 3c 64 61 74 61 3e 20 26 A000 | (<data> &
4f90: 20 30 78 33 66 66 29 0a 20 20 20 2a 20 20 20 20 0x3ff). *
4fa0: 73 74 20 25 67 32 2c 5b 25 67 31 2b 25 6c 6f 28 st %g2,[%g1+%lo(
4fb0: 3c 76 61 72 69 61 62 6c 65 3e 29 5d 09 43 34 32 <variable>)].C42
4fc0: 30 36 30 30 30 20 7c 20 28 3c 76 61 72 69 61 62 06000 | (<variab
4fd0: 6c 65 3e 20 26 20 30 78 33 66 66 29 0a 20 20 20 le> & 0x3ff).
4fe0: 2a 20 20 20 20 73 65 74 68 69 20 25 68 69 28 3c * sethi %hi(<
4ff0: 61 64 64 72 65 73 73 3e 29 2c 25 67 31 09 30 33 address>),%g1.03
5000: 30 30 30 30 30 30 20 7c 20 28 3c 61 64 64 72 65 000000 | (<addre
5010: 73 73 3e 20 3e 3e 20 31 30 29 0a 20 20 20 2a 20 ss> >> 10). *
5020: 20 20 20 6a 6d 70 20 25 67 31 2b 25 6c 6f 28 3c jmp %g1+%lo(<
5030: 61 64 64 72 65 73 73 3e 29 09 09 38 31 43 30 36 address>)..81C06
5040: 30 30 30 20 7c 20 28 3c 61 64 64 72 65 73 73 3e 000 | (<address>
5050: 20 26 20 30 78 33 66 66 29 0a 20 20 20 2a 20 20 & 0x3ff). *
5060: 20 20 6e 6f 70 09 09 09 09 30 31 30 30 30 30 30 nop....0100000
5070: 30 0a 20 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 0. */.#define
5080: 68 69 28 77 6f 72 64 29 20 20 28 28 75 6e 73 69 hi(word) ((unsi
5090: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 gned long) (word
50a0: 29 20 3e 3e 20 31 30 29 0a 23 64 65 66 69 6e 65 ) >> 10).#define
50b0: 20 6c 6f 28 77 6f 72 64 29 20 20 28 28 75 6e 73 lo(word) ((uns
50c0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f 72 igned long) (wor
50d0: 64 29 20 26 20 30 78 33 66 66 29 0a 20 20 2a 28 d) & 0x3ff). *(
50e0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
50f0: 6e 20 2b 20 30 29 20 3d 20 30 78 30 33 30 30 30 n + 0) = 0x03000
5100: 30 30 30 20 7c 20 68 69 28 76 61 72 69 61 62 6c 000 | hi(variabl
5110: 65 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 e);. *(long *)
5120: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d (function + 4) =
5130: 20 30 78 30 35 30 30 30 30 30 30 20 7c 20 68 69 0x05000000 | hi
5140: 28 64 61 74 61 29 3b 0a 20 20 2a 28 6c 6f 6e 67 (data);. *(long
5150: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
5160: 38 29 20 3d 20 30 78 38 34 31 30 41 30 30 30 20 8) = 0x8410A000
5170: 7c 20 6c 6f 28 64 61 74 61 29 3b 0a 20 20 2a 28 | lo(data);. *(
5180: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
5190: 6e 20 2b 31 32 29 20 3d 20 30 78 43 34 32 30 36 n +12) = 0xC4206
51a0: 30 30 30 20 7c 20 6c 6f 28 76 61 72 69 61 62 6c 000 | lo(variabl
51b0: 65 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 e);. *(long *)
51c0: 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d (function +16) =
51d0: 20 30 78 30 33 30 30 30 30 30 30 20 7c 20 68 69 0x03000000 | hi
51e0: 28 61 64 64 72 65 73 73 29 3b 0a 20 20 2a 28 6c (address);. *(l
51f0: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
5200: 20 2b 32 30 29 20 3d 20 30 78 38 31 43 30 36 30 +20) = 0x81C060
5210: 30 30 20 7c 20 6c 6f 28 61 64 64 72 65 73 73 29 00 | lo(address)
5220: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
5230: 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 30 unction +24) = 0
5240: 78 30 31 30 30 30 30 30 30 3b 0a 23 64 65 66 69 x01000000;.#defi
5250: 6e 65 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 ne is_tramp(func
5260: 74 69 6f 6e 29 20 20 5c 0a 20 20 28 2a 28 6c 6f tion) \. (*(lo
5270: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
5280: 2b 20 30 29 20 26 20 30 78 66 66 63 30 30 30 30 + 0) & 0xffc0000
5290: 30 29 20 3d 3d 20 30 78 30 33 30 30 30 30 30 30 0) == 0x03000000
52a0: 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 && \. (*(long
52b0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 *) (function + 4
52c0: 29 20 26 20 30 78 66 66 63 30 30 30 30 30 29 20 ) & 0xffc00000)
52d0: 3d 3d 20 30 78 30 35 30 30 30 30 30 30 20 26 26 == 0x05000000 &&
52e0: 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 \. (*(long *)
52f0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 26 (function + 8) &
5300: 20 30 78 66 66 66 66 66 63 30 30 29 20 3d 3d 20 0xfffffc00) ==
5310: 30 78 38 34 31 30 41 30 30 30 20 26 26 20 5c 0a 0x8410A000 && \.
5320: 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 (*(long *) (fu
5330: 6e 63 74 69 6f 6e 20 2b 31 32 29 20 26 20 30 78 nction +12) & 0x
5340: 66 66 66 66 66 63 30 30 29 20 3d 3d 20 30 78 43 fffffc00) == 0xC
5350: 34 32 30 36 30 30 30 20 26 26 20 5c 0a 20 20 28 4206000 && \. (
5360: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
5370: 69 6f 6e 20 2b 31 36 29 20 26 20 30 78 66 66 63 ion +16) & 0xffc
5380: 30 30 30 30 30 29 20 3d 3d 20 30 78 30 33 30 30 00000) == 0x0300
5390: 30 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 0000 && \. (*(l
53a0: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
53b0: 20 2b 32 30 29 20 26 20 30 78 66 66 66 66 66 63 +20) & 0xfffffc
53c0: 30 30 29 20 3d 3d 20 30 78 38 31 43 30 36 30 30 00) == 0x81C0600
53d0: 30 20 26 26 20 5c 0a 20 20 20 2a 28 6c 6f 6e 67 0 && \. *(long
53e0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
53f0: 34 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4)
5400: 20 3d 3d 20 30 78 30 31 30 30 30 30 30 30 0a 23 == 0x01000000.#
5410: 64 65 66 69 6e 65 20 68 69 6c 6f 28 68 69 77 6f define hilo(hiwo
5420: 72 64 2c 6c 6f 77 6f 72 64 29 20 20 28 28 28 68 rd,loword) (((h
5430: 69 77 6f 72 64 29 20 3c 3c 20 31 30 29 20 7c 20 iword) << 10) |
5440: 28 28 6c 6f 77 6f 72 64 29 20 26 20 30 78 33 66 ((loword) & 0x3f
5450: 66 29 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d f)).#define tram
5460: 70 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 p_address(functi
5470: 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 on) \. hilo(*(
5480: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
5490: 6e 20 2b 31 36 29 2c 20 2a 28 6c 6f 6e 67 20 2a n +16), *(long *
54a0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 ) (function +20)
54b0: 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f ).#define tramp_
54c0: 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f variable(functio
54d0: 6e 29 20 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 6c n) \. hilo(*(l
54e0: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
54f0: 20 2b 20 30 29 2c 20 2a 28 6c 6f 6e 67 20 2a 29 + 0), *(long *)
5500: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 29 (function +12))
5510: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 .#define tramp_d
5520: 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ata(function) \
5530: 0a 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a . hilo(*(long *
5540: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 ) (function + 4)
5550: 2c 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e , *(long *) (fun
5560: 63 74 69 6f 6e 20 2b 20 38 29 29 0a 23 65 6e 64 ction + 8)).#end
5570: 69 66 0a 23 69 66 64 65 66 20 5f 5f 73 70 61 72 if.#ifdef __spar
5580: 63 36 34 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 c64__. /* funct
5590: 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 72 64 20 ion:. * rd
55a0: 25 70 63 2c 25 67 31 09 09 09 38 33 34 31 34 30 %pc,%g1...834140
55b0: 30 30 0a 20 20 20 2a 20 20 20 20 6c 64 78 20 5b 00. * ldx [
55c0: 25 67 31 2b 32 34 5d 2c 25 67 32 09 09 43 34 35 %g1+24],%g2..C45
55d0: 38 36 30 31 38 0a 20 20 20 2a 20 20 20 20 6c 64 86018. * ld
55e0: 78 20 5b 25 67 31 2b 33 32 5d 2c 25 67 33 09 09 x [%g1+32],%g3..
55f0: 43 36 35 38 36 30 32 30 0a 20 20 20 2a 20 20 20 C6586020. *
5600: 20 6c 64 78 20 5b 25 67 31 2b 34 30 5d 2c 25 67 ldx [%g1+40],%g
5610: 31 09 09 43 32 35 38 36 30 32 38 0a 20 20 20 2a 1..C2586028. *
5620: 20 20 20 20 6a 6d 70 20 25 67 31 09 09 09 09 38 jmp %g1....8
5630: 31 43 30 34 30 30 30 0a 20 20 20 2a 20 20 20 20 1C04000. *
5640: 73 74 78 20 25 67 33 2c 5b 25 67 32 5d 09 09 09 stx %g3,[%g2]...
5650: 43 36 37 30 38 30 30 30 0a 20 20 20 2a 20 20 20 C6708000. *
5660: 20 2e 6c 6f 6e 67 20 68 69 67 68 33 32 28 3c 76 .long high32(<v
5670: 61 72 69 61 62 6c 65 3e 29 09 3c 76 61 72 69 61 ariable>).<varia
5680: 62 6c 65 3e 20 3e 3e 20 33 32 0a 20 20 20 2a 20 ble> >> 32. *
5690: 20 20 20 2e 6c 6f 6e 67 20 6c 6f 77 33 32 28 3c .long low32(<
56a0: 76 61 72 69 61 62 6c 65 3e 29 09 09 3c 76 61 72 variable>)..<var
56b0: 69 61 62 6c 65 3e 20 26 20 30 78 66 66 66 66 66 iable> & 0xfffff
56c0: 66 66 66 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e fff. * .lon
56d0: 67 20 68 69 67 68 33 32 28 3c 64 61 74 61 3e 29 g high32(<data>)
56e0: 09 09 3c 64 61 74 61 3e 20 3e 3e 20 33 32 0a 20 ..<data> >> 32.
56f0: 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 6c 6f 77 * .long low
5700: 33 32 28 3c 64 61 74 61 3e 29 09 09 3c 64 61 74 32(<data>)..<dat
5710: 61 3e 20 26 20 30 78 66 66 66 66 66 66 66 66 0a a> & 0xffffffff.
5720: 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 68 69 * .long hi
5730: 67 68 33 32 28 3c 61 64 64 72 65 73 73 3e 29 09 gh32(<address>).
5740: 09 3c 61 64 64 72 65 73 73 3e 20 3e 3e 20 33 32 .<address> >> 32
5750: 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 6c . * .long l
5760: 6f 77 33 32 28 3c 61 64 64 72 65 73 73 3e 29 09 ow32(<address>).
5770: 09 3c 61 64 64 72 65 73 73 3e 20 26 20 30 78 66 .<address> & 0xf
5780: 66 66 66 66 66 66 66 0a 20 20 20 2a 2f 0a 20 20 fffffff. */.
5790: 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 *(int *) (funct
57a0: 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 38 33 34 ion + 0) = 0x834
57b0: 31 34 30 30 30 3b 0a 20 20 2a 28 69 6e 74 20 2a 14000;. *(int *
57c0: 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 ) (function + 4
57d0: 29 20 3d 20 30 78 43 34 35 38 36 30 31 38 3b 0a ) = 0xC4586018;.
57e0: 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e *(int *) (fun
57f0: 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 78 43 ction + 8) = 0xC
5800: 36 35 38 36 30 32 30 3b 0a 20 20 2a 28 69 6e 74 6586020;. *(int
5810: 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b *) (function +
5820: 31 32 29 20 3d 20 30 78 43 32 35 38 36 30 32 38 12) = 0xC2586028
5830: 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 ;. *(int *) (f
5840: 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 unction +16) = 0
5850: 78 38 31 43 30 34 30 30 30 3b 0a 20 20 2a 28 69 x81C04000;. *(i
5860: 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e nt *) (function
5870: 20 2b 32 30 29 20 3d 20 30 78 43 36 37 30 38 30 +20) = 0xC67080
5880: 30 30 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 00;. *(long *)
5890: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d (function +24) =
58a0: 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 (long) variable
58b0: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
58c0: 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d 20 28 unction +32) = (
58d0: 6c 6f 6e 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 long) data;. *(
58e0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
58f0: 6e 20 2b 34 30 29 20 3d 20 28 6c 6f 6e 67 29 20 n +40) = (long)
5900: 61 64 64 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 address;.#define
5910: 20 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 is_tramp(functi
5920: 6f 6e 29 20 20 5c 0a 20 20 2a 28 69 6e 74 20 2a on) \. *(int *
5930: 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 ) (function + 0
5940: 29 20 3d 3d 20 30 78 38 33 34 31 34 30 30 30 20 ) == 0x83414000
5950: 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 && \. *(int *)
5960: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 (function + 4)
5970: 3d 3d 20 30 78 43 34 35 38 36 30 31 38 20 26 26 == 0xC4586018 &&
5980: 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 \. *(int *) (
5990: 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 3d function + 8) ==
59a0: 20 30 78 43 36 35 38 36 30 32 30 20 26 26 20 5c 0xC6586020 && \
59b0: 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 . *(int *) (fu
59c0: 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 3d 20 30 nction +12) == 0
59d0: 78 43 32 35 38 36 30 32 38 20 26 26 20 5c 0a 20 xC2586028 && \.
59e0: 20 2a 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 *(int *) (func
59f0: 74 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 38 tion +16) == 0x8
5a00: 31 43 30 34 30 30 30 20 26 26 20 5c 0a 20 20 2a 1C04000 && \. *
5a10: 28 69 6e 74 20 2a 29 20 20 28 66 75 6e 63 74 69 (int *) (functi
5a20: 6f 6e 20 2b 32 30 29 20 3d 3d 20 30 78 43 36 37 on +20) == 0xC67
5a30: 30 38 30 30 30 0a 23 64 65 66 69 6e 65 20 74 72 08000.#define tr
5a40: 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e 63 amp_address(func
5a50: 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e tion) \. *(lon
5a60: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
5a70: 34 30 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 40).#define tram
5a80: 70 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 p_variable(funct
5a90: 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 ion) \. *(long
5aa0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
5ab0: 34 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 4).#define tramp
5ac0: 5f 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 _data(function)
5ad0: 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 \. *(long *) (
5ae0: 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 0a 23 65 function +32).#e
5af0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 61 6c ndif.#ifdef __al
5b00: 70 68 61 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 pha__. /* funct
5b10: 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 62 72 20 ion:. * br
5b20: 24 31 2c 66 75 6e 63 74 69 6f 6e 2e 2e 6e 67 09 $1,function..ng.
5b30: 30 30 20 30 30 20 32 30 20 43 30 0a 20 20 20 2a 00 00 20 C0. *
5b40: 20 66 75 6e 63 74 69 6f 6e 2e 2e 6e 67 3a 0a 20 function..ng:.
5b50: 20 20 2a 20 20 20 20 6c 64 71 20 24 32 2c 32 30 * ldq $2,20
5b60: 28 24 31 29 09 09 31 34 20 30 30 20 34 31 20 41 ($1)..14 00 41 A
5b70: 34 0a 20 20 20 2a 20 20 20 20 6c 64 71 20 24 33 4. * ldq $3
5b80: 2c 32 38 28 24 31 29 09 09 31 43 20 30 30 20 36 ,28($1)..1C 00 6
5b90: 31 20 41 34 0a 20 20 20 2a 20 20 20 20 6c 64 71 1 A4. * ldq
5ba0: 20 24 32 37 2c 33 36 28 24 31 29 09 09 32 34 20 $27,36($1)..24
5bb0: 30 30 20 36 31 20 41 37 0a 20 20 20 2a 20 20 20 00 61 A7. *
5bc0: 20 73 74 71 20 24 32 2c 30 28 24 33 29 09 09 30 stq $2,0($3)..0
5bd0: 30 20 30 30 20 34 33 20 42 34 0a 20 20 20 2a 20 0 00 43 B4. *
5be0: 20 20 20 6a 6d 70 20 24 33 31 2c 28 24 32 37 29 jmp $31,($27)
5bf0: 2c 30 09 09 30 30 20 30 30 20 46 42 20 36 42 0a ,0..00 00 FB 6B.
5c00: 20 20 20 2a 20 20 20 20 2e 71 75 61 64 20 3c 64 * .quad <d
5c10: 61 74 61 3e 09 09 3c 64 61 74 61 3e 0a 20 20 20 ata>..<data>.
5c20: 2a 20 20 20 20 2e 71 75 61 64 20 3c 76 61 72 69 * .quad <vari
5c30: 61 62 6c 65 3e 09 3c 76 61 72 69 61 62 6c 65 3e able>.<variable>
5c40: 0a 20 20 20 2a 20 20 20 20 2e 71 75 61 64 20 3c . * .quad <
5c50: 61 64 64 72 65 73 73 3e 09 09 3c 61 64 64 72 65 address>..<addre
5c60: 73 73 3e 0a 20 20 20 2a 2f 0a 20 20 7b 20 73 74 ss>. */. { st
5c70: 61 74 69 63 20 69 6e 74 20 63 6f 64 65 20 5b 36 atic int code [6
5c80: 5d 20 3d 0a 20 20 20 20 20 20 7b 20 30 78 43 30 ] =. { 0xC0
5c90: 32 30 30 30 30 30 2c 20 30 78 41 34 34 31 30 30 200000, 0xA44100
5ca0: 31 34 2c 20 30 78 41 34 36 31 30 30 31 43 2c 20 14, 0xA461001C,
5cb0: 30 78 41 37 36 31 30 30 32 34 2c 20 30 78 42 34 0xA7610024, 0xB4
5cc0: 34 33 30 30 30 30 2c 20 30 78 36 42 46 42 30 30 430000, 0x6BFB00
5cd0: 30 30 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 00 };. int i;
5ce0: 0a 20 20 20 20 66 6f 72 20 28 69 3d 30 3b 20 69 . for (i=0; i
5cf0: 3c 36 3b 20 69 2b 2b 29 20 7b 20 28 28 69 6e 74 <6; i++) { ((int
5d00: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 69 5d *) function)[i]
5d10: 20 3d 20 63 6f 64 65 5b 69 5d 3b 20 7d 0a 20 20 = code[i]; }.
5d20: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
5d30: 74 69 6f 6e 29 5b 33 5d 20 3d 20 28 6c 6f 6e 67 tion)[3] = (long
5d40: 29 20 64 61 74 61 3b 0a 20 20 20 20 28 28 6c 6f ) data;. ((lo
5d50: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
5d60: 34 5d 20 3d 20 28 6c 6f 6e 67 29 20 76 61 72 69 4] = (long) vari
5d70: 61 62 6c 65 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 able;. ((long
5d80: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 35 5d *) function)[5]
5d90: 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 = (long) addres
5da0: 73 3b 0a 20 20 7d 0a 23 64 65 66 69 6e 65 20 69 s;. }.#define i
5db0: 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e s_tramp(function
5dc0: 29 20 20 5c 0a 20 20 28 28 69 6e 74 20 2a 29 20 ) \. ((int *)
5dd0: 66 75 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 function)[0] ==
5de0: 30 78 43 30 32 30 30 30 30 30 20 26 26 20 5c 0a 0xC0200000 && \.
5df0: 20 20 28 28 69 6e 74 20 2a 29 20 66 75 6e 63 74 ((int *) funct
5e00: 69 6f 6e 29 5b 31 5d 20 3d 3d 20 30 78 41 34 34 ion)[1] == 0xA44
5e10: 31 30 30 31 34 20 26 26 20 5c 0a 20 20 28 28 69 10014 && \. ((i
5e20: 6e 74 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b nt *) function)[
5e30: 32 5d 20 3d 3d 20 30 78 41 34 36 31 30 30 31 43 2] == 0xA461001C
5e40: 20 26 26 20 5c 0a 20 20 28 28 69 6e 74 20 2a 29 && \. ((int *)
5e50: 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d 20 3d 3d function)[3] ==
5e60: 20 30 78 41 37 36 31 30 30 32 34 20 26 26 20 5c 0xA7610024 && \
5e70: 0a 20 20 28 28 69 6e 74 20 2a 29 20 66 75 6e 63 . ((int *) func
5e80: 74 69 6f 6e 29 5b 34 5d 20 3d 3d 20 30 78 42 34 tion)[4] == 0xB4
5e90: 34 33 30 30 30 30 20 26 26 20 5c 0a 20 20 28 28 430000 && \. ((
5ea0: 69 6e 74 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 int *) function)
5eb0: 5b 35 5d 20 3d 3d 20 30 78 36 42 46 42 30 30 30 [5] == 0x6BFB000
5ec0: 30 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 0.#define tramp_
5ed0: 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e address(function
5ee0: 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 ) \. ((long *)
5ef0: 20 66 75 6e 63 74 69 6f 6e 29 5b 35 5d 0a 23 64 function)[5].#d
5f00: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
5f10: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
5f20: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
5f30: 6e 63 74 69 6f 6e 29 5b 34 5d 0a 23 64 65 66 69 nction)[4].#defi
5f40: 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 ne tramp_data(fu
5f50: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c nction) \. ((l
5f60: 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 ong *) function)
5f70: 5b 33 5d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 [3].#endif.#ifde
5f80: 66 20 5f 5f 68 70 70 61 6f 6c 64 5f 5f 0a 20 20 f __hppaold__.
5f90: 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 /* function:.
5fa0: 2a 20 20 20 20 6c 64 69 6c 20 4c 27 3c 64 61 74 * ldil L'<dat
5fb0: 61 3e 2c 25 72 32 30 09 09 32 32 38 30 30 30 30 a>,%r20..2280000
5fc0: 30 20 7c 20 68 69 28 3c 64 61 74 61 3e 29 0a 20 0 | hi(<data>).
5fd0: 20 20 2a 20 20 20 20 6c 64 69 6c 20 4c 27 3c 76 * ldil L'<v
5fe0: 61 72 69 61 62 6c 65 3e 2c 25 72 31 39 09 09 32 ariable>,%r19..2
5ff0: 32 36 30 30 30 30 30 20 7c 20 68 69 28 3c 76 61 2600000 | hi(<va
6000: 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 20 20 riable>). *
6010: 20 6c 64 6f 20 52 27 3c 64 61 74 61 3e 28 25 72 ldo R'<data>(%r
6020: 32 30 29 2c 25 72 32 30 09 09 33 36 39 34 30 30 20),%r20..369400
6030: 30 30 20 7c 20 6c 6f 28 3c 64 61 74 61 3e 29 0a 00 | lo(<data>).
6040: 20 20 20 2a 20 20 20 20 73 74 77 20 25 72 32 30 * stw %r20
6050: 2c 52 27 3c 76 61 72 69 61 62 6c 65 3e 28 25 72 ,R'<variable>(%r
6060: 31 39 29 09 36 41 37 34 30 30 30 30 20 7c 20 6c 19).6A740000 | l
6070: 6f 28 3c 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 o(<variable>).
6080: 20 2a 20 20 20 20 6c 64 69 6c 20 4c 27 3c 61 64 * ldil L'<ad
6090: 64 72 65 73 73 3e 2c 25 72 32 31 09 09 32 32 41 dress>,%r21..22A
60a0: 30 30 30 30 30 20 7c 20 68 69 28 3c 61 64 64 72 00000 | hi(<addr
60b0: 65 73 73 3e 29 0a 20 20 20 2a 20 20 20 20 6c 64 ess>). * ld
60c0: 6f 20 52 27 3c 61 64 64 72 65 73 73 3e 28 25 72 o R'<address>(%r
60d0: 32 31 29 2c 25 72 32 31 09 33 36 42 35 30 30 30 21),%r21.36B5000
60e0: 30 20 7c 20 6c 6f 28 3c 61 64 64 72 65 73 73 3e 0 | lo(<address>
60f0: 29 0a 20 20 20 2a 20 20 20 20 62 62 2c 3e 3d 2c ). * bb,>=,
6100: 6e 20 25 72 32 31 2c 33 30 2c 66 75 6e 63 74 69 n %r21,30,functi
6110: 6f 6e 32 09 43 37 44 35 43 30 31 32 0a 20 20 20 on2.C7D5C012.
6120: 2a 20 20 20 20 64 65 70 69 20 30 2c 33 31 2c 32 * depi 0,31,2
6130: 2c 25 72 32 31 09 09 44 36 41 30 31 43 31 45 0a ,%r21..D6A01C1E.
6140: 20 20 20 2a 20 20 20 20 6c 64 77 20 34 28 30 2c * ldw 4(0,
6150: 25 72 32 31 29 2c 25 72 31 39 09 09 34 41 42 33 %r21),%r19..4AB3
6160: 30 30 30 38 0a 20 20 20 2a 20 20 20 20 6c 64 77 0008. * ldw
6170: 20 30 28 30 2c 25 72 32 31 29 2c 25 72 32 31 09 0(0,%r21),%r21.
6180: 09 34 41 42 35 30 30 30 30 0a 20 20 20 2a 20 66 .4AB50000. * f
6190: 75 6e 63 74 69 6f 6e 32 3a 0a 20 20 20 2a 20 20 unction2:. *
61a0: 20 20 6c 64 73 69 64 20 28 30 2c 25 72 32 31 29 ldsid (0,%r21)
61b0: 2c 25 72 31 09 09 30 32 41 30 31 30 41 31 0a 20 ,%r1..02A010A1.
61c0: 20 20 2a 20 20 20 20 6d 74 73 70 20 25 72 31 2c * mtsp %r1,
61d0: 25 73 72 30 09 09 09 30 30 30 31 31 38 32 30 0a %sr0...00011820.
61e0: 20 20 20 2a 20 20 20 20 62 65 2c 6e 20 30 28 25 * be,n 0(%
61f0: 73 72 30 2c 25 72 32 31 29 09 09 45 32 41 30 30 sr0,%r21)..E2A00
6200: 30 30 32 0a 20 20 20 2a 20 20 20 20 6e 6f 70 09 002. * nop.
6210: 09 09 09 30 38 30 30 30 32 34 30 0a 20 20 20 2a ...08000240. *
6220: 2f 0a 20 20 2f 2a 20 57 68 65 6e 20 64 65 63 6f /. /* When deco
6230: 64 69 6e 67 20 61 20 32 31 2d 62 69 74 20 61 72 ding a 21-bit ar
6240: 67 75 6d 65 6e 74 20 69 6e 20 61 6e 20 69 6e 73 gument in an ins
6250: 74 72 75 63 74 69 6f 6e 2c 20 74 68 65 20 68 70 truction, the hp
6260: 70 61 20 70 65 72 66 6f 72 6d 73 0a 20 20 20 2a pa performs. *
6270: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 the following b
6280: 69 74 20 6d 61 6e 69 70 75 6c 61 74 69 6f 6e 3a it manipulation:
6290: 0a 20 20 20 2a 20 61 73 73 65 6d 62 6c 65 32 31 . * assemble21
62a0: 3a 20 78 5b 32 30 5d 2e 2e 2e 78 5b 30 5d 0a 20 : x[20]...x[0].
62b0: 20 20 2a 20 20 20 20 20 20 20 2d 2d 3e 20 78 5b * --> x[
62c0: 30 5d 20 78 5b 31 31 5d 2e 2e 2e 78 5b 31 5d 20 0] x[11]...x[1]
62d0: 78 5b 31 35 5d 2e 2e 78 5b 31 34 5d 20 78 5b 32 x[15]..x[14] x[2
62e0: 30 5d 2e 2e 2e 78 5b 31 36 5d 20 78 5b 31 33 5d 0]...x[16] x[13]
62f0: 2e 2e 78 5b 31 32 5d 0a 20 20 20 2a 20 57 68 65 ..x[12]. * Whe
6300: 6e 20 65 6e 63 6f 64 69 6e 67 20 61 20 32 31 2d n encoding a 21-
6310: 62 69 74 20 61 72 67 75 6d 65 6e 74 20 69 6e 74 bit argument int
6320: 6f 20 61 6e 20 69 6e 73 74 72 75 63 74 69 6f 6e o an instruction
6330: 2c 20 77 65 20 6e 65 65 64 20 74 68 65 0a 20 20 , we need the.
6340: 20 2a 20 74 6f 20 70 65 72 66 6f 72 6d 20 74 68 * to perform th
6350: 65 20 72 65 76 65 72 73 65 20 70 65 72 6d 75 74 e reverse permut
6360: 61 74 69 6f 6e 3a 0a 20 20 20 2a 20 70 65 72 6d ation:. * perm
6370: 75 74 65 32 31 3a 20 20 79 5b 32 30 5d 2e 2e 2e ute21: y[20]...
6380: 79 5b 30 5d 0a 20 20 20 2a 20 20 20 20 20 20 20 y[0]. *
6390: 2d 2d 3e 20 79 5b 36 5d 2e 2e 2e 79 5b 32 5d 20 --> y[6]...y[2]
63a0: 79 5b 38 5d 2e 2e 79 5b 37 5d 20 79 5b 31 5d 2e y[8]..y[7] y[1].
63b0: 2e 79 5b 30 5d 20 79 5b 31 39 5d 2e 2e 2e 79 5b .y[0] y[19]...y[
63c0: 39 5d 20 79 5b 32 30 5d 0a 20 20 20 2a 2f 0a 23 9] y[20]. */.#
63d0: 64 65 66 69 6e 65 20 61 73 73 65 6d 62 6c 65 32 define assemble2
63e0: 31 28 78 29 20 20 5c 0a 20 20 28 28 28 28 78 29 1(x) \. ((((x)
63f0: 20 26 20 30 78 31 29 20 3c 3c 20 32 30 29 20 7c & 0x1) << 20) |
6400: 20 28 28 28 78 29 20 26 20 30 78 46 46 45 29 20 (((x) & 0xFFE)
6410: 3c 3c 20 38 29 20 7c 20 5c 0a 20 20 20 28 28 28 << 8) | \. (((
6420: 78 29 20 26 20 30 78 43 30 30 30 29 20 3e 3e 20 x) & 0xC000) >>
6430: 37 29 20 7c 20 28 28 28 78 29 20 26 20 30 78 31 7) | (((x) & 0x1
6440: 46 30 30 30 30 29 20 3e 3e 20 31 34 29 20 7c 20 F0000) >> 14) |
6450: 28 28 28 78 29 20 26 20 30 78 33 30 30 30 29 20 (((x) & 0x3000)
6460: 3e 3e 20 31 32 29 29 0a 23 64 65 66 69 6e 65 20 >> 12)).#define
6470: 70 65 72 6d 75 74 65 32 31 28 79 29 20 20 5c 0a permute21(y) \.
6480: 20 20 28 28 28 28 79 29 20 26 20 30 78 37 43 29 ((((y) & 0x7C)
6490: 20 3c 3c 20 31 34 29 20 7c 20 28 28 28 79 29 20 << 14) | (((y)
64a0: 26 20 30 78 31 38 30 29 20 3c 3c 20 37 29 20 7c & 0x180) << 7) |
64b0: 20 28 28 28 79 29 20 26 20 30 78 33 29 20 3c 3c (((y) & 0x3) <<
64c0: 20 31 32 29 20 7c 20 5c 0a 20 20 20 28 28 28 79 12) | \. (((y
64d0: 29 20 26 20 30 78 46 46 45 30 30 29 20 3e 3e 20 ) & 0xFFE00) >>
64e0: 38 29 20 7c 20 28 28 28 79 29 20 26 20 30 78 31 8) | (((y) & 0x1
64f0: 30 30 30 30 30 29 20 3e 3e 20 32 30 29 29 0a 23 00000) >> 20)).#
6500: 64 65 66 69 6e 65 20 68 69 28 77 6f 72 64 29 20 define hi(word)
6510: 20 70 65 72 6d 75 74 65 32 31 28 28 75 6e 73 69 permute21((unsi
6520: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f 72 64 gned long) (word
6530: 29 20 3e 3e 20 31 31 29 0a 23 64 65 66 69 6e 65 ) >> 11).#define
6540: 20 6c 6f 28 77 6f 72 64 29 20 20 28 28 28 75 6e lo(word) (((un
6550: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 77 6f signed long) (wo
6560: 72 64 29 20 26 20 30 78 37 46 46 29 20 3c 3c 20 rd) & 0x7FF) <<
6570: 31 29 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 1). *(long *) (
6580: 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 function + 0) =
6590: 30 78 32 32 38 30 30 30 30 30 20 7c 20 68 69 28 0x22800000 | hi(
65a0: 64 61 74 61 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 data);. *(long
65b0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 *) (function + 4
65c0: 29 20 3d 20 30 78 32 32 36 30 30 30 30 30 20 7c ) = 0x22600000 |
65d0: 20 68 69 28 76 61 72 69 61 62 6c 65 29 3b 0a 20 hi(variable);.
65e0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
65f0: 74 69 6f 6e 20 2b 20 38 29 20 3d 20 30 78 33 36 tion + 8) = 0x36
6600: 39 34 30 30 30 30 20 7c 20 6c 6f 28 64 61 74 61 940000 | lo(data
6610: 29 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 );. *(long *) (
6620: 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 20 3d 20 function +12) =
6630: 30 78 36 41 37 34 30 30 30 30 20 7c 20 6c 6f 28 0x6A740000 | lo(
6640: 76 61 72 69 61 62 6c 65 29 3b 0a 20 20 2a 28 6c variable);. *(l
6650: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
6660: 20 2b 31 36 29 20 3d 20 30 78 32 32 41 30 30 30 +16) = 0x22A000
6670: 30 30 20 7c 20 68 69 28 61 64 64 72 65 73 73 29 00 | hi(address)
6680: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
6690: 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 unction +20) = 0
66a0: 78 33 36 42 35 30 30 30 30 20 7c 20 6c 6f 28 61 x36B50000 | lo(a
66b0: 64 64 72 65 73 73 29 3b 0a 20 20 2a 28 6c 6f 6e ddress);. *(lon
66c0: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
66d0: 32 34 29 20 3d 20 30 78 43 37 44 35 43 30 31 32 24) = 0xC7D5C012
66e0: 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ;. *(long *) (f
66f0: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 unction +28) = 0
6700: 78 44 36 41 30 31 43 31 45 3b 0a 20 20 2a 28 6c xD6A01C1E;. *(l
6710: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
6720: 20 2b 33 32 29 20 3d 20 30 78 34 41 42 33 30 30 +32) = 0x4AB300
6730: 30 38 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 08;. *(long *)
6740: 28 66 75 6e 63 74 69 6f 6e 20 2b 33 36 29 20 3d (function +36) =
6750: 20 30 78 34 41 42 35 30 30 30 30 3b 0a 20 20 2a 0x4AB50000;. *
6760: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
6770: 6f 6e 20 2b 34 30 29 20 3d 20 30 78 30 32 41 30 on +40) = 0x02A0
6780: 31 30 41 31 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 10A1;. *(long *
6790: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 34 29 ) (function +44)
67a0: 20 3d 20 30 78 30 30 30 31 31 38 32 30 3b 0a 20 = 0x00011820;.
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 34 38 29 20 3d 20 30 78 45 32 tion +48) = 0xE2
67d0: 41 30 30 30 30 32 3b 0a 20 20 2a 28 6c 6f 6e 67 A00002;. *(long
67e0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 35 *) (function +5
67f0: 32 29 20 3d 20 30 78 30 38 30 30 30 32 34 30 3b 2) = 0x08000240;
6800: 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d .#define is_tram
6810: 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 p(function) \.
6820: 20 28 28 6c 6f 6e 67 29 20 66 75 6e 63 74 69 6f ((long) functio
6830: 6e 20 26 20 33 29 20 3d 3d 20 30 20 26 26 20 5c n & 3) == 0 && \
6840: 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 . (*(long *) (f
6850: 75 6e 63 74 69 6f 6e 20 2b 20 30 29 20 26 20 30 unction + 0) & 0
6860: 78 66 66 65 30 30 30 30 30 29 20 3d 3d 20 30 78 xffe00000) == 0x
6870: 32 32 38 30 30 30 30 30 20 26 26 20 5c 0a 20 20 22800000 && \.
6880: 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 (*(long *) (func
6890: 74 69 6f 6e 20 2b 20 34 29 20 26 20 30 78 66 66 tion + 4) & 0xff
68a0: 65 30 30 30 30 30 29 20 3d 3d 20 30 78 32 32 36 e00000) == 0x226
68b0: 30 30 30 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 00000 && \. (*(
68c0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
68d0: 6e 20 2b 20 38 29 20 26 20 30 78 66 66 66 66 66 n + 8) & 0xfffff
68e0: 30 30 30 29 20 3d 3d 20 30 78 33 36 39 34 30 30 000) == 0x369400
68f0: 30 30 20 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 00 && \. (*(lon
6900: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6910: 31 32 29 20 26 20 30 78 66 66 66 66 66 30 30 30 12) & 0xfffff000
6920: 29 20 3d 3d 20 30 78 36 41 37 34 30 30 30 30 20 ) == 0x6A740000
6930: 26 26 20 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a && \. (*(long *
6940: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 ) (function +16)
6950: 20 26 20 30 78 66 66 65 30 30 30 30 30 29 20 3d & 0xffe00000) =
6960: 3d 20 30 78 32 32 41 30 30 30 30 30 20 26 26 20 = 0x22A00000 &&
6970: 5c 0a 20 20 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 \. (*(long *) (
6980: 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 26 20 function +20) &
6990: 30 78 66 66 66 66 66 30 30 30 29 20 3d 3d 20 30 0xfffff000) == 0
69a0: 78 33 36 42 35 30 30 30 30 20 26 26 20 5c 0a 20 x36B50000 && \.
69b0: 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 *(long *) (func
69c0: 74 69 6f 6e 20 2b 32 34 29 20 3d 3d 20 30 78 43 tion +24) == 0xC
69d0: 37 44 35 43 30 31 32 20 26 26 20 5c 0a 20 20 2a 7D5C012 && \. *
69e0: 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 (long *) (functi
69f0: 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 44 36 41 on +28) == 0xD6A
6a00: 30 31 43 31 45 20 26 26 20 5c 0a 20 20 2a 28 6c 01C1E && \. *(l
6a10: 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ong *) (function
6a20: 20 2b 33 32 29 20 3d 3d 20 30 78 34 41 42 33 30 +32) == 0x4AB30
6a30: 30 30 38 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 008 && \. *(lon
6a40: 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b g *) (function +
6a50: 33 36 29 20 3d 3d 20 30 78 34 41 42 35 30 30 30 36) == 0x4AB5000
6a60: 30 20 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 0 && \. *(long
6a70: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 30 *) (function +40
6a80: 29 20 3d 3d 20 30 78 30 32 41 30 31 30 41 31 20 ) == 0x02A010A1
6a90: 26 26 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 && \. *(long *)
6aa0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 34 34 29 20 (function +44)
6ab0: 3d 3d 20 30 78 30 30 30 31 31 38 32 30 20 26 26 == 0x00011820 &&
6ac0: 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 \. *(long *) (
6ad0: 66 75 6e 63 74 69 6f 6e 20 2b 34 38 29 20 3d 3d function +48) ==
6ae0: 20 30 78 45 32 41 30 30 30 30 32 20 26 26 20 5c 0xE2A00002 && \
6af0: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
6b00: 6e 63 74 69 6f 6e 20 2b 35 32 29 20 3d 3d 20 30 nction +52) == 0
6b10: 78 30 38 30 30 30 32 34 30 0a 23 64 65 66 69 6e x08000240.#defin
6b20: 65 20 68 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f e hilo(hiword,lo
6b30: 77 6f 72 64 29 20 20 5c 0a 20 20 28 28 61 73 73 word) \. ((ass
6b40: 65 6d 62 6c 65 32 31 28 28 75 6e 73 69 67 6e 65 emble21((unsigne
6b50: 64 20 6c 6f 6e 67 29 20 28 68 69 77 6f 72 64 29 d long) (hiword)
6b60: 29 20 3c 3c 20 31 31 29 20 7c 20 5c 0a 20 20 20 ) << 11) | \.
6b70: 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 (((unsigned long
6b80: 29 20 28 6c 6f 77 6f 72 64 29 20 26 20 30 78 46 ) (loword) & 0xF
6b90: 46 45 29 20 3e 3e 20 31 29 20 5c 0a 20 20 29 0a FE) >> 1) \. ).
6ba0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 #define tramp_ad
6bb0: 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 dress(function)
6bc0: 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e 67 \. hilo(*(long
6bd0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
6be0: 36 29 2c 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 6), *(long *) (f
6bf0: 75 6e 63 74 69 6f 6e 20 2b 32 30 29 29 0a 23 64 unction +20)).#d
6c00: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
6c10: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
6c20: 5c 0a 20 20 68 69 6c 6f 28 2a 28 6c 6f 6e 67 20 \. hilo(*(long
6c30: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 *) (function + 4
6c40: 29 2c 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 ), *(long *) (fu
6c50: 6e 63 74 69 6f 6e 20 2b 31 32 29 29 0a 23 64 65 nction +12)).#de
6c60: 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 fine tramp_data(
6c70: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 function) \. h
6c80: 69 6c 6f 28 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 ilo(*(long *) (f
6c90: 75 6e 63 74 69 6f 6e 20 2b 20 30 29 2c 20 2a 28 unction + 0), *(
6ca0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
6cb0: 6e 20 2b 20 38 29 29 0a 23 65 6e 64 69 66 0a 23 n + 8)).#endif.#
6cc0: 69 66 64 65 66 20 5f 5f 68 70 70 61 6e 65 77 5f ifdef __hppanew_
6cd0: 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a _. /* function:
6ce0: 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 20 . * .long
6cf0: 20 74 72 61 6d 70 0a 20 20 20 2a 20 20 20 20 2e tramp. * .
6d00: 6c 6f 6e 67 20 20 20 63 6c 6f 73 75 72 65 0a 20 long closure.
6d10: 20 20 2a 20 63 6c 6f 73 75 72 65 3a 0a 20 20 20 * closure:.
6d20: 2a 20 20 20 20 2e 6c 6f 6e 67 20 20 20 3c 76 61 * .long <va
6d30: 72 69 61 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 riable>. *
6d40: 2e 6c 6f 6e 67 20 20 20 3c 64 61 74 61 3e 0a 20 .long <data>.
6d50: 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 20 20 3c * .long <
6d60: 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f 0a 20 address>. */.
6d70: 20 7b 20 2f 2a 20 77 6f 72 6b 20 61 72 6f 75 6e { /* work aroun
6d80: 64 20 61 20 62 75 67 20 69 6e 20 67 63 63 20 33 d a bug in gcc 3
6d90: 2e 2a 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 20 .* */. void*
6da0: 74 72 61 6d 70 5f 61 64 64 72 65 73 73 20 3d 20 tramp_address =
6db0: 26 74 72 61 6d 70 3b 0a 20 20 20 20 2a 28 6c 6f &tramp;. *(lo
6dc0: 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 ng *) (function
6dd0: 2b 20 30 29 20 3d 20 28 28 6c 6f 6e 67 20 2a 29 + 0) = ((long *)
6de0: 20 28 28 63 68 61 72 2a 29 74 72 61 6d 70 5f 61 ((char*)tramp_a
6df0: 64 64 72 65 73 73 2d 32 29 29 5b 30 5d 3b 0a 20 ddress-2))[0];.
6e00: 20 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 *(long *) (fu
6e10: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 20 28 6c nction + 4) = (l
6e20: 6f 6e 67 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b ong) (function +
6e30: 20 38 29 3b 0a 20 20 20 20 2a 28 6c 6f 6e 67 20 8);. *(long
6e40: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 *) (function + 8
6e50: 29 20 3d 20 28 6c 6f 6e 67 29 20 76 61 72 69 61 ) = (long) varia
6e60: 62 6c 65 3b 0a 20 20 20 20 2a 28 6c 6f 6e 67 20 ble;. *(long
6e70: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 *) (function +12
6e80: 29 20 3d 20 28 6c 6f 6e 67 29 20 64 61 74 61 3b ) = (long) data;
6e90: 0a 20 20 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 . *(long *) (
6ea0: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 function +16) =
6eb0: 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a (long) address;.
6ec0: 20 20 7d 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 }.#define is_t
6ed0: 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 ramp(function)
6ee0: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
6ef0: 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 28 28 nction)[0] == ((
6f00: 6c 6f 6e 67 20 2a 29 20 28 28 63 68 61 72 2a 29 long *) ((char*)
6f10: 74 72 61 6d 70 5f 61 64 64 72 65 73 73 2d 32 29 tramp_address-2)
6f20: 29 5b 30 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 )[0].#define tra
6f30: 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e 63 74 mp_address(funct
6f40: 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 ion) \. ((long
6f50: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d *) function)[4]
6f60: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 .#define tramp_v
6f70: 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e ariable(function
6f80: 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 ) \. ((long *)
6f90: 20 66 75 6e 63 74 69 6f 6e 29 5b 32 5d 0a 23 64 function)[2].#d
6fa0: 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 efine tramp_data
6fb0: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
6fc0: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
6fd0: 6f 6e 29 5b 33 5d 0a 23 65 6e 64 69 66 0a 23 69 on)[3].#endif.#i
6fe0: 66 64 65 66 20 5f 5f 61 72 6d 5f 5f 0a 20 20 2f fdef __arm__. /
6ff0: 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a * function:. *
7000: 09 73 74 6d 66 64 09 73 70 21 2c 7b 72 30 7d 09 .stmfd.sp!,{r0}.
7010: 09 45 39 32 44 30 30 30 31 0a 20 20 20 2a 20 09 .E92D0001. * .
7020: 6c 64 72 09 72 30 2c 5b 70 63 2c 23 31 36 5d 09 ldr.r0,[pc,#16].
7030: 09 45 35 39 46 30 30 30 43 0a 20 20 20 2a 09 6c .E59F000C. *.l
7040: 64 72 09 69 70 2c 5b 70 63 2c 23 31 36 5d 09 09 dr.ip,[pc,#16]..
7050: 45 35 39 46 43 30 30 43 0a 20 20 20 2a 09 73 74 E59FC00C. *.st
7060: 72 09 72 30 2c 5b 69 70 5d 09 09 09 45 35 38 43 r.r0,[ip]...E58C
7070: 30 30 30 30 0a 20 20 20 2a 09 6c 64 6d 66 64 09 0000. *.ldmfd.
7080: 73 70 21 2c 7b 72 30 7d 09 09 45 38 42 44 30 30 sp!,{r0}..E8BD00
7090: 30 31 0a 20 20 20 2a 09 6c 64 72 09 70 63 2c 5b 01. *.ldr.pc,[
70a0: 70 63 2c 23 34 5d 09 09 45 35 39 46 46 30 30 34 pc,#4]..E59FF004
70b0: 0a 20 20 20 2a 20 5f 64 61 74 61 3a 0a 20 20 20 . * _data:.
70c0: 2a 09 2e 77 6f 72 64 09 3c 64 61 74 61 3e 0a 20 *..word.<data>.
70d0: 20 20 2a 20 5f 76 61 72 69 61 62 6c 65 3a 0a 20 * _variable:.
70e0: 20 20 2a 09 2e 77 6f 72 64 09 3c 76 61 72 69 61 *..word.<varia
70f0: 62 6c 65 3e 0a 20 20 20 2a 20 5f 66 75 6e 63 74 ble>. * _funct
7100: 69 6f 6e 3a 0a 20 20 20 2a 09 2e 77 6f 72 64 09 ion:. *..word.
7110: 3c 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f 0a <address>. */.
7120: 20 20 7b 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a {. ((long *
7130: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d ) function)[0] =
7140: 20 30 78 45 39 32 44 30 30 30 31 3b 0a 20 20 20 0xE92D0001;.
7150: 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 ((long *) funct
7160: 69 6f 6e 29 5b 31 5d 20 3d 20 30 78 45 35 39 46 ion)[1] = 0xE59F
7170: 30 30 30 43 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 000C;. ((long
7180: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 32 5d *) function)[2]
7190: 20 3d 20 30 78 45 35 39 46 43 30 30 43 3b 0a 20 = 0xE59FC00C;.
71a0: 20 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e ((long *) fun
71b0: 63 74 69 6f 6e 29 5b 33 5d 20 3d 20 30 78 45 35 ction)[3] = 0xE5
71c0: 38 43 30 30 30 30 3b 0a 20 20 20 20 28 28 6c 6f 8C0000;. ((lo
71d0: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
71e0: 34 5d 20 3d 20 30 78 45 38 42 44 30 30 30 31 3b 4] = 0xE8BD0001;
71f0: 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 . ((long *) f
7200: 75 6e 63 74 69 6f 6e 29 5b 35 5d 20 3d 20 30 78 unction)[5] = 0x
7210: 45 35 39 46 46 30 30 34 3b 0a 20 20 20 20 28 28 E59FF004;. ((
7220: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
7230: 29 5b 36 5d 20 3d 20 28 6c 6f 6e 67 29 64 61 74 )[6] = (long)dat
7240: 61 3b 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a 29 a;. ((long *)
7250: 20 66 75 6e 63 74 69 6f 6e 29 5b 37 5d 20 3d 20 function)[7] =
7260: 28 6c 6f 6e 67 29 76 61 72 69 61 62 6c 65 3b 0a (long)variable;.
7270: 20 20 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 ((long *) fu
7280: 6e 63 74 69 6f 6e 29 5b 38 5d 20 3d 20 28 6c 6f nction)[8] = (lo
7290: 6e 67 29 61 64 64 72 65 73 73 3b 0a 20 20 7d 0a ng)address;. }.
72a0: 23 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 #define is_tramp
72b0: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
72c0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
72d0: 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 30 78 45 39 tion)[0] == 0xE9
72e0: 32 44 30 30 30 31 20 26 26 20 5c 0a 20 20 20 20 2D0001 && \.
72f0: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
7300: 6f 6e 29 5b 31 5d 20 3d 3d 20 30 78 45 35 39 46 on)[1] == 0xE59F
7310: 30 30 30 43 20 26 26 20 5c 0a 20 20 20 20 28 28 000C && \. ((
7320: 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e long *) function
7330: 29 5b 32 5d 20 3d 3d 20 30 78 45 35 39 46 43 30 )[2] == 0xE59FC0
7340: 30 43 20 26 26 20 5c 0a 20 20 20 20 28 28 6c 6f 0C && \. ((lo
7350: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
7360: 33 5d 20 3d 3d 20 30 78 45 35 38 43 30 30 30 30 3] == 0xE58C0000
7370: 20 26 26 20 5c 0a 20 20 20 20 28 28 6c 6f 6e 67 && \. ((long
7380: 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d *) function)[4]
7390: 20 3d 3d 20 30 78 45 38 42 44 30 30 30 31 20 26 == 0xE8BD0001 &
73a0: 26 20 5c 0a 20 20 20 20 28 28 6c 6f 6e 67 20 2a & \. ((long *
73b0: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 35 5d 20 3d ) function)[5] =
73c0: 3d 20 30 78 45 35 39 46 46 30 30 34 0a 23 64 65 = 0xE59FF004.#de
73d0: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
73e0: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
73f0: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
7400: 74 69 6f 6e 29 5b 38 5d 0a 23 64 65 66 69 6e 65 tion)[8].#define
7410: 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 tramp_variable(
7420: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 function) \. (
7430: 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f (long *) functio
7440: 6e 29 5b 37 5d 0a 23 64 65 66 69 6e 65 20 74 72 n)[7].#define tr
7450: 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 6f amp_data(functio
7460: 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a n) \. ((long *
7470: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 36 5d 0a 23 ) function)[6].#
7480: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 70 endif.#ifdef __p
7490: 6f 77 65 72 70 63 73 79 73 76 34 5f 5f 0a 20 20 owerpcsysv4__.
74a0: 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 /* function:.
74b0: 2a 20 20 20 20 7b 6c 69 75 7c 6c 69 73 7d 20 31 * {liu|lis} 1
74c0: 31 2c 68 69 31 36 28 3c 76 61 72 69 61 62 6c 65 1,hi16(<variable
74d0: 3e 29 09 09 33 44 20 36 30 20 68 69 31 36 28 3c >)..3D 60 hi16(<
74e0: 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a 20 variable>). *
74f0: 20 20 20 7b 6f 72 69 6c 7c 6f 72 69 7d 20 31 31 {oril|ori} 11
7500: 2c 31 31 2c 6c 6f 31 36 28 3c 76 61 72 69 61 62 ,11,lo16(<variab
7510: 6c 65 3e 29 09 36 31 20 36 42 20 6c 6f 31 36 28 le>).61 6B lo16(
7520: 3c 76 61 72 69 61 62 6c 65 3e 29 0a 20 20 20 2a <variable>). *
7530: 20 20 20 20 7b 6c 69 75 7c 6c 69 73 7d 20 31 32 {liu|lis} 12
7540: 2c 68 69 31 36 28 3c 64 61 74 61 3e 29 09 09 33 ,hi16(<data>)..3
7550: 44 20 38 30 20 68 69 31 36 28 3c 64 61 74 61 3e D 80 hi16(<data>
7560: 29 0a 20 20 20 2a 20 20 20 20 7b 6f 72 69 6c 7c ). * {oril|
7570: 6f 72 69 7d 20 31 32 2c 31 32 2c 6c 6f 31 36 28 ori} 12,12,lo16(
7580: 3c 64 61 74 61 3e 29 09 09 36 31 20 38 43 20 6c <data>)..61 8C l
7590: 6f 31 36 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a o16(<data>). *
75a0: 20 20 20 20 7b 73 74 7c 73 74 77 7d 20 31 32 2c {st|stw} 12,
75b0: 30 28 31 31 29 09 09 09 39 31 20 38 42 20 30 30 0(11)...91 8B 00
75c0: 20 30 30 0a 20 20 20 2a 20 20 20 20 7b 6c 69 75 00. * {liu
75d0: 7c 6c 69 73 7d 20 30 2c 68 69 31 36 28 3c 61 64 |lis} 0,hi16(<ad
75e0: 64 72 65 73 73 3e 29 09 09 33 43 20 30 30 20 68 dress>)..3C 00 h
75f0: 69 31 36 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 i16(<address>).
7600: 20 20 2a 20 20 20 20 7b 6f 72 69 6c 7c 6f 72 69 * {oril|ori
7610: 7d 20 30 2c 30 2c 6c 6f 31 36 28 3c 61 64 64 72 } 0,0,lo16(<addr
7620: 65 73 73 3e 29 09 09 36 30 20 30 30 20 6c 6f 31 ess>)..60 00 lo1
7630: 36 28 3c 61 64 64 72 65 73 73 3e 29 0a 20 20 20 6(<address>).
7640: 2a 20 20 20 20 6d 74 63 74 72 20 30 09 09 09 09 * mtctr 0....
7650: 09 37 43 20 30 39 20 30 33 20 41 36 0a 20 20 20 .7C 09 03 A6.
7660: 2a 20 20 20 20 62 63 74 72 09 09 09 09 09 34 45 * bctr.....4E
7670: 20 38 30 20 30 34 20 32 30 0a 20 20 20 2a 2f 0a 80 04 20. */.
7680: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
7690: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 nction + 0) = 0x
76a0: 33 44 36 30 3b 0a 20 20 2a 28 73 68 6f 72 74 20 3D60;. *(short
76b0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 *) (function + 2
76c0: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ) = (unsigned lo
76d0: 6e 67 29 20 76 61 72 69 61 62 6c 65 20 3e 3e 20 ng) variable >>
76e0: 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 16;. *(short *)
76f0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 (function + 4)
7700: 3d 20 30 78 36 31 36 42 3b 0a 20 20 2a 28 73 68 = 0x616B;. *(sh
7710: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
7720: 20 2b 20 36 29 20 3d 20 28 75 6e 73 69 67 6e 65 + 6) = (unsigne
7730: 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 d long) variable
7740: 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 73 & 0xffff;. *(s
7750: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
7760: 6e 20 2b 20 38 29 20 3d 20 30 78 33 44 38 30 3b n + 8) = 0x3D80;
7770: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
7780: 75 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 28 unction +10) = (
7790: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d
77a0: 61 74 61 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 ata >> 16;. *(s
77b0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
77c0: 6e 20 2b 31 32 29 20 3d 20 30 78 36 31 38 43 3b n +12) = 0x618C;
77d0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
77e0: 75 6e 63 74 69 6f 6e 20 2b 31 34 29 20 3d 20 28 unction +14) = (
77f0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 64 unsigned long) d
7800: 61 74 61 20 26 20 30 78 66 66 66 66 3b 0a 20 20 ata & 0xffff;.
7810: 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 *(long *) (func
7820: 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 78 39 31 tion +16) = 0x91
7830: 38 42 30 30 30 30 3b 0a 20 20 2a 28 73 68 6f 72 8B0000;. *(shor
7840: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7850: 32 30 29 20 3d 20 30 78 33 43 30 30 3b 0a 20 20 20) = 0x3C00;.
7860: 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 *(short *) (func
7870: 74 69 6f 6e 20 2b 32 32 29 20 3d 20 28 75 6e 73 tion +22) = (uns
7880: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 igned long) addr
7890: 65 73 73 20 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 ess >> 16;. *(s
78a0: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
78b0: 6e 20 2b 32 34 29 20 3d 20 30 78 36 30 30 30 3b n +24) = 0x6000;
78c0: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
78d0: 75 6e 63 74 69 6f 6e 20 2b 32 36 29 20 3d 20 28 unction +26) = (
78e0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 61 unsigned long) a
78f0: 64 64 72 65 73 73 20 26 20 30 78 66 66 66 66 3b ddress & 0xffff;
7900: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 . *(long *) (f
7910: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 unction +28) = 0
7920: 78 37 43 30 39 30 33 41 36 3b 0a 20 20 2a 28 6c x7C0903A6;. *(l
7930: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
7940: 6e 20 2b 33 32 29 20 3d 20 30 78 34 45 38 30 30 n +32) = 0x4E800
7950: 34 32 30 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 420;.#define is_
7960: 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 tramp(function)
7970: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
7980: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
7990: 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 33 44 36 on + 0) == 0x3D6
79a0: 30 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 0 && \. *(unsig
79b0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
79c0: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d 20 30 nction + 4) == 0
79d0: 78 36 31 36 42 20 26 26 20 5c 0a 20 20 2a 28 75 x616B && \. *(u
79e0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
79f0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 (function + 8)
7a00: 3d 3d 20 30 78 33 44 38 30 20 26 26 20 5c 0a 20 == 0x3D80 && \.
7a10: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
7a20: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7a30: 31 32 29 20 3d 3d 20 30 78 36 31 38 43 20 26 26 12) == 0x618C &&
7a40: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
7a50: 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 long *) (functi
7a60: 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 39 31 38 on +16) == 0x918
7a70: 42 30 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 75 B0000 && \. *(u
7a80: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
7a90: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
7aa0: 3d 3d 20 30 78 33 43 30 30 20 26 26 20 5c 0a 20 == 0x3C00 && \.
7ab0: 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 *(unsigned shor
7ac0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
7ad0: 32 34 29 20 3d 3d 20 30 78 36 30 30 30 20 26 26 24) == 0x6000 &&
7ae0: 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 \. *(unsigned
7af0: 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 long *) (functi
7b00: 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 37 43 30 on +28) == 0x7C0
7b10: 39 30 33 41 36 20 26 26 20 5c 0a 20 20 2a 28 75 903A6 && \. *(u
7b20: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 2a 29 20 nsigned long *)
7b30: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 (function +32)
7b40: 3d 3d 20 30 78 34 45 38 30 30 34 32 30 0a 23 64 == 0x4E800420.#d
7b50: 65 66 69 6e 65 20 68 69 6c 6f 28 68 69 77 6f 72 efine hilo(hiwor
7b60: 64 2c 6c 6f 77 6f 72 64 29 20 20 5c 0a 20 20 28 d,loword) \. (
7b70: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
7b80: 20 28 68 69 77 6f 72 64 29 20 3c 3c 20 31 36 29 (hiword) << 16)
7b90: 20 7c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e | (unsigned lon
7ba0: 67 29 20 28 6c 6f 77 6f 72 64 29 29 0a 23 64 65 g) (loword)).#de
7bb0: 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 fine tramp_addre
7bc0: 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ss(function) \.
7bd0: 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 hilo(*(unsigne
7be0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
7bf0: 74 69 6f 6e 20 2b 32 32 29 2c 20 2a 28 75 6e 73 tion +22), *(uns
7c00: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
7c10: 66 75 6e 63 74 69 6f 6e 20 2b 32 36 29 29 0a 23 function +26)).#
7c20: 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 define tramp_var
7c30: 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 iable(function)
7c40: 20 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 \. hilo(*(unsi
7c50: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
7c60: 75 6e 63 74 69 6f 6e 20 2b 20 32 29 2c 20 2a 28 unction + 2), *(
7c70: 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a unsigned short *
7c80: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 ) (function + 6)
7c90: 29 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f ).#define tramp_
7ca0: 64 61 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 data(function)
7cb0: 5c 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 \. hilo(*(unsig
7cc0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
7cd0: 6e 63 74 69 6f 6e 20 2b 31 30 29 2c 20 2a 28 75 nction +10), *(u
7ce0: 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 nsigned short *)
7cf0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 29 (function +14))
7d00: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
7d10: 5f 70 6f 77 65 72 70 63 61 69 78 5f 5f 0a 20 20 _powerpcaix__.
7d20: 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 20 20 /* function:.
7d30: 2a 20 20 20 20 2e 6c 6f 6e 67 20 2e 74 72 61 6d * .long .tram
7d40: 70 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 p. * .long
7d50: 2e 6d 79 74 6f 63 0a 20 20 20 2a 20 20 20 20 2e .mytoc. * .
7d60: 6c 6f 6e 67 20 30 0a 20 20 20 2a 20 2e 6d 79 74 long 0. * .myt
7d70: 6f 63 3a 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e oc:. * .lon
7d80: 67 20 3c 76 61 72 69 61 62 6c 65 3e 0a 20 20 20 g <variable>.
7d90: 2a 20 20 20 20 2e 6c 6f 6e 67 20 3c 64 61 74 61 * .long <data
7da0: 3e 0a 20 20 20 2a 20 20 20 20 2e 6c 6f 6e 67 20 >. * .long
7db0: 3c 61 64 64 72 65 73 73 3e 0a 20 20 20 2a 2f 0a <address>. */.
7dc0: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
7dd0: 6e 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 28 28 nction + 0) = ((
7de0: 6c 6f 6e 67 20 2a 29 20 26 74 72 61 6d 70 29 5b long *) &tramp)[
7df0: 30 5d 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 0];. *(long *)
7e00: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 (function + 4)
7e10: 3d 20 28 6c 6f 6e 67 29 20 28 66 75 6e 63 74 69 = (long) (functi
7e20: 6f 6e 20 2b 20 31 32 29 3b 0a 20 20 2a 28 6c 6f on + 12);. *(lo
7e30: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
7e40: 20 2b 20 38 29 20 3d 20 30 3b 0a 20 20 2a 28 6c + 8) = 0;. *(l
7e50: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
7e60: 6e 20 2b 31 32 29 20 3d 20 28 6c 6f 6e 67 29 20 n +12) = (long)
7e70: 76 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 6c 6f variable;. *(lo
7e80: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
7e90: 20 2b 31 36 29 20 3d 20 28 6c 6f 6e 67 29 20 64 +16) = (long) d
7ea0: 61 74 61 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 ata;. *(long *)
7eb0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 (function +20)
7ec0: 20 3d 20 28 6c 6f 6e 67 29 20 61 64 64 72 65 73 = (long) addres
7ed0: 73 3b 0a 23 64 65 66 69 6e 65 20 69 73 5f 74 72 s;.#define is_tr
7ee0: 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c amp(function) \
7ef0: 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e . ((long *) fun
7f00: 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 28 28 6c ction)[0] == ((l
7f10: 6f 6e 67 20 2a 29 20 26 74 72 61 6d 70 29 5b 30 ong *) &tramp)[0
7f20: 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f ].#define tramp_
7f30: 61 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e address(function
7f40: 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 ) \. ((long *)
7f50: 20 66 75 6e 63 74 69 6f 6e 29 5b 35 5d 0a 23 64 function)[5].#d
7f60: 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 efine tramp_vari
7f70: 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 able(function)
7f80: 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 \. ((long *) fu
7f90: 6e 63 74 69 6f 6e 29 5b 33 5d 0a 23 64 65 66 69 nction)[3].#defi
7fa0: 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 75 ne tramp_data(fu
7fb0: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c nction) \. ((l
7fc0: 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 ong *) function)
7fd0: 5b 34 5d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 [4].#endif.#ifde
7fe0: 66 20 5f 5f 70 6f 77 65 72 70 63 36 34 61 69 78 f __powerpc64aix
7ff0: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
8000: 3a 0a 20 20 20 2a 20 20 20 20 2e 71 75 61 64 20 :. * .quad
8010: 2e 74 72 61 6d 70 0a 20 20 20 2a 20 20 20 20 2e .tramp. * .
8020: 71 75 61 64 20 2e 6d 79 74 6f 63 0a 20 20 20 2a quad .mytoc. *
8030: 20 20 20 20 2e 71 75 61 64 20 30 0a 20 20 20 2a .quad 0. *
8040: 20 2e 6d 79 74 6f 63 3a 0a 20 20 20 2a 20 20 20 .mytoc:. *
8050: 20 2e 71 75 61 64 20 3c 76 61 72 69 61 62 6c 65 .quad <variable
8060: 3e 0a 20 20 20 2a 20 20 20 20 2e 71 75 61 64 20 >. * .quad
8070: 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 20 20 2e <data>. * .
8080: 71 75 61 64 20 3c 61 64 64 72 65 73 73 3e 0a 20 quad <address>.
8090: 20 20 2a 2f 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 */. *(long *)
80a0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 29 (function + 0)
80b0: 20 3d 20 28 28 6c 6f 6e 67 20 2a 29 20 26 74 72 = ((long *) &tr
80c0: 61 6d 70 29 5b 30 5d 3b 0a 20 20 2a 28 6c 6f 6e amp)[0];. *(lon
80d0: 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e 20 g *) (function
80e0: 2b 20 38 29 20 3d 20 28 6c 6f 6e 67 29 20 28 66 + 8) = (long) (f
80f0: 75 6e 63 74 69 6f 6e 20 2b 20 32 34 29 3b 0a 20 unction + 24);.
8100: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
8110: 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 30 3b 0a ction +16) = 0;.
8120: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
8130: 6e 63 74 69 6f 6e 20 2b 32 34 29 20 3d 20 28 6c nction +24) = (l
8140: 6f 6e 67 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 ong) variable;.
8150: 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e *(long *) (fun
8160: 63 74 69 6f 6e 20 2b 33 32 29 20 3d 20 28 6c 6f ction +32) = (lo
8170: 6e 67 29 20 64 61 74 61 3b 0a 20 20 2a 28 6c 6f ng) data;. *(lo
8180: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
8190: 20 2b 34 30 29 20 3d 20 28 6c 6f 6e 67 29 20 61 +40) = (long) a
81a0: 64 64 72 65 73 73 3b 0a 23 64 65 66 69 6e 65 20 ddress;.#define
81b0: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
81c0: 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a n) \. ((long *
81d0: 29 20 66 75 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d ) function)[0] =
81e0: 3d 20 28 28 6c 6f 6e 67 20 2a 29 20 26 74 72 61 = ((long *) &tra
81f0: 6d 70 29 5b 30 5d 0a 23 64 65 66 69 6e 65 20 74 mp)[0].#define t
8200: 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e ramp_address(fun
8210: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f ction) \. ((lo
8220: 6e 67 20 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b ng *) function)[
8230: 35 5d 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5].#define tramp
8240: 5f 76 61 72 69 61 62 6c 65 28 66 75 6e 63 74 69 _variable(functi
8250: 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 on) \. ((long
8260: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 33 5d 0a *) function)[3].
8270: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
8280: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
8290: 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 ((long *) func
82a0: 74 69 6f 6e 29 5b 34 5d 0a 23 65 6e 64 69 66 0a tion)[4].#endif.
82b0: 23 69 66 64 65 66 20 5f 5f 6d 38 38 6b 5f 5f 0a #ifdef __m88k__.
82c0: 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a 20 /* function:.
82d0: 20 20 2a 20 20 20 20 6f 72 2e 75 20 20 20 20 23 * or.u #
82e0: 72 31 33 2c 23 72 30 2c 68 69 31 36 28 3c 76 61 r13,#r0,hi16(<va
82f0: 72 69 61 62 6c 65 3e 29 09 35 44 20 41 30 20 68 riable>).5D A0 h
8300: 69 31 36 28 3c 76 61 72 69 61 62 6c 65 3e 29 0a i16(<variable>).
8310: 20 20 20 2a 20 20 20 20 6f 72 20 20 20 20 20 20 * or
8320: 23 72 31 33 2c 23 72 31 33 2c 6c 6f 31 36 28 3c #r13,#r13,lo16(<
8330: 76 61 72 69 61 62 6c 65 3e 29 09 35 39 20 41 44 variable>).59 AD
8340: 20 6c 6f 31 36 28 3c 76 61 72 69 61 62 6c 65 3e lo16(<variable>
8350: 29 0a 20 20 20 2a 20 20 20 20 6f 72 2e 75 20 20 ). * or.u
8360: 20 20 23 72 31 30 2c 23 72 30 2c 68 69 31 36 28 #r10,#r0,hi16(
8370: 3c 64 61 74 61 3e 29 09 09 35 44 20 34 30 20 68 <data>)..5D 40 h
8380: 69 31 36 28 3c 64 61 74 61 3e 29 0a 20 20 20 2a i16(<data>). *
8390: 20 20 20 20 6f 72 20 20 20 20 20 20 23 72 31 30 or #r10
83a0: 2c 23 72 31 30 2c 6c 6f 31 36 28 3c 64 61 74 61 ,#r10,lo16(<data
83b0: 3e 29 09 09 35 39 20 34 41 20 6c 6f 31 36 28 3c >)..59 4A lo16(<
83c0: 64 61 74 61 3e 29 0a 20 20 20 2a 20 20 20 20 73 data>). * s
83d0: 74 20 20 20 20 20 20 23 72 31 30 2c 23 72 30 2c t #r10,#r0,
83e0: 23 72 31 33 09 09 09 46 35 20 34 30 20 32 34 20 #r13...F5 40 24
83f0: 30 44 0a 20 20 20 2a 20 20 20 20 6f 72 2e 75 20 0D. * or.u
8400: 20 20 20 23 72 31 33 2c 23 72 30 2c 68 69 31 36 #r13,#r0,hi16
8410: 28 3c 61 64 64 72 65 73 73 3e 29 09 35 44 20 41 (<address>).5D A
8420: 30 20 68 69 31 36 28 3c 61 64 64 72 65 73 73 3e 0 hi16(<address>
8430: 29 0a 20 20 20 2a 20 20 20 20 6f 72 20 20 20 20 ). * or
8440: 20 20 23 72 31 33 2c 23 72 31 33 2c 6c 6f 31 36 #r13,#r13,lo16
8450: 28 3c 61 64 64 72 65 73 73 3e 29 09 35 39 20 41 (<address>).59 A
8460: 44 20 6c 6f 31 36 28 3c 61 64 64 72 65 73 73 3e D lo16(<address>
8470: 29 0a 20 20 20 2a 20 20 20 20 6a 6d 70 20 20 20 ). * jmp
8480: 20 20 23 72 31 33 09 09 09 09 46 34 20 30 30 20 #r13....F4 00
8490: 43 30 20 30 44 0a 20 20 20 2a 2f 0a 20 20 2a 28 C0 0D. */. *(
84a0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
84b0: 6f 6e 20 2b 20 30 29 20 3d 20 30 78 35 44 41 30 on + 0) = 0x5DA0
84c0: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
84d0: 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 3d 20 function + 2) =
84e0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
84f0: 76 61 72 69 61 62 6c 65 20 3e 3e 20 31 36 3b 0a variable >> 16;.
8500: 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 *(short *) (fu
8510: 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 20 30 78 nction + 4) = 0x
8520: 35 39 41 44 3b 0a 20 20 2a 28 73 68 6f 72 74 20 59AD;. *(short
8530: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 *) (function + 6
8540: 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f ) = (unsigned lo
8550: 6e 67 29 20 76 61 72 69 61 62 6c 65 20 26 20 30 ng) variable & 0
8560: 78 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 xffff;. *(short
8570: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
8580: 38 29 20 3d 20 30 78 35 44 34 30 3b 0a 20 20 2a 8) = 0x5D40;. *
8590: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
85a0: 69 6f 6e 20 2b 31 30 29 20 3d 20 28 75 6e 73 69 ion +10) = (unsi
85b0: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 gned long) data
85c0: 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 >> 16;. *(short
85d0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
85e0: 32 29 20 3d 20 30 78 35 39 34 41 3b 0a 20 20 2a 2) = 0x594A;. *
85f0: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
8600: 69 6f 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 ion +14) = (unsi
8610: 67 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 gned long) data
8620: 26 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 6c 6f & 0xffff;. *(lo
8630: 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f 6e ng *) (function
8640: 20 2b 31 36 29 20 3d 20 30 78 46 35 34 30 32 34 +16) = 0xF54024
8650: 30 44 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 0D;. *(short *)
8660: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 29 20 (function +20)
8670: 3d 20 30 78 35 44 41 30 3b 0a 20 20 2a 28 73 68 = 0x5DA0;. *(sh
8680: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
8690: 20 2b 32 32 29 20 3d 20 28 75 6e 73 69 67 6e 65 +22) = (unsigne
86a0: 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 20 d long) address
86b0: 3e 3e 20 31 36 3b 0a 20 20 2a 28 73 68 6f 72 74 >> 16;. *(short
86c0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 *) (function +2
86d0: 34 29 20 3d 20 30 78 35 39 41 44 3b 0a 20 20 2a 4) = 0x59AD;. *
86e0: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
86f0: 69 6f 6e 20 2b 32 36 29 20 3d 20 28 75 6e 73 69 ion +26) = (unsi
8700: 67 6e 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 gned long) addre
8710: 73 73 20 26 20 30 78 66 66 66 66 3b 0a 20 20 2a ss & 0xffff;. *
8720: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
8730: 69 6f 6e 20 2b 32 38 29 20 3d 20 30 78 46 34 30 ion +28) = 0xF40
8740: 30 43 30 30 44 3b 0a 23 64 65 66 69 6e 65 20 69 0C00D;.#define i
8750: 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e s_tramp(function
8760: 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ) \. *(unsigne
8770: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
8780: 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 35 tion + 0) == 0x5
8790: 44 41 30 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 DA0 && \. *(uns
87a0: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
87b0: 66 75 6e 63 74 69 6f 6e 20 2b 20 34 29 20 3d 3d function + 4) ==
87c0: 20 30 78 35 39 41 44 20 26 26 20 5c 0a 20 20 2a 0x59AD && \. *
87d0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
87e0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 *) (function + 8
87f0: 29 20 3d 3d 20 30 78 35 44 34 30 20 26 26 20 5c ) == 0x5D40 && \
8800: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
8810: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
8820: 20 2b 31 32 29 20 3d 3d 20 30 78 35 39 34 41 20 +12) == 0x594A
8830: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
8840: 64 20 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 d long *) (func
8850: 74 69 6f 6e 20 2b 31 36 29 20 3d 3d 20 30 78 46 tion +16) == 0xF
8860: 35 34 30 32 34 30 44 20 26 26 20 5c 0a 20 20 2a 540240D && \. *
8870: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
8880: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 30 *) (function +20
8890: 29 20 3d 3d 20 30 78 35 44 41 30 20 26 26 20 5c ) == 0x5DA0 && \
88a0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
88b0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
88c0: 20 2b 32 34 29 20 3d 3d 20 30 78 35 39 41 44 20 +24) == 0x59AD
88d0: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
88e0: 64 20 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 d long *) (func
88f0: 74 69 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 46 tion +28) == 0xF
8900: 34 30 30 43 30 30 44 0a 23 64 65 66 69 6e 65 20 400C00D.#define
8910: 68 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f 77 6f hilo(hiword,lowo
8920: 72 64 29 20 20 5c 0a 20 20 28 28 28 75 6e 73 69 rd) \. (((unsi
8930: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 68 69 77 6f gned long) (hiwo
8940: 72 64 29 20 3c 3c 20 31 36 29 20 7c 20 28 75 6e rd) << 16) | (un
8950: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 6c 6f signed long) (lo
8960: 77 6f 72 64 29 29 0a 23 64 65 66 69 6e 65 20 74 word)).#define t
8970: 72 61 6d 70 5f 61 64 64 72 65 73 73 28 66 75 6e ramp_address(fun
8980: 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 6c 6f ction) \. hilo
8990: 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 (*(unsigned shor
89a0: 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b t *) (function +
89b0: 32 32 29 2c 20 2a 28 75 6e 73 69 67 6e 65 64 20 22), *(unsigned
89c0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
89d0: 6f 6e 20 2b 32 36 29 29 0a 23 64 65 66 69 6e 65 on +26)).#define
89e0: 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 tramp_variable(
89f0: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 function) \. h
8a00: 69 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 ilo(*(unsigned s
8a10: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
8a20: 6e 20 2b 20 32 29 2c 20 2a 28 75 6e 73 69 67 6e n + 2), *(unsign
8a30: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
8a40: 63 74 69 6f 6e 20 2b 20 36 29 29 0a 23 64 65 66 ction + 6)).#def
8a50: 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 ine tramp_data(f
8a60: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 unction) \. hi
8a70: 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 lo(*(unsigned sh
8a80: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
8a90: 20 2b 31 30 29 2c 20 2a 28 75 6e 73 69 67 6e 65 +10), *(unsigne
8aa0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
8ab0: 74 69 6f 6e 20 2b 31 34 29 29 0a 23 65 6e 64 69 tion +14)).#endi
8ac0: 66 0a 23 69 66 64 65 66 20 5f 5f 63 6f 6e 76 65 f.#ifdef __conve
8ad0: 78 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f x__. /* functio
8ae0: 6e 3a 0a 20 20 20 2a 20 20 20 20 6c 64 2e 77 20 n:. * ld.w
8af0: 23 3c 64 61 74 61 3e 2c 73 31 09 09 09 09 31 31 #<data>,s1....11
8b00: 43 39 20 3c 64 61 74 61 3e 0a 20 20 20 2a 20 20 C9 <data>. *
8b10: 20 20 73 74 2e 77 20 73 31 2c 3c 76 61 72 69 61 st.w s1,<varia
8b20: 62 6c 65 3e 09 09 09 33 36 34 31 20 3c 76 61 72 ble>...3641 <var
8b30: 69 61 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 6a iable>. * j
8b40: 6d 70 20 3c 61 64 64 72 65 73 73 3e 09 09 09 09 mp <address>....
8b50: 30 31 34 30 20 3c 61 64 64 72 65 73 73 3e 0a 20 0140 <address>.
8b60: 20 20 2a 20 20 20 20 64 73 2e 68 20 30 09 09 09 * ds.h 0...
8b70: 09 09 30 30 30 30 0a 20 20 20 2a 2f 0a 20 20 2a ..0000. */. *
8b80: 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 (short *) (funct
8b90: 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 31 31 43 ion + 0) = 0x11C
8ba0: 39 3b 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 9;. *(long *)
8bb0: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 3d (function + 2) =
8bc0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long)
8bd0: 20 64 61 74 61 3b 0a 20 20 2a 28 73 68 6f 72 74 data;. *(short
8be0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 *) (function +
8bf0: 36 29 20 3d 20 30 78 33 36 34 31 3b 0a 20 20 2a 6) = 0x3641;. *
8c00: 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 (long *) (funct
8c10: 69 6f 6e 20 2b 20 38 29 20 3d 20 28 75 6e 73 69 ion + 8) = (unsi
8c20: 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 gned long) varia
8c30: 62 6c 65 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a ble;. *(short *
8c40: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 32 29 ) (function +12)
8c50: 20 3d 20 30 78 30 31 34 30 3b 0a 20 20 2a 28 6c = 0x0140;. *(l
8c60: 6f 6e 67 20 2a 29 20 20 28 66 75 6e 63 74 69 6f ong *) (functio
8c70: 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 67 6e n +14) = (unsign
8c80: 65 64 20 6c 6f 6e 67 29 20 61 64 64 72 65 73 73 ed long) address
8c90: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
8ca0: 66 75 6e 63 74 69 6f 6e 20 2b 31 38 29 20 3d 20 function +18) =
8cb0: 30 78 30 30 30 30 3b 0a 23 64 65 66 69 6e 65 20 0x0000;.#define
8cc0: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
8cd0: 6e 29 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e n) \. *(unsign
8ce0: 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e ed short *) (fun
8cf0: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 ction + 0) == 0x
8d00: 31 31 43 39 20 26 26 20 5c 0a 20 20 2a 28 75 6e 11C9 && \. *(un
8d10: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
8d20: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d (function + 6) =
8d30: 3d 20 30 78 33 36 34 31 20 26 26 20 5c 0a 20 20 = 0x3641 && \.
8d40: 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 *(unsigned short
8d50: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
8d60: 32 29 20 3d 3d 20 30 78 30 31 34 30 20 26 26 20 2) == 0x0140 &&
8d70: 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 \. *(unsigned s
8d80: 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f hort *) (functio
8d90: 6e 20 2b 31 38 29 20 3d 3d 20 30 78 30 30 30 30 n +18) == 0x0000
8da0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
8db0: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
8dc0: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
8dd0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 34 29 0a (function +14).
8de0: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 #define tramp_va
8df0: 72 69 61 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 riable(function)
8e00: 20 20 5c 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 \. *(long *)
8e10: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 0a (function + 8).
8e20: 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 #define tramp_da
8e30: 74 61 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a ta(function) \.
8e40: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 20 28 66 75 *(long *) (fu
8e50: 6e 63 74 69 6f 6e 20 2b 20 32 29 0a 23 65 6e 64 nction + 2).#end
8e60: 69 66 0a 23 69 66 64 65 66 20 5f 5f 69 61 36 34 if.#ifdef __ia64
8e70: 5f 5f 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e __. /* function
8e80: 3a 0a 20 20 20 2a 20 20 20 20 64 61 74 61 38 20 :. * data8
8e90: 20 20 74 72 61 6d 70 0a 20 20 20 2a 20 20 20 20 tramp. *
8ea0: 64 61 74 61 38 20 20 20 63 6c 6f 73 75 72 65 0a data8 closure.
8eb0: 20 20 20 2a 20 63 6c 6f 73 75 72 65 3a 0a 20 20 * closure:.
8ec0: 20 2a 20 20 20 20 64 61 74 61 38 20 20 20 3c 61 * data8 <a
8ed0: 64 64 72 65 73 73 3e 0a 20 20 20 2a 20 20 20 20 ddress>. *
8ee0: 64 61 74 61 38 20 20 20 3c 76 61 72 69 61 62 6c data8 <variabl
8ef0: 65 3e 0a 20 20 20 2a 20 20 20 20 64 61 74 61 38 e>. * data8
8f00: 20 20 20 3c 64 61 74 61 3e 0a 20 20 20 2a 2f 0a <data>. */.
8f10: 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e *(long *) (fun
8f20: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 20 28 6c 6f ction + 0) = (lo
8f30: 6e 67 29 20 26 74 72 61 6d 70 3b 0a 20 20 2a 28 ng) &tramp;. *(
8f40: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
8f50: 6e 20 2b 20 38 29 20 3d 20 28 6c 6f 6e 67 29 20 n + 8) = (long)
8f60: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 31 36 29 3b (function + 16);
8f70: 0a 20 20 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 . *(long *) (fu
8f80: 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 28 6c nction +16) = (l
8f90: 6f 6e 67 29 20 61 64 64 72 65 73 73 3b 0a 20 20 ong) address;.
8fa0: 2a 28 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 *(long *) (funct
8fb0: 69 6f 6e 20 2b 32 34 29 20 3d 20 28 6c 6f 6e 67 ion +24) = (long
8fc0: 29 20 76 61 72 69 61 62 6c 65 3b 0a 20 20 2a 28 ) variable;. *(
8fd0: 6c 6f 6e 67 20 2a 29 20 28 66 75 6e 63 74 69 6f long *) (functio
8fe0: 6e 20 2b 33 32 29 20 3d 20 28 6c 6f 6e 67 29 20 n +32) = (long)
8ff0: 64 61 74 61 3b 0a 23 64 65 66 69 6e 65 20 69 73 data;.#define is
9000: 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f 6e 29 _tramp(function)
9010: 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 \. ((long *)
9020: 66 75 6e 63 74 69 6f 6e 29 5b 30 5d 20 3d 3d 20 function)[0] ==
9030: 28 6c 6f 6e 67 29 20 26 74 72 61 6d 70 0a 23 64 (long) &tramp.#d
9040: 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 efine tramp_addr
9050: 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ess(function) \
9060: 0a 20 20 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e . ((long *) fun
9070: 63 74 69 6f 6e 29 5b 32 5d 0a 23 64 65 66 69 6e ction)[2].#defin
9080: 65 20 74 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 e tramp_variable
9090: 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 (function) \.
90a0: 28 28 6c 6f 6e 67 20 2a 29 20 66 75 6e 63 74 69 ((long *) functi
90b0: 6f 6e 29 5b 33 5d 0a 23 64 65 66 69 6e 65 20 74 on)[3].#define t
90c0: 72 61 6d 70 5f 64 61 74 61 28 66 75 6e 63 74 69 ramp_data(functi
90d0: 6f 6e 29 20 20 5c 0a 20 20 28 28 6c 6f 6e 67 20 on) \. ((long
90e0: 2a 29 20 66 75 6e 63 74 69 6f 6e 29 5b 34 5d 0a *) function)[4].
90f0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
9100: 78 38 36 5f 36 34 5f 5f 0a 20 20 2f 2a 20 66 75 x86_64__. /* fu
9110: 6e 63 74 69 6f 6e 3a 0a 20 20 20 2a 20 20 20 20 nction:. *
9120: 6d 6f 76 61 62 73 71 20 24 3c 64 61 74 61 3e 2c movabsq $<data>,
9130: 25 72 61 78 09 09 34 38 20 42 38 20 3c 64 61 74 %rax..48 B8 <dat
9140: 61 3e 0a 20 20 20 2a 20 20 20 20 6d 6f 76 61 62 a>. * movab
9150: 73 71 20 25 72 61 78 2c 20 3c 76 61 72 69 61 62 sq %rax, <variab
9160: 6c 65 3e 09 34 38 20 41 33 20 3c 76 61 72 69 61 le>.48 A3 <varia
9170: 62 6c 65 3e 0a 20 20 20 2a 20 20 20 20 6d 6f 76 ble>. * mov
9180: 61 62 73 71 20 24 3c 61 64 64 72 65 73 73 3e 2c absq $<address>,
9190: 25 72 61 78 09 09 34 38 20 42 38 20 3c 61 64 64 %rax..48 B8 <add
91a0: 72 65 73 73 3e 0a 20 20 20 2a 20 20 20 20 6a 6d ress>. * jm
91b0: 70 20 2a 25 72 61 78 09 09 09 46 46 20 45 30 0a p *%rax...FF E0.
91c0: 20 20 20 2a 2f 0a 20 20 2a 28 73 68 6f 72 74 20 */. *(short
91d0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
91e0: 29 20 3d 20 30 78 42 38 34 38 3b 0a 20 20 2a 28 ) = 0xB848;. *(
91f0: 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 short *) (functi
9200: 6f 6e 20 2b 20 32 29 20 3d 20 28 75 6e 73 69 67 on + 2) = (unsig
9210: 6e 65 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 26 ned long) data &
9220: 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 69 6e 74 0xffff;. *(int
9230: 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 *) (function
9240: 2b 20 34 29 20 3d 20 28 28 75 6e 73 69 67 6e 65 + 4) = ((unsigne
9250: 64 20 6c 6f 6e 67 29 20 64 61 74 61 20 3e 3e 20 d long) data >>
9260: 31 36 29 20 26 20 30 78 66 66 66 66 66 66 66 66 16) & 0xffffffff
9270: 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 ;. *(short *) (
9280: 66 75 6e 63 74 69 6f 6e 20 2b 20 38 29 20 3d 20 function + 8) =
9290: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
92a0: 20 64 61 74 61 20 3e 3e 20 34 38 29 20 26 20 30 data >> 48) & 0
92b0: 78 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 72 74 xffff;. *(short
92c0: 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 *) (function +1
92d0: 30 29 20 3d 20 30 78 41 33 34 38 3b 0a 20 20 2a 0) = 0xA348;. *
92e0: 28 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 (int *) (funct
92f0: 69 6f 6e 20 2b 31 32 29 20 3d 20 28 75 6e 73 69 ion +12) = (unsi
9300: 67 6e 65 64 20 6c 6f 6e 67 29 20 76 61 72 69 61 gned long) varia
9310: 62 6c 65 20 26 20 30 78 66 66 66 66 66 66 66 66 ble & 0xffffffff
9320: 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 28 ;. *(int *) (
9330: 66 75 6e 63 74 69 6f 6e 20 2b 31 36 29 20 3d 20 function +16) =
9340: 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 ((unsigned long)
9350: 20 76 61 72 69 61 62 6c 65 20 3e 3e 20 33 32 29 variable >> 32)
9360: 20 26 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 & 0xffffffff;.
9370: 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 75 6e *(short *) (fun
9380: 63 74 69 6f 6e 20 2b 32 30 29 20 3d 20 30 78 42 ction +20) = 0xB
9390: 38 34 38 3b 0a 20 20 2a 28 73 68 6f 72 74 20 2a 848;. *(short *
93a0: 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 ) (function +22)
93b0: 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e = (unsigned lon
93c0: 67 29 20 61 64 64 72 65 73 73 20 26 20 30 78 66 g) address & 0xf
93d0: 66 66 66 3b 0a 20 20 2a 28 69 6e 74 20 2a 29 20 fff;. *(int *)
93e0: 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 32 34 29 (function +24)
93f0: 20 3d 20 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f = ((unsigned lo
9400: 6e 67 29 20 61 64 64 72 65 73 73 20 3e 3e 20 31 ng) address >> 1
9410: 36 29 20 26 20 30 78 66 66 66 66 66 66 66 66 3b 6) & 0xffffffff;
9420: 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 28 66 . *(short *) (f
9430: 75 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 28 unction +28) = (
9440: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 (unsigned long)
9450: 61 64 64 72 65 73 73 20 3e 3e 20 34 38 29 20 26 address >> 48) &
9460: 20 30 78 66 66 66 66 3b 0a 20 20 2a 28 73 68 6f 0xffff;. *(sho
9470: 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 rt *) (function
9480: 2b 33 30 29 20 3d 20 30 78 45 30 46 46 3b 0a 23 +30) = 0xE0FF;.#
9490: 64 65 66 69 6e 65 20 69 73 5f 74 72 61 6d 70 28 define is_tramp(
94a0: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
94b0: 28 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74 20 (unsigned short
94c0: 2a 29 20 28 66 75 6e 63 74 69 6f 6e 20 2b 20 30 *) (function + 0
94d0: 29 20 3d 3d 20 30 78 42 38 34 38 20 26 26 20 5c ) == 0xB848 && \
94e0: 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 73 68 . *(unsigned sh
94f0: 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 69 6f 6e ort *) (function
9500: 20 2b 31 30 29 20 3d 3d 20 30 78 41 33 34 38 20 +10) == 0xA348
9510: 26 26 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 && \. *(unsigne
9520: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
9530: 74 69 6f 6e 20 2b 32 30 29 20 3d 3d 20 30 78 42 tion +20) == 0xB
9540: 38 34 38 20 26 26 20 5c 0a 20 20 2a 28 75 6e 73 848 && \. *(uns
9550: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
9560: 66 75 6e 63 74 69 6f 6e 20 2b 33 30 29 20 3d 3d function +30) ==
9570: 20 30 78 45 30 46 46 0a 23 64 65 66 69 6e 65 20 0xE0FF.#define
9580: 68 69 6c 6f 28 68 69 77 6f 72 64 2c 6c 6f 77 6f hilo(hiword,lowo
9590: 72 64 29 20 20 5c 0a 20 20 28 28 28 75 6e 73 69 rd) \. (((unsi
95a0: 67 6e 65 64 20 6c 6f 6e 67 29 20 28 68 69 77 6f gned long) (hiwo
95b0: 72 64 29 20 3c 3c 20 33 32 29 20 7c 20 28 75 6e rd) << 32) | (un
95c0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 6c 6f signed long) (lo
95d0: 77 6f 72 64 29 29 0a 23 64 65 66 69 6e 65 20 68 word)).#define h
95e0: 69 6d 69 64 6c 6f 28 68 69 73 68 6f 72 74 2c 6d imidlo(hishort,m
95f0: 69 64 77 6f 72 64 2c 6c 6f 73 68 6f 72 74 29 20 idword,loshort)
9600: 20 5c 0a 20 20 28 28 28 75 6e 73 69 67 6e 65 64 \. (((unsigned
9610: 20 6c 6f 6e 67 29 20 28 68 69 73 68 6f 72 74 29 long) (hishort)
9620: 20 3c 3c 20 34 38 29 20 7c 20 28 75 6e 73 69 67 << 48) | (unsig
9630: 6e 65 64 20 6c 6f 6e 67 29 20 28 6d 69 64 77 6f ned long) (midwo
9640: 72 64 29 20 3c 3c 20 31 36 20 5c 0a 20 20 20 7c rd) << 16 \. |
9650: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 (unsigned long)
9660: 20 28 6c 6f 73 68 6f 72 74 29 29 0a 23 64 65 66 (loshort)).#def
9670: 69 6e 65 20 74 72 61 6d 70 5f 61 64 64 72 65 73 ine tramp_addres
9680: 73 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 s(function) \.
9690: 20 68 69 6d 69 64 6c 6f 28 2a 28 75 6e 73 69 67 himidlo(*(unsig
96a0: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
96b0: 6e 63 74 69 6f 6e 20 2b 32 38 29 2c 20 5c 0a 20 nction +28), \.
96c0: 20 20 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 *(unsig
96d0: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
96e0: 6e 63 74 69 6f 6e 20 2b 32 34 29 2c 20 5c 0a 20 nction +24), \.
96f0: 20 20 20 20 20 20 20 20 20 2a 28 75 6e 73 69 67 *(unsig
9700: 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 ned short *) (fu
9710: 6e 63 74 69 6f 6e 20 2b 32 32 29 29 0a 23 64 65 nction +22)).#de
9720: 66 69 6e 65 20 74 72 61 6d 70 5f 76 61 72 69 61 fine tramp_varia
9730: 62 6c 65 28 66 75 6e 63 74 69 6f 6e 29 20 20 5c ble(function) \
9740: 0a 20 20 68 69 6c 6f 28 2a 28 75 6e 73 69 67 6e . hilo(*(unsign
9750: 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 ed int *) (funct
9760: 69 6f 6e 20 2b 31 36 29 2c 20 2a 28 75 6e 73 69 ion +16), *(unsi
9770: 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 66 75 6e gned int *) (fun
9780: 63 74 69 6f 6e 20 2b 31 32 29 29 0a 23 64 65 66 ction +12)).#def
9790: 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 66 ine tramp_data(f
97a0: 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 68 69 unction) \. hi
97b0: 6d 69 64 6c 6f 28 2a 28 75 6e 73 69 67 6e 65 64 midlo(*(unsigned
97c0: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
97d0: 69 6f 6e 20 2b 20 38 29 2c 20 5c 0a 20 20 20 20 ion + 8), \.
97e0: 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 *(unsigned
97f0: 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 int *) (funct
9800: 69 6f 6e 20 2b 20 34 29 2c 20 5c 0a 20 20 20 20 ion + 4), \.
9810: 20 20 20 20 20 20 2a 28 75 6e 73 69 67 6e 65 64 *(unsigned
9820: 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 74 short *) (funct
9830: 69 6f 6e 20 2b 20 32 29 29 0a 23 65 6e 64 69 66 ion + 2)).#endif
9840: 0a 23 69 66 64 65 66 20 5f 5f 73 33 39 30 5f 5f .#ifdef __s390__
9850: 0a 20 20 2f 2a 20 66 75 6e 63 74 69 6f 6e 3a 0a . /* function:.
9860: 0a 20 20 20 20 20 20 20 20 6c 72 20 20 20 20 20 . lr
9870: 20 25 72 30 2c 25 72 31 33 0a 20 20 20 20 20 20 %r0,%r13.
9880: 20 20 62 72 61 73 20 20 20 20 25 72 31 33 2c 2e bras %r13,.
9890: 4c 54 4e 30 5f 30 0a 2e 4c 54 30 5f 30 3a 0a 2e LTN0_0..LT0_0:..
98a0: 4c 43 30 3a 0a 20 20 20 20 20 20 20 20 2e 6c 6f LC0:. .lo
98b0: 6e 67 20 20 20 30 78 37 33 35 35 34 37 31 31 0a ng 0x73554711.
98c0: 2e 4c 43 31 3a 0a 20 20 20 20 20 20 20 20 2e 6c .LC1:. .l
98d0: 6f 6e 67 20 20 20 30 78 31 32 33 34 35 36 37 38 ong 0x12345678
98e0: 0a 2e 4c 43 32 3a 0a 20 20 20 20 20 20 20 20 2e ..LC2:. .
98f0: 6c 6f 6e 67 20 20 20 30 78 62 61 62 65 62 65 63 long 0xbabebec
9900: 30 0a 2e 4c 54 4e 30 5f 30 3a 0a 20 20 20 20 20 0..LTN0_0:.
9910: 20 20 20 6c 20 20 20 20 20 20 20 25 72 31 2c 2e l %r1,.
9920: 4c 43 30 2d 2e 4c 54 30 5f 30 28 25 72 31 33 29 LC0-.LT0_0(%r13)
9930: 0a 20 20 20 20 20 20 20 20 6d 76 63 20 20 20 20 . mvc
9940: 20 30 28 34 2c 25 72 31 29 2c 2e 4c 43 31 2d 2e 0(4,%r1),.LC1-.
9950: 4c 54 30 5f 30 28 25 72 31 33 29 0a 20 20 20 20 LT0_0(%r13).
9960: 20 20 20 20 6c 20 20 20 20 20 20 20 25 72 31 2c l %r1,
9970: 2e 4c 43 32 2d 2e 4c 54 31 5f 30 28 25 72 31 33 .LC2-.LT1_0(%r13
9980: 29 0a 20 20 20 20 20 20 20 20 6c 72 20 20 20 20 ). lr
9990: 20 20 25 72 31 33 2c 25 72 30 0a 20 20 20 20 20 %r13,%r0.
99a0: 20 20 20 62 72 20 20 20 20 20 20 25 72 31 0a 20 br %r1.
99b0: 20 2a 2f 0a 20 20 2f 2a 20 57 68 61 74 20 61 62 */. /* What ab
99c0: 6f 75 74 20 62 69 67 20 65 6e 64 69 61 6e 20 2f out big endian /
99d0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 20 3f little endian ?
99e0: 3f 20 2a 2f 0a 20 20 2a 28 75 6e 73 69 67 6e 65 ? */. *(unsigne
99f0: 64 20 73 68 6f 72 74 20 2a 29 20 28 66 75 6e 63 d short *) (func
9a00: 74 69 6f 6e 20 2b 20 30 29 20 3d 20 30 78 31 38 tion + 0) = 0x18
9a10: 30 44 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 0D;. *(unsigned
9a20: 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 int *) (funct
9a30: 69 6f 6e 20 2b 20 32 29 20 3d 20 30 78 41 37 44 ion + 2) = 0xA7D
9a40: 35 30 30 30 38 3b 0a 20 20 2a 28 75 6e 73 69 67 50008;. *(unsig
9a50: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
9a60: 6e 63 74 69 6f 6e 20 2b 20 36 29 20 3d 20 28 75 nction + 6) = (u
9a70: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 76 61 72 nsigned int) var
9a80: 69 61 62 6c 65 3b 0a 20 20 2a 28 75 6e 73 69 67 iable;. *(unsig
9a90: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
9aa0: 6e 63 74 69 6f 6e 20 2b 31 30 29 20 3d 20 28 75 nction +10) = (u
9ab0: 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 64 61 74 nsigned int) dat
9ac0: 61 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 a;. *(unsigned
9ad0: 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 int *) (functi
9ae0: 6f 6e 20 2b 31 34 29 20 3d 20 28 75 6e 73 69 67 on +14) = (unsig
9af0: 6e 65 64 20 69 6e 74 29 20 61 64 64 72 65 73 73 ned int) address
9b00: 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 20 69 ;. *(unsigned i
9b10: 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 74 69 6f nt *) (functio
9b20: 6e 20 2b 31 38 29 20 3d 20 30 78 35 38 31 30 44 n +18) = 0x5810D
9b30: 30 30 30 3b 0a 20 20 2a 28 75 6e 73 69 67 6e 65 000;. *(unsigne
9b40: 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 6e 63 d int *) (func
9b50: 74 69 6f 6e 20 2b 32 32 29 20 3d 20 30 78 44 32 tion +22) = 0xD2
9b60: 30 33 31 30 30 30 3b 0a 20 20 2a 28 75 6e 73 69 031000;. *(unsi
9b70: 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 66 gned short *) (f
9b80: 75 6e 63 74 69 6f 6e 20 2b 32 36 29 20 3d 20 30 unction +26) = 0
9b90: 78 44 30 30 34 3b 0a 20 20 2a 28 75 6e 73 69 67 xD004;. *(unsig
9ba0: 6e 65 64 20 69 6e 74 20 2a 29 20 20 20 28 66 75 ned int *) (fu
9bb0: 6e 63 74 69 6f 6e 20 2b 32 38 29 20 3d 20 30 78 nction +28) = 0x
9bc0: 35 38 31 30 44 30 30 38 3b 0a 20 20 2a 28 75 6e 5810D008;. *(un
9bd0: 73 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 signed short *)
9be0: 28 66 75 6e 63 74 69 6f 6e 20 2b 33 32 29 20 3d (function +32) =
9bf0: 20 30 78 31 38 44 30 3b 0a 20 20 2a 28 75 6e 73 0x18D0;. *(uns
9c00: 69 67 6e 65 64 20 73 68 6f 72 74 20 2a 29 20 28 igned short *) (
9c10: 66 75 6e 63 74 69 6f 6e 20 2b 33 34 29 20 3d 20 function +34) =
9c20: 30 78 30 37 66 31 3b 0a 23 64 65 66 69 6e 65 20 0x07f1;.#define
9c30: 69 73 5f 74 72 61 6d 70 28 66 75 6e 63 74 69 6f is_tramp(functio
9c40: 6e 29 20 20 5c 0a 20 20 2a 28 73 68 6f 72 74 20 n) \. *(short
9c50: 2a 29 20 20 20 20 20 20 20 20 20 20 28 66 75 6e *) (fun
9c60: 63 74 69 6f 6e 20 2b 20 30 29 20 3d 3d 20 30 78 ction + 0) == 0x
9c70: 31 38 30 44 20 26 26 20 5c 0a 20 20 2a 28 69 6e 180D && \. *(in
9c80: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 20 20 t *)
9c90: 28 66 75 6e 63 74 69 6f 6e 20 2b 20 32 29 20 3d (function + 2) =
9ca0: 3d 20 30 78 41 37 44 35 30 30 30 38 20 26 26 20 = 0xA7D50008 &&
9cb0: 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 20 20 20 20 \. *(int *)
9cc0: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
9cd0: 6e 20 2b 31 38 29 20 3d 3d 20 30 78 35 38 31 30 n +18) == 0x5810
9ce0: 44 30 30 30 20 26 26 20 5c 0a 20 20 2a 28 69 6e D000 && \. *(in
9cf0: 74 20 2a 29 20 20 20 20 20 20 20 20 20 20 20 20 t *)
9d00: 28 66 75 6e 63 74 69 6f 6e 20 2b 32 32 29 20 3d (function +22) =
9d10: 3d 20 30 78 44 32 30 33 31 30 30 30 20 26 26 20 = 0xD2031000 &&
9d20: 5c 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 20 \. *(short *)
9d30: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
9d40: 6e 20 2b 32 36 29 20 3d 3d 20 30 78 44 30 30 34 n +26) == 0xD004
9d50: 20 26 26 20 5c 0a 20 20 2a 28 69 6e 74 20 2a 29 && \. *(int *)
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 28 66 75 6e (fun
9d70: 63 74 69 6f 6e 20 2b 32 38 29 20 3d 3d 20 30 78 ction +28) == 0x
9d80: 35 38 31 30 44 30 30 38 20 26 26 20 5c 0a 20 20 5810D008 && \.
9d90: 2a 28 73 68 6f 72 74 20 2a 29 20 20 20 20 20 20 *(short *)
9da0: 20 20 20 20 28 66 75 6e 63 74 69 6f 6e 20 2b 33 (function +3
9db0: 32 29 20 3d 3d 20 30 78 31 38 44 30 20 26 26 20 2) == 0x18D0 &&
9dc0: 5c 0a 20 20 2a 28 73 68 6f 72 74 20 2a 29 20 20 \. *(short *)
9dd0: 20 20 20 20 20 20 20 20 28 66 75 6e 63 74 69 6f (functio
9de0: 6e 20 2b 33 34 29 20 3d 3d 20 30 78 30 37 66 31 n +34) == 0x07f1
9df0: 0a 23 64 65 66 69 6e 65 20 74 72 61 6d 70 5f 61 .#define tramp_a
9e00: 64 64 72 65 73 73 28 66 75 6e 63 74 69 6f 6e 29 ddress(function)
9e10: 20 20 5c 0a 20 20 2a 28 75 6e 73 69 67 6e 65 64 \. *(unsigned
9e20: 20 69 6e 74 20 2a 29 20 28 66 75 6e 63 74 69 6f int *) (functio
9e30: 6e 20 2b 31 34 29 0a 23 64 65 66 69 6e 65 20 74 n +14).#define t
9e40: 72 61 6d 70 5f 76 61 72 69 61 62 6c 65 28 66 75 ramp_variable(fu
9e50: 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a 28 75 nction) \. *(u
9e60: 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 20 28 nsigned int *) (
9e70: 66 75 6e 63 74 69 6f 6e 20 2b 36 29 0a 23 64 65 function +6).#de
9e80: 66 69 6e 65 20 74 72 61 6d 70 5f 64 61 74 61 28 fine tramp_data(
9e90: 66 75 6e 63 74 69 6f 6e 29 20 20 5c 0a 20 20 2a function) \. *
9ea0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 29 (unsigned int *)
9eb0: 20 28 66 75 6e 63 74 69 6f 6e 20 2b 31 30 29 0a (function +10).
9ec0: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 33 2e 20 #endif.. /* 3.
9ed0: 53 65 74 20 6d 65 6d 6f 72 79 20 70 72 6f 74 65 Set memory prote
9ee0: 63 74 69 6f 6e 20 74 6f 20 22 65 78 65 63 75 74 ction to "execut
9ef0: 61 62 6c 65 22 20 2a 2f 0a 0a 23 69 66 20 21 64 able" */..#if !d
9f00: 65 66 69 6e 65 64 28 43 4f 44 45 5f 45 58 45 43 efined(CODE_EXEC
9f10: 55 54 41 42 4c 45 29 20 26 26 20 64 65 66 69 6e UTABLE) && defin
9f20: 65 64 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 ed(EXECUTABLE_VI
9f30: 41 5f 4d 50 52 4f 54 45 43 54 29 0a 20 20 2f 2a A_MPROTECT). /*
9f40: 20 43 61 6c 6c 20 6d 70 72 6f 74 65 63 74 20 6f Call mprotect o
9f50: 6e 20 74 68 65 20 70 61 67 65 73 20 74 68 61 74 n the pages that
9f60: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 72 61 6e contain the ran
9f70: 67 65 2e 20 2a 2f 0a 20 20 7b 20 75 6e 73 69 67 ge. */. { unsig
9f80: 6e 65 64 20 6c 6f 6e 67 20 73 74 61 72 74 5f 61 ned long start_a
9f90: 64 64 72 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 ddr = (unsigned
9fa0: 6c 6f 6e 67 29 20 66 75 6e 63 74 69 6f 6e 3b 0a long) function;.
9fb0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e unsigned lon
9fc0: 67 20 65 6e 64 5f 61 64 64 72 20 3d 20 28 75 6e g end_addr = (un
9fd0: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 66 75 signed long) (fu
9fe0: 6e 63 74 69 6f 6e 20 2b 20 54 52 41 4d 50 5f 4c nction + TRAMP_L
9ff0: 45 4e 47 54 48 29 3b 0a 20 20 20 20 73 74 61 72 ENGTH);. star
a000: 74 5f 61 64 64 72 20 3d 20 73 74 61 72 74 5f 61 t_addr = start_a
a010: 64 64 72 20 26 20 2d 70 61 67 65 73 69 7a 65 3b ddr & -pagesize;
a020: 0a 20 20 20 20 65 6e 64 5f 61 64 64 72 20 3d 20 . end_addr =
a030: 28 65 6e 64 5f 61 64 64 72 20 2b 20 70 61 67 65 (end_addr + page
a040: 73 69 7a 65 2d 31 29 20 26 20 2d 70 61 67 65 73 size-1) & -pages
a050: 69 7a 65 3b 0a 20 20 20 7b 75 6e 73 69 67 6e 65 ize;. {unsigne
a060: 64 20 6c 6f 6e 67 20 6c 65 6e 20 3d 20 65 6e 64 d long len = end
a070: 5f 61 64 64 72 20 2d 20 73 74 61 72 74 5f 61 64 _addr - start_ad
a080: 64 72 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dr;.#if defined(
a090: 48 41 56 45 5f 4d 41 43 48 5f 56 4d 29 0a 20 20 HAVE_MACH_VM).
a0a0: 20 20 69 66 20 28 76 6d 5f 70 72 6f 74 65 63 74 if (vm_protect
a0b0: 28 74 61 73 6b 5f 73 65 6c 66 28 29 2c 73 74 61 (task_self(),sta
a0c0: 72 74 5f 61 64 64 72 2c 6c 65 6e 2c 30 2c 56 4d rt_addr,len,0,VM
a0d0: 5f 50 52 4f 54 5f 52 45 41 44 7c 56 4d 5f 50 52 _PROT_READ|VM_PR
a0e0: 4f 54 5f 57 52 49 54 45 7c 56 4d 5f 50 52 4f 54 OT_WRITE|VM_PROT
a0f0: 5f 45 58 45 43 55 54 45 29 20 21 3d 20 4b 45 52 _EXECUTE) != KER
a100: 4e 5f 53 55 43 43 45 53 53 29 0a 23 65 6c 73 65 N_SUCCESS).#else
a110: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 63 .#if defined(__c
a120: 6f 6e 76 65 78 5f 5f 29 0a 20 20 20 20 2f 2a 20 onvex__). /*
a130: 43 6f 6e 76 65 78 20 4f 53 20 63 61 6c 6c 73 20 Convex OS calls
a140: 69 74 20 60 6d 72 65 6d 61 70 28 29 27 2e 20 2a it `mremap()'. *
a150: 2f 0a 20 20 20 20 6d 72 65 6d 61 70 28 73 74 61 /. mremap(sta
a160: 72 74 5f 61 64 64 72 2c 20 26 6c 65 6e 2c 20 50 rt_addr, &len, P
a170: 52 4f 54 5f 52 45 41 44 7c 50 52 4f 54 5f 57 52 ROT_READ|PROT_WR
a180: 49 54 45 7c 50 52 4f 54 5f 45 58 45 43 2c 20 4d ITE|PROT_EXEC, M
a190: 41 50 5f 50 52 49 56 41 54 45 29 3b 0a 20 20 20 AP_PRIVATE);.
a1a0: 20 69 66 20 28 30 29 0a 23 65 6c 73 65 0a 23 69 if (0).#else.#i
a1b0: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 f defined(HAVE_S
a1c0: 59 53 5f 4d 38 38 4b 42 43 53 5f 48 29 0a 20 20 YS_M88KBCS_H).
a1d0: 20 20 69 66 20 28 6d 65 6d 63 74 6c 28 73 74 61 if (memctl(sta
a1e0: 72 74 5f 61 64 64 72 2c 20 6c 65 6e 2c 20 4d 43 rt_addr, len, MC
a1f0: 54 5f 54 45 58 54 29 20 3d 3d 20 2d 31 29 0a 23 T_TEXT) == -1).#
a200: 65 6c 73 65 0a 20 20 20 20 69 66 20 28 6d 70 72 else. if (mpr
a210: 6f 74 65 63 74 28 28 76 6f 69 64 2a 29 73 74 61 otect((void*)sta
a220: 72 74 5f 61 64 64 72 2c 20 6c 65 6e 2c 20 50 52 rt_addr, len, PR
a230: 4f 54 5f 52 45 41 44 7c 50 52 4f 54 5f 57 52 49 OT_READ|PROT_WRI
a240: 54 45 7c 50 52 4f 54 5f 45 58 45 43 29 20 3c 20 TE|PROT_EXEC) <
a250: 30 29 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0).#endif.#endif
a260: 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 7b 20 .#endif. {
a270: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 22 fprintf(stderr,"
a280: 74 72 61 6d 70 6f 6c 69 6e 65 3a 20 63 61 6e 6e trampoline: cann
a290: 6f 74 20 6d 61 6b 65 20 6d 65 6d 6f 72 79 20 65 ot make memory e
a2a0: 78 65 63 75 74 61 62 6c 65 5c 6e 22 29 3b 20 61 xecutable\n"); a
a2b0: 62 6f 72 74 28 29 3b 20 7d 0a 20 20 7d 7d 0a 23 bort(); }. }}.#
a2c0: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 34 2e 20 46 endif.. /* 4. F
a2d0: 6c 75 73 68 20 69 6e 73 74 72 75 63 74 69 6f 6e lush instruction
a2e0: 20 63 61 63 68 65 20 2a 2f 0a 20 20 2f 2a 20 57 cache */. /* W
a2f0: 65 20 6e 65 65 64 20 74 68 69 73 20 62 65 63 61 e need this beca
a300: 75 73 65 20 73 6f 6d 65 20 43 50 55 73 20 68 61 use some CPUs ha
a310: 76 65 20 73 65 70 61 72 61 74 65 20 64 61 74 61 ve separate data
a320: 20 63 61 63 68 65 20 61 6e 64 20 69 6e 73 74 72 cache and instr
a330: 75 63 74 69 6f 6e 0a 20 20 20 2a 20 63 61 63 68 uction. * cach
a340: 65 2e 20 54 68 65 20 66 72 65 73 68 6c 79 20 62 e. The freshly b
a350: 75 69 6c 74 20 74 72 61 6d 70 6f 6c 69 6e 65 20 uilt trampoline
a360: 69 73 20 76 69 73 69 62 6c 65 20 74 6f 20 74 68 is visible to th
a370: 65 20 64 61 74 61 20 63 61 63 68 65 2c 20 62 75 e data cache, bu
a380: 74 20 6e 6f 74 0a 20 20 20 2a 20 6d 61 79 62 65 t not. * maybe
a390: 20 6e 6f 74 20 74 6f 20 74 68 65 20 69 6e 73 74 not to the inst
a3a0: 72 75 63 74 69 6f 6e 20 63 61 63 68 65 2e 20 54 ruction cache. T
a3b0: 68 69 73 20 69 73 20 68 61 69 72 79 2e 0a 20 20 his is hairy..
a3c0: 20 2a 2f 0a 23 69 66 20 21 28 64 65 66 69 6e 65 */.#if !(define
a3d0: 64 28 5f 5f 68 70 70 61 6e 65 77 5f 5f 29 20 7c d(__hppanew__) |
a3e0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 6f 77 65 | defined(__powe
a3f0: 72 70 63 61 69 78 5f 5f 29 20 7c 7c 20 64 65 66 rpcaix__) || def
a400: 69 6e 65 64 28 5f 5f 70 6f 77 65 72 70 63 36 34 ined(__powerpc64
a410: 61 69 78 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 aix__) || define
a420: 64 28 5f 5f 69 61 36 34 5f 5f 29 29 0a 20 20 2f d(__ia64__)). /
a430: 2a 20 4f 6e 6c 79 20 6e 65 65 64 65 64 20 69 66 * Only needed if
a440: 20 77 65 20 72 65 61 6c 6c 79 20 73 65 74 20 75 we really set u
a450: 70 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 p machine instru
a460: 63 74 69 6f 6e 73 2e 20 2a 2f 0a 23 69 66 64 65 ctions. */.#ifde
a470: 66 20 5f 5f 69 33 38 36 5f 5f 0a 23 69 66 20 64 f __i386__.#if d
a480: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 0a 20 efined(_WIN32).
a490: 20 77 68 69 6c 65 20 28 21 46 6c 75 73 68 49 6e while (!FlushIn
a4a0: 73 74 72 75 63 74 69 6f 6e 43 61 63 68 65 28 47 structionCache(G
a4b0: 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 etCurrentProcess
a4c0: 28 29 2c 66 75 6e 63 74 69 6f 6e 2c 54 52 41 4d (),function,TRAM
a4d0: 50 5f 4c 45 4e 47 54 48 29 29 0a 20 20 20 20 63 P_LENGTH)). c
a4e0: 6f 6e 74 69 6e 75 65 3b 0a 23 65 6e 64 69 66 0a ontinue;.#endif.
a4f0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
a500: 6d 36 38 6b 5f 5f 0a 23 69 66 20 64 65 66 69 6e m68k__.#if defin
a510: 65 64 28 4e 65 58 54 29 20 26 26 20 64 65 66 69 ed(NeXT) && defi
a520: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 20 20 ned(__GNUC__).
a530: 5f 5f 61 73 6d 5f 5f 20 5f 5f 76 6f 6c 61 74 69 __asm__ __volati
a540: 6c 65 5f 5f 20 28 22 74 72 61 70 20 23 32 22 29 le__ ("trap #2")
a550: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 ;.#endif.#if def
a560: 69 6e 65 64 28 41 4d 49 47 41 29 0a 20 20 43 61 ined(AMIGA). Ca
a570: 63 68 65 43 6c 65 61 72 45 28 66 75 6e 63 74 69 cheClearE(functi
a580: 6f 6e 2c 54 52 41 4d 50 5f 4c 45 4e 47 54 48 2c on,TRAMP_LENGTH,
a590: 43 41 43 52 46 5f 43 6c 65 61 72 49 7c 43 41 43 CACRF_ClearI|CAC
a5a0: 52 46 5f 43 6c 65 61 72 44 29 3b 0a 23 65 6e 64 RF_ClearD);.#end
a5b0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 61 if.#if defined(a
a5c0: 70 6f 6c 6c 6f 29 0a 20 20 63 61 63 68 65 5f 24 pollo). cache_$
a5d0: 63 6c 65 61 72 28 29 3b 0a 23 65 6e 64 69 66 0a clear();.#endif.
a5e0: 23 69 66 20 64 65 66 69 6e 65 64 28 68 70 75 78 #if defined(hpux
a5f0: 29 0a 20 20 63 61 63 68 65 63 74 6c 28 43 43 5f ). cachectl(CC_
a600: 49 50 55 52 47 45 2c 66 75 6e 63 74 69 6f 6e 2c IPURGE,function,
a610: 54 52 41 4d 50 5f 4c 45 4e 47 54 48 29 3b 0a 23 TRAMP_LENGTH);.#
a620: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
a630: 64 28 5f 5f 4e 65 74 42 53 44 5f 5f 29 20 26 26 d(__NetBSD__) &&
a640: 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f defined(__GNUC_
a650: 5f 29 0a 20 20 7b 20 72 65 67 69 73 74 65 72 20 _). { register
a660: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 5f 62 unsigned long _b
a670: 65 67 20 5f 5f 61 73 6d 5f 5f 20 28 22 25 61 31 eg __asm__ ("%a1
a680: 22 29 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 6c ") = (unsigned l
a690: 6f 6e 67 29 20 66 75 6e 63 74 69 6f 6e 3b 0a 20 ong) function;.
a6a0: 20 20 20 72 65 67 69 73 74 65 72 20 75 6e 73 69 register unsi
a6b0: 67 6e 65 64 20 6c 6f 6e 67 20 5f 6c 65 6e 20 5f gned long _len _
a6c0: 5f 61 73 6d 5f 5f 20 28 22 25 64 31 22 29 20 3d _asm__ ("%d1") =
a6d0: 20 54 52 41 4d 50 5f 4c 45 4e 47 54 48 3b 0a 20 TRAMP_LENGTH;.
a6e0: 20 20 20 5f 5f 61 73 6d 5f 5f 20 5f 5f 76 6f 6c __asm__ __vol
a6f0: 61 74 69 6c 65 5f 5f 20 28 0a 20 20 20 20 20 20 atile__ (.
a700: 22 6d 6f 76 65 25 2e 6c 20 25 23 30 78 38 30 30 "move%.l %#0x800
a710: 30 30 30 30 34 2c 25 2f 64 30 5c 6e 5c 74 22 20 00004,%/d0\n\t"
a720: 2f 2a 20 43 43 5f 45 58 54 50 55 52 47 45 20 7c /* CC_EXTPURGE |
a730: 20 43 5f 49 50 55 52 47 45 20 2a 2f 0a 20 20 20 C_IPURGE */.
a740: 20 20 20 22 74 72 61 70 20 23 31 32 22 20 20 20 "trap #12"
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a760: 20 20 20 2f 2a 20 6b 65 72 6e 65 6c 20 63 61 6c /* kernel cal
a770: 6c 20 60 63 61 63 68 65 63 74 6c 27 20 2a 2f 0a l `cachectl' */.
a780: 20 20 20 20 20 20 3a 0a 20 20 20 20 20 20 3a 20 :. :
a790: 22 61 22 20 28 5f 62 65 67 29 2c 20 22 64 22 20 "a" (_beg), "d"
a7a0: 28 5f 6c 65 6e 29 0a 20 20 20 20 20 20 3a 20 22 (_len). : "
a7b0: 25 61 30 22 2c 20 22 25 61 31 22 2c 20 22 25 64 %a0", "%a1", "%d
a7c0: 30 22 2c 20 22 25 64 31 22 20 20 20 20 2f 2a 20 0", "%d1" /*
a7d0: 63 61 6c 6c 2d 75 73 65 64 20 72 65 67 69 73 74 call-used regist
a7e0: 65 72 73 20 2a 2f 0a 20 20 20 20 20 20 29 3b 0a ers */. );.
a7f0: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 }.#endif.#if d
a800: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f efined(__linux__
a810: 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 47 ) && defined(__G
a820: 4e 55 43 5f 5f 29 0a 20 20 7b 20 72 65 67 69 73 NUC__). { regis
a830: 74 65 72 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e ter unsigned lon
a840: 67 20 5f 62 65 67 20 5f 5f 61 73 6d 5f 5f 20 28 g _beg __asm__ (
a850: 22 25 64 31 22 29 20 3d 20 28 75 6e 73 69 67 6e "%d1") = (unsign
a860: 65 64 20 6c 6f 6e 67 29 20 66 75 6e 63 74 69 6f ed long) functio
a870: 6e 3b 0a 20 20 20 20 72 65 67 69 73 74 65 72 20 n;. register
a880: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 5f 6c unsigned long _l
a890: 65 6e 20 5f 5f 61 73 6d 5f 5f 20 28 22 25 64 34 en __asm__ ("%d4
a8a0: 22 29 20 3d 20 54 52 41 4d 50 5f 4c 45 4e 47 54 ") = TRAMP_LENGT
a8b0: 48 20 2b 20 33 32 3b 0a 20 20 20 20 5f 5f 61 73 H + 32;. __as
a8c0: 6d 5f 5f 20 5f 5f 76 6f 6c 61 74 69 6c 65 5f 5f m__ __volatile__
a8d0: 20 28 0a 20 20 20 20 20 20 22 6d 6f 76 65 25 2e (. "move%.
a8e0: 6c 20 25 23 31 32 33 2c 25 2f 64 30 5c 6e 5c 74 l %#123,%/d0\n\t
a8f0: 22 0a 20 20 20 20 20 20 22 6d 6f 76 65 25 2e 6c ". "move%.l
a900: 20 25 23 31 2c 25 2f 64 32 5c 6e 5c 74 22 0a 20 %#1,%/d2\n\t".
a910: 20 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 "move%.l %#
a920: 33 2c 25 2f 64 33 5c 6e 5c 74 22 0a 20 20 20 20 3,%/d3\n\t".
a930: 20 20 22 74 72 61 70 20 25 23 30 22 0a 20 20 20 "trap %#0".
a940: 20 20 20 3a 0a 20 20 20 20 20 20 3a 20 22 64 22 :. : "d"
a950: 20 28 5f 62 65 67 29 2c 20 22 64 22 20 28 5f 6c (_beg), "d" (_l
a960: 65 6e 29 0a 20 20 20 20 20 20 3a 20 22 25 64 30 en). : "%d0
a970: 22 2c 20 22 25 64 32 22 2c 20 22 25 64 33 22 0a ", "%d2", "%d3".
a980: 20 20 20 20 20 20 29 3b 0a 20 20 7d 0a 23 65 6e );. }.#en
a990: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 dif.#if defined(
a9a0: 41 55 58 29 20 26 26 20 64 65 66 69 6e 65 64 28 AUX) && defined(
a9b0: 5f 5f 47 4e 55 43 5f 5f 29 0a 20 20 2f 2a 20 73 __GNUC__). /* s
a9c0: 79 73 6d 36 38 6b 28 31 30 35 2c 20 61 64 64 72 ysm68k(105, addr
a9d0: 2c 20 73 63 6f 70 65 2c 20 63 61 63 68 65 2c 20 , scope, cache,
a9e0: 6c 65 6e 29 20 2a 2f 0a 20 20 5f 5f 61 73 6d 5f len) */. __asm_
a9f0: 5f 20 5f 5f 76 6f 6c 61 74 69 6c 65 5f 5f 20 28 _ __volatile__ (
aa00: 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 31 . "move%.l %1
aa10: 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 ,%/sp@-\n\t".
aa20: 20 22 6d 6f 76 65 25 2e 6c 20 25 23 33 2c 25 2f "move%.l %#3,%/
aa30: 73 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 20 22 6d sp@-\n\t". "m
aa40: 6f 76 65 25 2e 6c 20 25 23 31 2c 25 2f 73 70 40 ove%.l %#1,%/sp@
aa50: 2d 5c 6e 5c 74 22 0a 20 20 20 20 22 6d 6f 76 65 -\n\t". "move
aa60: 25 2e 6c 20 25 30 2c 25 2f 73 70 40 2d 5c 6e 5c %.l %0,%/sp@-\n\
aa70: 74 22 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 t". "move%.l
aa80: 25 23 31 30 35 2c 25 2f 73 70 40 2d 5c 6e 5c 74 %#105,%/sp@-\n\t
aa90: 22 0a 20 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 ". "move%.l %
aaa0: 23 30 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 #0,%/sp@-\n\t".
aab0: 20 20 20 22 6d 6f 76 65 25 2e 6c 20 25 23 33 38 "move%.l %#38
aac0: 2c 25 2f 73 70 40 2d 5c 6e 5c 74 22 0a 20 20 20 ,%/sp@-\n\t".
aad0: 20 22 74 72 61 70 20 25 23 30 5c 6e 5c 74 22 0a "trap %#0\n\t".
aae0: 20 20 20 20 22 61 64 64 25 2e 6c 20 25 23 32 34 "add%.l %#24
aaf0: 2c 25 2f 73 70 22 0a 20 20 20 20 3a 0a 20 20 20 ,%/sp". :.
ab00: 20 3a 20 22 72 22 20 28 66 75 6e 63 74 69 6f 6e : "r" (function
ab10: 29 2c 20 22 67 22 20 28 28 69 6e 74 29 54 52 41 ), "g" ((int)TRA
ab20: 4d 50 5f 4c 45 4e 47 54 48 29 0a 20 20 20 20 3a MP_LENGTH). :
ab30: 20 22 25 64 30 22 0a 20 20 20 20 29 3b 0a 23 65 "%d0". );.#e
ab40: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 ndif.#endif.#if
ab50: 64 65 66 69 6e 65 64 28 5f 5f 6d 69 70 73 5f 5f defined(__mips__
ab60: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 6d ) || defined(__m
ab70: 69 70 73 6e 33 32 5f 5f 29 20 7c 7c 20 64 65 66 ipsn32__) || def
ab80: 69 6e 65 64 28 5f 5f 6d 69 70 73 36 34 5f 5f 29 ined(__mips64__)
ab90: 0a 20 20 63 61 63 68 65 66 6c 75 73 68 28 66 75 . cacheflush(fu
aba0: 6e 63 74 69 6f 6e 2c 54 52 41 4d 50 5f 4c 45 4e nction,TRAMP_LEN
abb0: 47 54 48 2c 49 43 41 43 48 45 29 3b 0a 20 20 2f GTH,ICACHE);. /
abc0: 2a 20 67 66 6f 72 74 68 2d 30 2e 33 2e 30 20 75 * gforth-0.3.0 u
abd0: 73 65 73 20 42 43 41 43 48 45 20 69 6e 73 74 65 ses BCACHE inste
abe0: 61 64 20 6f 66 20 49 43 41 43 48 45 2e 20 57 68 ad of ICACHE. Wh
abf0: 79 3f 3f 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 y?? */.#endif.#i
ac00: 66 20 64 65 66 69 6e 65 64 28 5f 5f 73 70 61 72 f defined(__spar
ac10: 63 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 c__) || defined(
ac20: 5f 5f 73 70 61 72 63 36 34 5f 5f 29 0a 20 20 2f __sparc64__). /
ac30: 2a 20 54 68 69 73 20 61 73 73 75 6d 65 73 20 74 * This assumes t
ac40: 68 61 74 20 74 68 65 20 74 72 61 6d 70 6f 6c 69 hat the trampoli
ac50: 6e 65 20 66 69 74 73 20 69 6e 20 61 74 20 6d 6f ne fits in at mo
ac60: 73 74 20 66 6f 75 72 20 63 61 63 68 65 20 6c 69 st four cache li
ac70: 6e 65 73 2e 20 2a 2f 0a 20 20 5f 5f 54 52 5f 63 nes. */. __TR_c
ac80: 6c 65 61 72 5f 63 61 63 68 65 5f 34 28 66 75 6e lear_cache_4(fun
ac90: 63 74 69 6f 6e 2c 66 75 6e 63 74 69 6f 6e 2b 54 ction,function+T
aca0: 52 41 4d 50 5f 4c 45 4e 47 54 48 2d 31 29 3b 0a RAMP_LENGTH-1);.
acb0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f #endif.#ifdef __
acc0: 61 6c 70 68 61 5f 5f 0a 20 20 5f 5f 54 52 5f 63 alpha__. __TR_c
acd0: 6c 65 61 72 5f 63 61 63 68 65 28 29 3b 0a 23 65 lear_cache();.#e
ace0: 6e 64 69 66 0a 23 69 66 64 65 66 20 5f 5f 68 70 ndif.#ifdef __hp
acf0: 70 61 5f 5f 0a 20 20 2f 2a 20 54 68 69 73 20 61 pa__. /* This a
ad00: 73 73 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 ssumes that the
ad10: 74 72 61 6d 70 6f 6c 69 6e 65 20 66 69 74 73 20 trampoline fits
ad20: 69 6e 20 61 74 20 6d 6f 73 74 20 74 77 6f 20 63 in at most two c
ad30: 61 63 68 65 20 6c 69 6e 65 73 2e 20 2a 2f 0a 20 ache lines. */.
ad40: 20 5f 5f 54 52 5f 63 6c 65 61 72 5f 63 61 63 68 __TR_clear_cach
ad50: 65 28 66 75 6e 63 74 69 6f 6e 2c 66 75 6e 63 74 e(function,funct
ad60: 69 6f 6e 2b 54 52 41 4d 50 5f 4c 45 4e 47 54 48 ion+TRAMP_LENGTH
ad70: 2d 31 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 -1);.#endif.#ifd
ad80: 65 66 20 5f 5f 61 72 6d 5f 5f 0a 20 20 5f 5f 54 ef __arm__. __T
ad90: 52 5f 63 6c 65 61 72 5f 63 61 63 68 65 28 66 75 R_clear_cache(fu
ada0: 6e 63 74 69 6f 6e 2c 66 75 6e 63 74 69 6f 6e 2b nction,function+
adb0: 54 52 41 4d 50 5f 4c 45 4e 47 54 48 29 3b 0a 23 TRAMP_LENGTH);.#
adc0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 endif.#if define
add0: 64 28 5f 5f 70 6f 77 65 72 70 63 5f 5f 29 20 26 d(__powerpc__) &
ade0: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 70 6f 77 & !defined(__pow
adf0: 65 72 70 63 36 34 5f 5f 29 0a 20 20 5f 5f 54 52 erpc64__). __TR
ae00: 5f 63 6c 65 61 72 5f 63 61 63 68 65 28 66 75 6e _clear_cache(fun
ae10: 63 74 69 6f 6e 29 3b 0a 23 65 6e 64 69 66 0a 23 ction);.#endif.#
ae20: 69 66 64 65 66 20 5f 5f 6d 38 38 6b 5f 5f 0a 20 ifdef __m88k__.
ae30: 20 73 79 73 6d 6f 74 28 53 38 38 43 41 43 48 45 sysmot(S88CACHE
ae40: 46 4c 55 53 48 50 41 47 45 2c 20 28 75 6e 73 69 FLUSHPAGE, (unsi
ae50: 67 6e 65 64 20 6c 6f 6e 67 29 66 75 6e 63 74 69 gned long)functi
ae60: 6f 6e 20 26 20 2d 70 61 67 65 73 69 7a 65 29 3b on & -pagesize);
ae70: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 5f .#endif.#ifdef _
ae80: 5f 63 6f 6e 76 65 78 5f 5f 0a 20 20 5f 5f 54 52 _convex__. __TR
ae90: 5f 63 6c 65 61 72 5f 63 61 63 68 65 28 29 3b 0a _clear_cache();.
aea0: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 20 #endif.#endif..
aeb0: 20 2f 2a 20 35 2e 20 52 65 74 75 72 6e 2e 20 2a /* 5. Return. *
aec0: 2f 0a 20 20 72 65 74 75 72 6e 20 28 5f 5f 54 52 /. return (__TR
aed0: 5f 66 75 6e 63 74 69 6f 6e 29 20 28 66 75 6e 63 _function) (func
aee0: 74 69 6f 6e 20 2b 20 54 52 41 4d 50 5f 42 49 41 tion + TRAMP_BIA
aef0: 53 29 3b 0a 7d 0a 0a 76 6f 69 64 20 66 72 65 65 S);.}..void free
af00: 5f 74 72 61 6d 70 6f 6c 69 6e 65 20 28 5f 5f 54 _trampoline (__T
af10: 52 5f 66 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74 R_function funct
af20: 69 6f 6e 29 0a 7b 0a 23 69 66 20 54 52 41 4d 50 ion).{.#if TRAMP
af30: 5f 42 49 41 53 0a 20 20 66 75 6e 63 74 69 6f 6e _BIAS. function
af40: 20 3d 20 28 5f 5f 54 52 5f 66 75 6e 63 74 69 6f = (__TR_functio
af50: 6e 29 28 28 63 68 61 72 2a 29 66 75 6e 63 74 69 n)((char*)functi
af60: 6f 6e 20 2d 20 54 52 41 4d 50 5f 42 49 41 53 29 on - TRAMP_BIAS)
af70: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 ;.#endif.#if !de
af80: 66 69 6e 65 64 28 43 4f 44 45 5f 45 58 45 43 55 fined(CODE_EXECU
af90: 54 41 42 4c 45 29 20 26 26 20 21 64 65 66 69 6e TABLE) && !defin
afa0: 65 64 28 45 58 45 43 55 54 41 42 4c 45 5f 56 49 ed(EXECUTABLE_VI
afb0: 41 5f 4d 50 52 4f 54 45 43 54 29 0a 20 20 2a 28 A_MPROTECT). *(
afc0: 63 68 61 72 2a 2a 29 66 75 6e 63 74 69 6f 6e 20 char**)function
afd0: 3d 20 66 72 65 65 6c 69 73 74 3b 20 66 72 65 65 = freelist; free
afe0: 6c 69 73 74 20 3d 20 28 63 68 61 72 2a 29 66 75 list = (char*)fu
aff0: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 49 74 20 nction;. /* It
b000: 69 73 20 70 72 6f 62 61 62 6c 79 20 6e 6f 74 20 is probably not
b010: 77 6f 72 74 68 20 63 61 6c 6c 69 6e 67 20 6d 75 worth calling mu
b020: 6e 6d 61 70 28 29 20 66 6f 72 20 65 6e 74 69 72 nmap() for entir
b030: 65 6c 79 20 66 72 65 65 64 20 70 61 67 65 73 2e ely freed pages.
b040: 20 2a 2f 0a 23 65 6c 73 65 0a 20 20 66 72 65 65 */.#else. free
b050: 28 28 28 63 68 61 72 2a 2a 29 66 75 6e 63 74 69 (((char**)functi
b060: 6f 6e 29 5b 2d 31 5d 29 3b 0a 23 65 6e 64 69 66 on)[-1]);.#endif
b070: 0a 7d 0a 0a 69 6e 74 20 69 73 5f 74 72 61 6d 70 .}..int is_tramp
b080: 6f 6c 69 6e 65 20 28 76 6f 69 64 2a 20 66 75 6e oline (void* fun
b090: 63 74 69 6f 6e 29 0a 7b 0a 23 69 66 64 65 66 20 ction).{.#ifdef
b0a0: 69 73 5f 74 72 61 6d 70 0a 23 69 66 64 65 66 20 is_tramp.#ifdef
b0b0: 5f 5f 68 70 70 61 6e 65 77 5f 5f 0a 20 20 76 6f __hppanew__. vo
b0c0: 69 64 2a 20 74 72 61 6d 70 5f 61 64 64 72 65 73 id* tramp_addres
b0d0: 73 20 3d 20 26 74 72 61 6d 70 3b 0a 20 20 69 66 s = &tramp;. if
b0e0: 20 28 21 28 28 28 6c 6f 6e 67 29 66 75 6e 63 74 (!(((long)funct
b0f0: 69 6f 6e 20 26 20 33 29 20 3d 3d 20 28 54 52 41 ion & 3) == (TRA
b100: 4d 50 5f 42 49 41 53 20 26 20 33 29 29 29 20 72 MP_BIAS & 3))) r
b110: 65 74 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a eturn 0;.#endif.
b120: 20 20 72 65 74 75 72 6e 20 28 28 69 73 5f 74 72 return ((is_tr
b130: 61 6d 70 28 28 28 63 68 61 72 2a 29 66 75 6e 63 amp(((char*)func
b140: 74 69 6f 6e 20 2d 20 54 52 41 4d 50 5f 42 49 41 tion - TRAMP_BIA
b150: 53 29 29 29 20 3f 20 31 20 3a 20 30 29 3b 0a 23 S))) ? 1 : 0);.#
b160: 65 6c 73 65 0a 20 20 61 62 6f 72 74 28 29 3b 0a else. abort();.
b170: 23 65 6e 64 69 66 0a 7d 0a 0a 5f 5f 54 52 5f 66 #endif.}..__TR_f
b180: 75 6e 63 74 69 6f 6e 20 74 72 61 6d 70 6f 6c 69 unction trampoli
b190: 6e 65 5f 61 64 64 72 65 73 73 20 28 76 6f 69 64 ne_address (void
b1a0: 2a 20 66 75 6e 63 74 69 6f 6e 29 0a 7b 0a 23 69 * function).{.#i
b1b0: 66 64 65 66 20 74 72 61 6d 70 5f 61 64 64 72 65 fdef tramp_addre
b1c0: 73 73 0a 20 20 72 65 74 75 72 6e 20 28 5f 5f 54 ss. return (__T
b1d0: 52 5f 66 75 6e 63 74 69 6f 6e 29 28 74 72 61 6d R_function)(tram
b1e0: 70 5f 61 64 64 72 65 73 73 28 28 28 63 68 61 72 p_address(((char
b1f0: 2a 29 66 75 6e 63 74 69 6f 6e 20 2d 20 54 52 41 *)function - TRA
b200: 4d 50 5f 42 49 41 53 29 29 29 3b 0a 23 65 6c 73 MP_BIAS)));.#els
b210: 65 0a 20 20 61 62 6f 72 74 28 29 3b 0a 23 65 6e e. abort();.#en
b220: 64 69 66 0a 7d 0a 0a 76 6f 69 64 2a 20 74 72 61 dif.}..void* tra
b230: 6d 70 6f 6c 69 6e 65 5f 76 61 72 69 61 62 6c 65 mpoline_variable
b240: 20 28 76 6f 69 64 2a 20 66 75 6e 63 74 69 6f 6e (void* function
b250: 29 0a 7b 0a 23 69 66 64 65 66 20 74 72 61 6d 70 ).{.#ifdef tramp
b260: 5f 76 61 72 69 61 62 6c 65 0a 20 20 72 65 74 75 _variable. retu
b270: 72 6e 20 28 76 6f 69 64 2a 29 28 74 72 61 6d 70 rn (void*)(tramp
b280: 5f 76 61 72 69 61 62 6c 65 28 28 28 63 68 61 72 _variable(((char
b290: 2a 29 66 75 6e 63 74 69 6f 6e 20 2d 20 54 52 41 *)function - TRA
b2a0: 4d 50 5f 42 49 41 53 29 29 29 3b 0a 23 65 6c 73 MP_BIAS)));.#els
b2b0: 65 0a 20 20 61 62 6f 72 74 28 29 3b 0a 23 65 6e e. abort();.#en
b2c0: 64 69 66 0a 7d 0a 0a 76 6f 69 64 2a 20 74 72 61 dif.}..void* tra
b2d0: 6d 70 6f 6c 69 6e 65 5f 64 61 74 61 20 28 76 6f mpoline_data (vo
b2e0: 69 64 2a 20 66 75 6e 63 74 69 6f 6e 29 0a 7b 0a id* function).{.
b2f0: 23 69 66 64 65 66 20 74 72 61 6d 70 5f 64 61 74 #ifdef tramp_dat
b300: 61 0a 20 20 72 65 74 75 72 6e 20 28 76 6f 69 64 a. return (void
b310: 2a 29 28 74 72 61 6d 70 5f 64 61 74 61 28 28 28 *)(tramp_data(((
b320: 63 68 61 72 2a 29 66 75 6e 63 74 69 6f 6e 20 2d char*)function -
b330: 20 54 52 41 4d 50 5f 42 49 41 53 29 29 29 3b 0a TRAMP_BIAS)));.
b340: 23 65 6c 73 65 0a 20 20 61 62 6f 72 74 28 29 3b #else. abort();
b350: 0a 23 65 6e 64 69 66 0a 7d 0a .#endif.}.