Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/rtld/module.c

    rffccdff0 rb27ae65a  
    11/*
    2  * Copyright (c) 2008 Jiri Svoboda
     2 * Copyright (c) 2024 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    343343{
    344344        list_foreach(rtld->modules, modules_link, module_t, m) {
    345                 /* Skip rtld module, since it has already been processed */
    346                 if (m != &rtld->rtld) {
     345                /*
     346                 * Skip rtld module, since it has already been processed.
     347                 * Skip start / main program -- leave it for later
     348                 */
     349                if (m != &rtld->rtld && m != start) {
    347350                        module_process_relocs(m);
    348351                }
    349352        }
     353
     354        /*
     355         * Now that shared libraries have been processed and their variables
     356         * are thus initialized, we can process the main program,
     357         * which may contain COPY relocations that copy value from shared
     358         * library variables to instances of those variables defined
     359         * in the main program.
     360         */
     361        module_process_relocs(start);
    350362}
    351363
     
    386398         * be correct, "zero" offset (i.e. the total size) must be aligned
    387399         * to the strictest alignment present.
    388          * Note that the padding is actually in front of the TLS data,
    389          * not after it.
    390400         */
    391401        rtld->tls_size = ALIGN_UP(rtld->tls_size, rtld->tls_align);
    392402
    393         /* Space for the TCB. */
     403        /*
     404         * Space for the TCB.
     405         * Later, the TLS zero offset is equal to the pointer to tcb_t, so
     406         * adding the sizeof(tcb_t) block AFTER we calculated the alignment
     407         * of the remainder above is correct.
     408         */
    394409        rtld->tls_size += sizeof(tcb_t);
    395410#endif
Note: See TracChangeset for help on using the changeset viewer.