home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.14 / udk / usr / include / reloc.h < prev    next >
C/C++ Source or Header  |  1998-08-19  |  5KB  |  195 lines

  1. /*
  2.  * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3.  *                                                                         
  4.  *        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5.  *                   SANTA CRUZ OPERATION INC.                             
  6.  *                                                                         
  7.  *   The copyright notice above does not evidence any actual or intended   
  8.  *   publication of such source code.                                      
  9.  */
  10.  
  11. #ident    "@(#)sgs-head:i386/head/reloc.h    2.7.2.1"
  12.  
  13. #ifndef _RELOC_H
  14. #define _RELOC_H
  15.  
  16. struct reloc {
  17.     long    r_vaddr;    /* (virtual) address of reference */
  18.     long    r_symndx;    /* index into symbol table */
  19.     unsigned short    r_type;        /* relocation type */
  20.     };
  21.  
  22. /*
  23.  *   relocation types for all products and generics
  24.  */
  25.  
  26. /*
  27.  * All generics
  28.  *    reloc. already performed to symbol in the same section
  29.  */
  30. #define  R_ABS        0
  31.  
  32. /*
  33.  * X86 generic
  34.  *    8-bit offset reference in 8-bits
  35.  *    8-bit offset reference in 16-bits 
  36.  *    12-bit segment reference
  37.  *    auxiliary relocation entry
  38.  */
  39. #define    R_OFF8        07
  40. #define R_OFF16        010
  41. #define    R_SEG12        011
  42. #define    R_AUX        013
  43.  
  44. /*
  45.  * B16 and X86 generics
  46.  *    16-bit direct reference
  47.  *    16-bit "relative" reference
  48.  *    16-bit "indirect" (TV) reference
  49.  */
  50. #define  R_DIR16    01
  51. #define  R_REL16    02
  52. #define  R_IND16    03
  53.  
  54. /*
  55.  * 3B generic
  56.  *    24-bit direct reference
  57.  *    24-bit "relative" reference
  58.  *    16-bit optimized "indirect" TV reference
  59.  *    24-bit "indirect" TV reference
  60.  *    32-bit "indirect" TV reference
  61.  */
  62. #define  R_DIR24    04
  63. #define  R_REL24    05
  64. #define  R_OPT16    014
  65. #define  R_IND24    015
  66. #define  R_IND32    016
  67.  
  68. /*
  69.  * 3B and M32 generics
  70.  *    32-bit direct reference
  71.  */
  72. #define  R_DIR32    06
  73.  
  74. /*
  75.  * M32 generic
  76.  *    32-bit direct reference with bytes swapped
  77.  */
  78. #define  R_DIR32S    012
  79.  
  80. /*
  81.  * DEC Processors  VAX 11/780 and VAX 11/750
  82.  *
  83.  */
  84.  
  85. #define R_RELBYTE    017
  86. #define R_RELWORD    020
  87. #define R_RELLONG    021
  88. #define R_PCRBYTE    022
  89. #define R_PCRWORD    023
  90. #define R_PCRLONG    024
  91.  
  92. /*
  93.  * Motorola 68000
  94.  *
  95.  * ... uses R_RELBYTE, R_RELWORD, R_RELLONG, R_PCRBYTE and R_PCRWORD as for
  96.  * DEC machines above.
  97.  */
  98.  
  99. #define    RELOC    struct reloc
  100. #define    RELSZ    sizeof(RELOC)    /* was 10 */
  101.  
  102. /*
  103.  * Motorola 88000 (Risc architecture) as defined in OCS 1.0
  104.  *
  105.  * Since AT&T has no "hot-line" to call to request reservation of new
  106.  * relocation types, these numbers were pulled out of thin air.  Also,
  107.  * since there is no definitive specification about what the existing
  108.  * values mean we do not use any of them.  The syntax of the entries
  109.  * is:
  110.  *
  111.  *    R_[H|L]<VRT|PCR><8|16|26|32>[L]
  112.  *
  113.  * where:
  114.  *
  115.  *    []    means optional fields
  116.  *    <>    mandatory fields, select one
  117.  *    |    alternation, select one
  118.  *    H    use the high 16 bits of symbol's virtual address
  119.  *    L    use the low 16 bits of symbol's virtual address
  120.  *    VRT    use the symbol's virtual address
  121.  *    PCR    use symbol's virtual address minus value of PC
  122.  *
  123.  * Currently used relocation types are:
  124.  *
  125.  * R_PCR16L
  126.  *
  127.  *    PC relative, 16 bits of the 16 bit field at offset r_vaddr, longword
  128.  *    aligned.  I.E., the 16 bits represent the top 16 bits of an 18 bit
  129.  *    byte offset from the current PC.
  130.  *
  131.  * R_PCR26L
  132.  *
  133.  *    PC relative, lower 26 bits of the 32 bit field at offset r_vaddr,
  134.  *    longword aligned.  I.E., the 26 bits represent the top 26 bits of
  135.  *    a 28 bit byte offset from the current PC.
  136.  *
  137.  * R_VRT16
  138.  *
  139.  *    Reference to a symbol at an absolute address in the virtual address
  140.  *    space, 16 bits of the 16 bit field at offset r_vaddr.  If the
  141.  *    relocation value will not fit in 16 bits an error or warning
  142.  *    is generated and zero is used as the relocation value.
  143.  *
  144.  * R_HVRT16
  145.  *
  146.  *    Same as R_VRT16 except that the high 16 bits of the absolute address
  147.  *    are used as the relocation value.
  148.  *
  149.  * R_LVRT16
  150.  *
  151.  *    Same as R_VRT16 except that the low 16 bits of the absolute address
  152.  *    are used as the relocation value and it is not an error to have
  153.  *    overflow.
  154.  *
  155.  * R_VRT32
  156.  *
  157.  *    Reference to a symbol at an absolute address in the virtual address
  158.  *    space, 32 bits of the 32 bit field at offset r_vaddr.
  159.  *
  160.  */
  161.  
  162. #define    R_PCR16L    128
  163. #define    R_PCR26L    129
  164. #define    R_VRT16        130
  165. #define    R_HVRT16    131
  166. #define    R_LVRT16    132
  167. #define    R_VRT32        133
  168.  
  169.     /* Definition of a "TV" relocation type */
  170.  
  171. #if defined(__STDC__)
  172.  
  173. #if #machine(N3B)
  174. #define ISTVRELOC(x)    ((x==R_OPT16)||(x==R_IND24)||(x==R_IND32))
  175. #elif #machine(B16) || #machine(X86)
  176. #define ISTVRELOC(x)    (x==R_IND16)
  177. #else
  178. #define ISTVRELOC(x)    (x!=x)    /* never the case */
  179. #endif
  180.  
  181. #else
  182. #if N3B
  183. #define ISTVRELOC(x)    ((x==R_OPT16)||(x==R_IND24)||(x==R_IND32))
  184. #endif
  185. #if B16 || X86
  186. #define ISTVRELOC(x)    (x==R_IND16)
  187. #endif
  188. #if M32
  189. #define ISTVRELOC(x)    (x!=x)    /* never the case */
  190. #endif
  191.  
  192. #endif     /* __STDC__ */
  193.  
  194. #endif     /* _RELOC_H */
  195.