Diff for /src/libexec/rtld-aout/Attic/rtld.c between versions 1.2 and 1.3

version 1.2, 2003/06/17 04:27:08 version 1.3, 2003/11/14 03:54:31
Line 28 Line 28
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *   *
  * $FreeBSD: src/libexec/rtld-aout/rtld.c,v 1.58.2.2 2002/03/04 12:00:31 dwmalone Exp $   * $FreeBSD: src/libexec/rtld-aout/rtld.c,v 1.58.2.2 2002/03/04 12:00:31 dwmalone Exp $
  * $DragonFly: src/libexec/rtld-aout/rtld.c,v 1.1 2003/06/16 05:00:06 dillon Exp $   * $DragonFly$
  */   */
   
 #include <sys/param.h>  #include <sys/param.h>
Line 203  struct so_map  *link_map_head; Line 203  struct so_map  *link_map_head;
 struct so_map           *link_map_tail;  struct so_map           *link_map_tail;
 struct rt_symbol        *rt_symbol_head;  struct rt_symbol        *rt_symbol_head;
   
 static void             *__dlopen __P((const char *, int));  static void             *__dlopen (const char *, int);
 static int              __dlclose __P((void *));  static int              __dlclose (void *);
 static void             *__dlsym __P((void *, const char *));  static void             *__dlsym (void *, const char *);
 static const char       *__dlerror __P((void));  static const char       *__dlerror (void);
 static void             __dlexit __P((void));  static void             __dlexit (void);
 static void             *__dlsym3 __P((void *, const char *, void *));  static void             *__dlsym3 (void *, const char *, void *);
 static int              __dladdr __P((const void *, Dl_info *));  static int              __dladdr (const void *, Dl_info *);
   
 static struct ld_entry  ld_entry = {  static struct ld_entry  ld_entry = {
         __dlopen, __dlclose, __dlsym, __dlerror, __dlexit, __dlsym3, __dladdr          __dlopen, __dlclose, __dlsym, __dlerror, __dlexit, __dlsym3, __dladdr
 };  };
   
        void             xprintf __P((char *, ...));         void             xprintf (char *, ...);
 static struct so_map    *map_object __P((       const char *,  static struct so_map    *map_object (   const char *,
                                                 struct sod *,                                                  struct sod *,
                                                 struct so_map *));                                                  struct so_map *);
 static int              map_preload __P((void));  static int              map_preload (void);
 static int              map_sods __P((struct so_map *));  static int              map_sods (struct so_map *);
 static int              reloc_dag __P((struct so_map *, int));  static int              reloc_dag (struct so_map *, int);
 static void             unmap_object __P((struct so_map *, int));  static void             unmap_object (struct so_map     *, int);
 static struct so_map    *alloc_link_map __P((   const char *, struct sod *,  static struct so_map    *alloc_link_map (       const char *, struct sod *,
                                                 struct so_map *, caddr_t,                                                  struct so_map *, caddr_t,
                                                 struct _dynamic *));                                                  struct _dynamic *);
 static void             init_link_map __P((     struct so_map *,  static void             init_link_map ( struct so_map *,
                                                 struct somap_private *,                                                  struct somap_private *,
                                                 const char *, struct sod *,                                                  const char *, struct sod *,
                                                 struct so_map *, caddr_t,                                                  struct so_map *, caddr_t,
                                                 struct _dynamic *));                                                  struct _dynamic *);
 static void             free_link_map __P((struct so_map *));  static void             free_link_map (struct so_map *);
 static inline int       check_text_reloc __P((  struct relocation_info *,  static inline int       check_text_reloc (      struct relocation_info *,
                                                 struct so_map *,                                                  struct so_map *,
                                                 caddr_t));                                                  caddr_t);
 static int              reloc_map __P((struct so_map *, int));  static int              reloc_map (struct so_map *, int);
 static void             reloc_copy __P((struct so_map *));  static void             reloc_copy (struct so_map *);
 static void             init_dag __P((struct so_map *));  static void             init_dag (struct so_map *);
 static void             init_sods __P((struct so_list *));  static void             init_sods (struct so_list *);
 static void             init_internal_malloc __P((void));  static void             init_internal_malloc (void);
 static void             init_external_malloc __P((void));  static void             init_external_malloc (void);
 static int              call_map __P((struct so_map *, char *));  static int              call_map (struct so_map *, char *);
 static char             *findhint __P((char *, int, int *));  static char             *findhint (char *, int, int *);
 static char             *rtfindlib __P((char *, int, int, int));  static char             *rtfindlib (char *, int, int, int);
 static char             *rtfindfile __P((const char *));  static char             *rtfindfile (const char *);
 void                    binder_entry __P((void));  void                    binder_entry (void);
 long                    binder __P((jmpslot_t *));  long                    binder (jmpslot_t *);
 static struct nzlist    *lookup __P((char *, struct so_map **, int));  static struct nzlist    *lookup (char *, struct so_map **, int);
 static inline struct rt_symbol  *lookup_rts __P((char *, unsigned long));  static inline struct rt_symbol  *lookup_rts (char *, unsigned long);
 static struct nzlist    *lookup_in_obj __P((char *, unsigned long,  static struct nzlist    *lookup_in_obj (char *, unsigned long,
     struct so_map *, int));      struct so_map *, int);
 static struct rt_symbol *enter_rts __P((char *, unsigned long, long, int,  static struct rt_symbol *enter_rts (char *, unsigned long, long, int,
     caddr_t, long, struct so_map *));      caddr_t, long, struct so_map *);
 static void             *sym_addr __P((char *));  static void             *sym_addr (char *);
 static struct nzlist *  lookup_errno_hack(char *, struct so_map **, int);  static struct nzlist *  lookup_errno_hack(char *, struct so_map **, int);
 static void             die __P((void));  static void             die (void);
 static void             generror __P((char *, ...));  static void             generror (char *, ...);
 static int              maphints __P((void));  static int              maphints (void);
 static void             unmaphints __P((void));  static void             unmaphints (void);
 static void             ld_trace __P((struct so_map *));  static void             ld_trace (struct so_map *);
 static void             rt_readenv __P((void));  static void             rt_readenv (void);
 static int              hinthash __P((char *, int));  static int              hinthash (char *, int);
 int                     rtld __P((int, struct crt_ldso *, struct _dynamic *));  int                     rtld (int, struct crt_ldso *, struct _dynamic *);
   
 /*  /*
  * Compute a hash value for symbol tables.  Don't change this -- the   * Compute a hash value for symbol tables.  Don't change this -- the
Line 833  map_object(path, sodp, parent) Line 833  map_object(path, sodp, parent)
  * be gotten via dlerror().   * be gotten via dlerror().
  */   */
         static int          static int
 map_preload __P((void)) {  map_preload (void) {
         char    *ld_name = ld_preload;          char    *ld_name = ld_preload;
         char    *name;          char    *name;
   
Line 1754  static char   *hstrtab; Line 1754  static char   *hstrtab;
  * 0 on success, or -1 on failure.   * 0 on success, or -1 on failure.
  */   */
 static int  static int
 maphints __P((void))  maphints (void)
 {  {
         static int              hints_bad;      /* TRUE if hints are unusable */          static int              hints_bad;      /* TRUE if hints are unusable */
         static int              paths_added;          static int              paths_added;
Line 2254  __dlsym3(fd, sym, retaddr) Line 2254  __dlsym3(fd, sym, retaddr)
 }  }
   
 static const char *  static const char *
 __dlerror __P((void))  __dlerror (void)
 {  {
         const char      *err;          const char      *err;
   
Line 2265  __dlerror __P((void)) Line 2265  __dlerror __P((void))
 }  }
   
 static void  static void
 __dlexit __P((void))  __dlexit (void)
 {  {
 #ifdef DEBUG  #ifdef DEBUG
 xprintf("__dlexit called\n");  xprintf("__dlexit called\n");
Line 2278  xprintf("__dlexit called\n"); Line 2278  xprintf("__dlexit called\n");
  * Print the current error message and exit with failure status.   * Print the current error message and exit with failure status.
  */   */
 static void  static void
 die __P((void))  die (void)
 {  {
         const char      *msg;          const char      *msg;
   
Line 2419  extern char *curbrk __asm__(CURBRK_SYM); Line 2419  extern char *curbrk __asm__(CURBRK_SYM);
 extern char *minbrk __asm__(MINBRK_SYM);  extern char *minbrk __asm__(MINBRK_SYM);
   
 /* Pointers to the user program's malloc functions. */  /* Pointers to the user program's malloc functions. */
 static void     *(*p_malloc) __P((size_t));  static void     *(*p_malloc) (size_t);
 static void     *(*p_realloc) __P((void *, size_t));  static void     *(*p_realloc) (void *, size_t);
 static void      (*p_free) __P((void *));  static void      (*p_free) (void *);
   
 /* Upper limit of the memory allocated by our internal malloc. */  /* Upper limit of the memory allocated by our internal malloc. */
 static char     *rtld_alloc_lev;  static char     *rtld_alloc_lev;
Line 2431  static char *rtld_alloc_lev; Line 2431  static char *rtld_alloc_lev;
  * main program's sbrk arena.   * main program's sbrk arena.
  */   */
 static void  static void
 init_internal_malloc __P((void))  init_internal_malloc (void)
 {  {
         const struct exec *hdr;          const struct exec *hdr;
   
Line 2466  init_internal_malloc __P((void)) Line 2466  init_internal_malloc __P((void))
  * malloc functions.   * malloc functions.
  */   */
 static void  static void
 init_external_malloc __P((void))  init_external_malloc (void)
 {  {
         /*          /*
          * Patch the program's idea of the current break address to           * Patch the program's idea of the current break address to

Removed from v.1.2  
changed lines
  Added in v.1.3