Artifact e0267b9acfae9ebf586175dba882e4a7dbc43341:


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.}.