[BACK]Return to rtld.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / libexec / ld.elf_so

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/libexec/ld.elf_so/rtld.c between version 1.36 and 1.37

version 1.36, 2000/07/17 02:55:53 version 1.37, 2000/07/18 22:33:55
Line 70  typedef void    (*funcptr) __P((void));
Line 70  typedef void    (*funcptr) __P((void));
 /*  /*
  * Function declarations.   * Function declarations.
  */   */
 static void     _rtld_init __P((caddr_t));  static void     _rtld_init __P((caddr_t, int));
 static void     _rtld_exit __P((void));  static void     _rtld_exit __P((void));
   
 Elf_Addr        _rtld __P((Elf_Word *));  Elf_Addr        _rtld __P((Elf_Word *));
Line 157  _rtld_call_init_functions(first)
Line 157  _rtld_call_init_functions(first)
  * this function is to relocate the dynamic linker.   * this function is to relocate the dynamic linker.
  */   */
 static void  static void
 _rtld_init(mapbase)  _rtld_init(mapbase, pagesz)
         caddr_t mapbase;          caddr_t mapbase;
           int pagesz;
 {  {
         Obj_Entry objself;/* The dynamic linker shared object */          Obj_Entry objself;/* The dynamic linker shared object */
         const Elf_Ehdr *hdr = (Elf_Ehdr *) mapbase;          const Elf_Ehdr *hdr = (Elf_Ehdr *) mapbase;
Line 178  _rtld_init(mapbase)
Line 179  _rtld_init(mapbase)
         objself.phdr = (Elf_Phdr *) (mapbase + hdr->e_phoff);          objself.phdr = (Elf_Phdr *) (mapbase + hdr->e_phoff);
         for (i = 0; i < hdr->e_phnum; i++) {          for (i = 0; i < hdr->e_phnum; i++) {
                 if (objself.phdr[i].p_type == PT_LOAD) {                  if (objself.phdr[i].p_type == PT_LOAD) {
   #ifdef  VARPSZ
                           /* We can't touch _rtld_pagesz yet so we can't use round_*() */
   #define _rnd_down(x)    ((x) & ~((long)pagesz-1))
   #define _rnd_up(x)      _rnd_down((x) + pagesz - 1)
                           objself.textsize = _rnd_up(objself.phdr[i].p_vaddr + objself.phdr[i].p_memsz) - _rnd_down(objself.phdr[i].p_vaddr);
   #undef  _rnd_down(x)
   #undef  _rnd_up(x)
   #else
                         objself.textsize = round_up(objself.phdr[i].p_vaddr + objself.phdr[i].p_memsz) - round_down(objself.phdr[i].p_vaddr);                          objself.textsize = round_up(objself.phdr[i].p_vaddr + objself.phdr[i].p_memsz) - round_down(objself.phdr[i].p_vaddr);
   #endif
                         break;                          break;
                 }                  }
         }          }
Line 312  _rtld(sp)
Line 322  _rtld(sp)
   
         sp += 2;                /* skip over return argument space */          sp += 2;                /* skip over return argument space */
         argv = (const char **) &sp[1];          argv = (const char **) &sp[1];
         sp += sp[0] + 2;        /* Skip over argc, arguments, and NULL          sp += ((int *)sp)[0] + 2;       /* Skip over argc, arguments, and NULL
                                  * terminator */                                   * terminator */
         env = (char **) sp;          env = (char **) sp;
         while (*sp++ != 0) {    /* Skip over environment, and NULL terminator */          while (*sp++ != 0) {    /* Skip over environment, and NULL terminator */
Line 358  _rtld(sp)
Line 368  _rtld(sp)
   
         /* Initialize and relocate ourselves. */          /* Initialize and relocate ourselves. */
         assert(pAUX_base != NULL);          assert(pAUX_base != NULL);
         _rtld_init((caddr_t) pAUX_base->a_v);          _rtld_init((caddr_t) pAUX_base->a_v, (pAUX_pagesz)?(int)pAUX_pagesz->a_v:0);
   
 #ifdef  VARPSZ  #ifdef  VARPSZ
         assert(pAUX_pagesz != NULL);          assert(pAUX_pagesz != NULL);

Legend:
Removed from v.1.36  
changed lines
  Added in v.1.37

CVSweb <webmaster@jp.NetBSD.org>