home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / uccs / root.14 / udk / usr / include / link.h < prev    next >
C/C++ Source or Header  |  1998-08-19  |  4KB  |  115 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. #ifndef _LINK_H
  12. #define _LINK_H
  13. #ident    "@(#)sgs-head:i386/head/link.h    1.17"
  14.  
  15. #include <sys/elftypes.h>
  16.  
  17. /* declarations for structures contained in the dynamic
  18.  * section of executable files and shared objects
  19.  */
  20.  
  21. /* The following data structure provides a self-identifying
  22.  * union consisting of a tag from a known list and a value.
  23.  */
  24.  
  25. typedef struct {
  26.     Elf32_Sword d_tag;        /* how to interpret value */
  27.     union {
  28.         Elf32_Word    d_val;
  29.         Elf32_Addr    d_ptr;
  30.         Elf32_Off    d_off;
  31.     } d_un;
  32. } Elf32_Dyn;
  33.  
  34. /* valid tag values */
  35.  
  36. #define    DT_NULL        0    /* last entry in list */
  37. #define    DT_NEEDED    1    /* list of needed objects */
  38. #define    DT_PLTRELSZ    2    /* size of relocations for the PLT */
  39. #define    DT_PLTGOT    3    /* addresses used by procedure linkage table */
  40. #define    DT_HASH        4    /* hash table */
  41. #define    DT_STRTAB    5    /* string table */
  42. #define    DT_SYMTAB    6    /* symbol table */
  43. #define    DT_RELA        7    /* addr of relocation entries */
  44. #define    DT_RELASZ    8    /* size of relocation table */
  45. #define    DT_RELAENT    9    /* base size of relocation entry */
  46. #define    DT_STRSZ    10    /* size of string table */
  47. #define    DT_SYMENT    11    /* size of symbol table entry */
  48. #define    DT_INIT        12    /* _init addr */
  49. #define    DT_FINI        13    /* _fini addr */
  50. #define    DT_SONAME    14    /* name of this shared object */
  51. #define    DT_RPATH    15    /* run-time search path */
  52. #define DT_SYMBOLIC    16    /* shared object linked -Bsymbolic */
  53. #define    DT_REL        17    /* addr of relocation entries */
  54. #define    DT_RELSZ    18    /* size of relocation table */
  55. #define    DT_RELENT    19    /* base size of relocation entry */
  56. #define    DT_PLTREL    20    /* relocation type for PLT entry */
  57. #define    DT_DEBUG    21    /* pointer to r_debug structure */
  58. #define    DT_TEXTREL    22    /* text relocations for this object */
  59. #define DT_JMPREL    23    /* pointer to the PLT relocation entries */
  60. #define DT_BIND_NOW    24    /* object linked with -Bbind_now */
  61.  
  62. #define    DT_FPATH    (-1)    /* pathname of file to be opened */
  63. #define    DT_MODE        (-2)    /* function binding mode */
  64. #define    DT_MAP        (-3)    /* pointer to link_map */
  65. #define    DT_MAP_NODELETE    (-4)    /* pointer to link_map */
  66.  
  67. #define DT_MAXPOSTAGS    25    /* number of positive tags */
  68. #define DT_MAXNEGTAGS    4    /* number of negative tags */
  69.  
  70. #define DT_LOPROC    0x70000000    /* processor specific range */
  71. #define DT_HIPROC    0x7fffffff
  72.  
  73. #define DT_RANGES    0x50000000    /* addr of eh_ranges entries */
  74. #define DT_RANGES_SZ    0x50000001    /* sz of eh_ranges entries */
  75. #define DT_DELAY_REL    0x50000002    /* addr of delayed relocs */
  76. #define DT_DELAY_RELSZ    0x50000003    /* size of delayed reloc table */
  77. #define DT_DELAY_RELENT    0x50000004    /* size of delayed relocs entries*/
  78.  
  79.  
  80.  
  81. /* public structure defined and maintained within the run-time 
  82.  * linker
  83.  */
  84.  
  85. struct link_map {
  86.     unsigned long    l_addr;        /* address at which object is mapped */
  87.     char        *l_name;    /* full name of loaded object */
  88.     Elf32_Dyn    *l_ld;        /* dynamic structure of object */
  89.     struct link_map    *l_next;    /* next link object */
  90.     struct link_map    *l_prev;    /* previous link object */
  91.     unsigned long    l_tstart;    /* vaddr of first RO-exec segment */
  92.     unsigned long    l_tsize;    /* size of first RO-exec segment */
  93.     void        *l_eh_ranges;    /* address of eh_ranges section */
  94.     unsigned long    l_eh_ranges_sz;    /* size of eh_ranges section */
  95. };
  96.  
  97. enum _r_state { 
  98.     RT_CONSISTENT, 
  99.     RT_ADD, 
  100.     RT_DELETE, 
  101.     RT_ALTERNATE_RTLD,
  102.     RT_SYMBOLS_AVAILABLE,
  103.     RT_SYSTEM_INIT,
  104. };
  105.  
  106. struct r_debug {
  107.     int        r_version;    /* debugging info version no. */
  108.     struct link_map    *r_map;        /* address of link_map */
  109.     unsigned long    r_brk;        /* address of update routine */
  110.     enum _r_state    r_state;    /* current state of map */
  111.     unsigned long    r_ldbase;    /* base addr of ld.so */
  112. };
  113.  
  114. #endif /*_LINK_H*/
  115.