[BACK]Return to elf.c CVS log [TXT][DIR] Up to [local] / prex-old / usr / server / exec

Diff for /prex-old/usr/server/exec/elf.c between version 1.1.1.1 and 1.1.1.1.2.1

version 1.1.1.1, 2008/06/03 10:38:51 version 1.1.1.1.2.1, 2008/08/13 17:12:43
Line 82 
Line 82 
                 if (vm_map(task, (void *)phdr->p_vaddr, size, &mapped) != 0)                  if (vm_map(task, (void *)phdr->p_vaddr, size, &mapped) != 0)
                         return ENOEXEC;                          return ENOEXEC;
                 if (phdr->p_filesz > 0) {                  if (phdr->p_filesz > 0) {
                         if (lseek(fd, phdr->p_offset, SEEK_SET) == -(off_t)1)                          if (lseek(fd, (off_t)phdr->p_offset, SEEK_SET)
                               == -(off_t)1)
                                 goto err;                                  goto err;
                         if (read(fd, mapped, phdr->p_filesz) < 0)                          if (read(fd, mapped, phdr->p_filesz) < 0)
                                 goto err;                                  goto err;
Line 120 
Line 121 
                                 + sym->st_value;                                  + sym->st_value;
                         if (relocate_rela(rela, sym_val, target_sect) != 0)                          if (relocate_rela(rela, sym_val, target_sect) != 0)
                                 return -1;                                  return -1;
                 } else if (ELF32_ST_BIND(sym->st_info) == STB_WEAK)                  } else if (ELF32_ST_BIND(sym->st_info) == STB_WEAK) {
                         dprintf("undefined weak symbol for rela[%d]\n", i);                          DPRINTF(("undefined weak symbol for rela[%d]\n", i));
                   }
                 rela++;                  rela++;
         }          }
         return 0;          return 0;
Line 142 
Line 144 
                                 + sym->st_value;                                  + sym->st_value;
                         if (relocate_rel(rel, sym_val, target_sect) != 0)                          if (relocate_rel(rel, sym_val, target_sect) != 0)
                                 return -1;                                  return -1;
                 } else if (ELF32_ST_BIND(sym->st_info) == STB_WEAK)                  } else if (ELF32_ST_BIND(sym->st_info) == STB_WEAK) {
                         dprintf("undefined weak symbol for rel[%d]\n", i);                          DPRINTF(("undefined weak symbol for rel[%d]\n", i));
                   }
                 rel++;                  rel++;
         }          }
         return 0;          return 0;
Line 159 
Line 162 
         char *target_sect;          char *target_sect;
         int nr_reloc, err;          int nr_reloc, err;
   
         dprintf("relocate_sec\n");          DPRINTF(("relocate_sec\n"));
         if (shdr->sh_entsize == 0)          if (shdr->sh_entsize == 0)
                 return 0;                  return 0;
         if ((target_sect = sect_addr[shdr->sh_info]) == 0)          if ((target_sect = sect_addr[shdr->sh_info]) == 0)
Line 237 
Line 240 
         shdr = (Elf32_Shdr *)buf;          shdr = (Elf32_Shdr *)buf;
         for (i = 0; i < ehdr->e_shnum; i++, shdr++) {          for (i = 0; i < ehdr->e_shnum; i++, shdr++) {
                 /*                  /*
                  *dprintf("section: type=%x addr=%x size=%d offset=%x flags=%x\n",                   *DPRINTF(("section: type=%x addr=%x size=%d offset=%x flags=%x\n",
                  *   shdr->sh_type, shdr->sh_addr, shdr->sh_size,                   *   shdr->sh_type, shdr->sh_addr, shdr->sh_size,
                  *   shdr->sh_offset, shdr->sh_flags);                   *   shdr->sh_offset, shdr->sh_flags));
                  */                   */
                 sect_addr[i] = 0;                  sect_addr[i] = 0;
                 if (shdr->sh_type == SHT_PROGBITS) {                  if (shdr->sh_type == SHT_PROGBITS) {
Line 288 
Line 291 
                 if (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA) {                  if (shdr->sh_type == SHT_REL || shdr->sh_type == SHT_RELA) {
                         if (relocate_section(shdr, sect_addr[i]) != 0) {                          if (relocate_section(shdr, sect_addr[i]) != 0) {
                                 err = EIO;                                  err = EIO;
                                 sys_log("exec: relocation failed\n");                                  DPRINTF(("exec: relocation failed\n"));
                                 goto out2;                                  goto out2;
                         }                          }
                 }                  }

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.2.1

CVSweb