Changeset 5754c31e in mainline
- Timestamp:
- 2018-04-04T17:01:18Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4618998
- Parents:
- 2c4e1cc
- git-author:
- Jiří Zárevúcky <jiri.zarevucky@…> (2018-04-03 18:23:12)
- git-committer:
- Jiří Zárevúcky <jiri.zarevucky@…> (2018-04-04 17:01:18)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/elf/elf_mod.c
r2c4e1cc r5754c31e 75 75 static unsigned int elf_load_module(elf_ld_t *elf, size_t so_bias); 76 76 static int segment_header(elf_ld_t *elf, elf_segment_header_t *entry); 77 static int section_header(elf_ld_t *elf, elf_section_header_t *entry);78 77 static int load_segment(elf_ld_t *elf, elf_segment_header_t *entry); 79 78 … … 183 182 } 184 183 185 if (header->e_shentsize != sizeof(elf_section_header_t)) {186 DPRINTF("e_shentsize: %u != %zu\n", header->e_shentsize,187 sizeof(elf_section_header_t));188 return EE_INCOMPATIBLE;189 }190 191 184 /* Check if the object type is supported. */ 192 185 if (header->e_type != ET_EXEC && header->e_type != ET_DYN) { … … 217 210 218 211 ret = segment_header(elf, &segment_hdr); 219 if (ret != EE_OK)220 return ret;221 }222 223 DPRINTF("Parse sections.\n");224 225 /* Inspect all section headers and proccess them. */226 for (i = 0; i < header->e_shnum; i++) {227 elf_section_header_t section_hdr;228 229 pos = header->e_shoff + i * sizeof(elf_section_header_t);230 rc = vfs_read(elf->fd, &pos, §ion_hdr,231 sizeof(elf_section_header_t), &nr);232 if (rc != EOK || nr != sizeof(elf_section_header_t)) {233 DPRINTF("Read error.\n");234 return EE_IO;235 }236 237 ret = section_header(elf, §ion_hdr);238 212 if (ret != EE_OK) 239 213 return ret; … … 428 402 } 429 403 430 /** Process section header.431 *432 * @param elf Loader state.433 * @param entry Segment header.434 *435 * @return EE_OK on success, error code otherwise.436 */437 static int section_header(elf_ld_t *elf, elf_section_header_t *entry)438 {439 switch (entry->sh_type) {440 case SHT_PROGBITS:441 if (entry->sh_flags & SHF_TLS) {442 /* .tdata */443 }444 break;445 case SHT_NOBITS:446 if (entry->sh_flags & SHF_TLS) {447 /* .tbss */448 }449 break;450 case SHT_DYNAMIC:451 /* Record pointer to dynamic section into info structure */452 elf->info->dynamic =453 (void *)((uint8_t *)entry->sh_addr + elf->bias);454 DPRINTF("Dynamic section found at %p.\n",455 (void *) elf->info->dynamic);456 break;457 default:458 break;459 }460 461 return EE_OK;462 }463 464 404 /** @} 465 405 */
Note:
See TracChangeset
for help on using the changeset viewer.