Changeset 6adb775f in mainline for uspace/lib/c/generic/elf/elf_mod.c


Ignore:
Timestamp:
2016-04-25T16:46:31Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
32573ff
Parents:
dc0d8b52
Message:

TLS for dynamically linked executables and initially loaded DSOs (but must not call dlopen or there will be trouble).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/elf/elf_mod.c

    rdc0d8b52 r6adb775f  
    248248}
    249249
     250/** Process TLS program header.
     251 *
     252 * @param elf  Pointer to loader state buffer.
     253 * @param hdr  TLS program header
     254 * @param info Place to store TLS info
     255 */
     256static void tls_program_header(elf_ld_t *elf, elf_segment_header_t *hdr,
     257    elf_tls_info_t *info)
     258{
     259        info->tdata = (void *)((uint8_t *)hdr->p_vaddr + elf->bias);
     260        info->tdata_size = hdr->p_filesz;
     261        info->tbss_size = hdr->p_memsz - hdr->p_filesz;
     262}
     263
    250264/** Process segment header.
    251265 *
     266 * @param elf   Pointer to loader state buffer.
    252267 * @param entry Segment header.
    253268 *
     
    277292        case 0x70000000:
    278293                /* FIXME: MIPS reginfo */
     294                break;
     295        case PT_TLS:
     296                /* Parse TLS program header */
     297                tls_program_header(elf, entry, &elf->info->tls);
     298                DPRINTF("TLS header found at %p\n",
     299                    (void *)((uint8_t *)entry->p_vaddr + elf->bias));
    279300                break;
    280301        case PT_SHLIB:
Note: See TracChangeset for help on using the changeset viewer.