]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/uclibc/lib/contrib/uclibc/ldso/ldso/dl-elf.c.orig
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / ldso / ldso / dl-elf.c.orig
index dfd009d7b2b1db4eb35f68ce34835e96f3972d33..67aa5d990960213f3cf7024e31d73ceeff85fd5b 100644 (file)
@@ -337,6 +337,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
        unsigned long *lpnt;
        unsigned long libaddr;
        unsigned long minvma = 0xffffffff, maxvma = 0;
+       unsigned int rtld_flags;
        int i, flags, piclib, infile;
        ElfW(Addr) relro_addr = 0;
        size_t relro_size = 0;
@@ -709,7 +710,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
 
        dpnt = (ElfW(Dyn) *) dynamic_addr;
        _dl_memset(dynamic_info, 0, sizeof(dynamic_info));
-       _dl_parse_dynamic_info(dpnt, dynamic_info, NULL, lib_loadaddr);
+       rtld_flags = _dl_parse_dynamic_info(dpnt, dynamic_info, NULL, lib_loadaddr);
        /* If the TEXTREL is set, this means that we need to make the pages
           writable before we perform relocations.  Do this now. They get set
           back again later. */
@@ -741,13 +742,14 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
        tpnt->st_ino = st.st_ino;
        tpnt->ppnt = (ElfW(Phdr) *) DL_RELOC_ADDR(tpnt->loadaddr, epnt->e_phoff);
        tpnt->n_phent = epnt->e_phnum;
+       tpnt->rtld_flags |= rtld_flags;
 
 #if defined(USE_TLS) && USE_TLS
        if (tlsppnt) {
                _dl_debug_early("Found TLS header for %s\n", libname);
-#if NO_TLS_OFFSET != 0
+# if NO_TLS_OFFSET != 0
                tpnt->l_tls_offset = NO_TLS_OFFSET;
-#endif
+# endif
                tpnt->l_tls_blocksize = tlsppnt->p_memsz;
                tpnt->l_tls_align = tlsppnt->p_align;
                if (tlsppnt->p_align == 0)
@@ -764,10 +766,14 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
                /* We know the load address, so add it to the offset. */
                if (tpnt->l_tls_initimage != NULL)
                {
+# ifdef __SUPPORT_LD_DEBUG_EARLY__
                        unsigned int tmp = (unsigned int) tpnt->l_tls_initimage;
                        tpnt->l_tls_initimage = (char *) tlsppnt->p_vaddr + tpnt->loadaddr;
                        _dl_debug_early("Relocated TLS initial image from %x to %x (size = %x)\n", tmp, tpnt->l_tls_initimage, tpnt->l_tls_initimage_size);
                        tmp = 0;
+# else
+                       tpnt->l_tls_initimage = (char *) tlsppnt->p_vaddr + tpnt->loadaddr;
+# endif
                }
        }
 #endif
@@ -1013,8 +1019,8 @@ char *_dl_strdup(const char *string)
        return retval;
 }
 
-void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[],
-                            void *debug_addr, DL_LOADADDR_TYPE load_off)
+unsigned int _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[],
+                                    void *debug_addr, DL_LOADADDR_TYPE load_off)
 {
-       __dl_parse_dynamic_info(dpnt, dynamic_info, debug_addr, load_off);
+       return __dl_parse_dynamic_info(dpnt, dynamic_info, debug_addr, load_off);
 }