home *** CD-ROM | disk | FTP | other *** search
/ Serving the Web / ServingTheWeb1995.disc1of1.iso / linux / slacksrce / d / libc / libc-4.6 / libc-4 / libc-linux / elf / d-link.old / hash.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-10-20  |  1.9 KB  |  70 lines

  1. struct dyn_elf{
  2.   struct elf_resolve * dyn;
  3.   struct dyn_elf * next_handle;  /* Used by dlopen et al. */
  4.   struct dyn_elf * next;
  5. };
  6.  
  7. struct elf_resolve{
  8.   struct elf_resolve * next;
  9.   char * libname;
  10.   enum {elf_lib, elf_executable,program_interpreter, loaded_file} libtype;
  11.   struct dyn_elf * symbol_scope;
  12.   unsigned short usage_count;
  13.   unsigned short int init_flag;
  14.   unsigned int nbucket;
  15.   unsigned int * elf_buckets;
  16.   /*
  17.    * These are only used with ELF style shared libraries
  18.    */
  19.   unsigned int nchain;
  20.   unsigned int * chains;
  21.   char * loadaddr;
  22.   unsigned int dynamic_info[24];
  23.  
  24.   unsigned int dynamic_addr;
  25.   unsigned int dynamic_size;
  26.   unsigned int n_phent;
  27.   struct elf_phdr * ppnt;
  28. };
  29.  
  30. #define COPY_RELOCS_DONE 1
  31. #define RELOCS_DONE 2
  32. #define JMP_RELOCS_DONE 4
  33.  
  34. extern struct dyn_elf     * _dl_symbol_tables;
  35. extern struct elf_resolve * _dl_loaded_modules;
  36.  
  37. extern struct elf_resolve * _dl_check_hashed_files(char * libname);
  38. extern struct elf_resolve * _dl_add_elf_hash_table(char * libname, 
  39.                            char * loadaddr, 
  40.                            unsigned int * dynamic_info, 
  41.                            unsigned int dynamic_addr, 
  42.                            unsigned int dynamic_size);
  43. extern char * _dl_find_hash(char * name, struct dyn_elf * rpnt1, 
  44.             unsigned int instr_addr, struct elf_resolve * f_tpnt);
  45.  
  46. extern int _dl_linux_dynamic_link(void);
  47.  
  48. #define SEND_STDERR(X) _dl_write(2, X, strlen(X));
  49. extern int _dl_write(int, const char *, int);
  50. extern char * _dl_library_path;
  51. extern char * _dl_not_lazy;
  52. extern char * _dl_strdup(const char *);
  53. extern inline int _dl_symbol(char * name);
  54. unsigned long _dl_elf_hash(const char * name);
  55.  
  56. extern inline int _dl_symbol(char * name)
  57. {
  58.   if(name[0] != '_' || name[1] != 'd' || name[2] != 'l' || name[3] != '_')
  59.     return 0;
  60.   return 1;
  61. }
  62.  
  63. #define DL_ERROR_NOFILE 1
  64. #define DL_ERROR_NONULL 2
  65. #define DL_ERROR_NOTELF 3
  66. #define DL_ERROR_NOTMAGIC 4
  67. #define DL_ERROR_NOTDYN 5
  68. #define DL_ERROR_MMAP_FAILED 6
  69. #define DL_ERROR_NODYNAMIC 7
  70.