Browse Source

TLS: fix relocation computation

	* ldso/ldso/dl-elf.c (_dl_load_elf_shared_library): Fix
	l_tls_initimage computation.
	* ldso/ldso/ldso.c (_dl_get_ready_to_run): Likewise.

Signed-off-by: Mickaël Guêné <mickael.guene@st.com>
Signed-off-by: Christophe Lyon <christophe.lyon@st.com>
Christophe Lyon 7 years ago
parent
commit
448a986954
2 changed files with 3 additions and 3 deletions
  1. 2 2
      ldso/ldso/dl-elf.c
  2. 1 1
      ldso/ldso/ldso.c

+ 2 - 2
ldso/ldso/dl-elf.c

@@ -863,11 +863,11 @@ struct elf_resolve *_dl_load_elf_shared_library(unsigned int rflags,
 		{
 # ifdef __SUPPORT_LD_DEBUG_EARLY__
 			char *tmp = (char *) tpnt->l_tls_initimage;
-			tpnt->l_tls_initimage = (char *) tlsppnt->p_vaddr + tpnt->loadaddr;
+			tpnt->l_tls_initimage = (char *) DL_RELOC_ADDR(tpnt->loadaddr, tlsppnt->p_vaddr;
 			_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;
+			tpnt->l_tls_initimage = (char *) DL_RELOC_ADDR(tpnt->loadaddr, tlsppnt->p_vaddr);
 # endif
 		}
 	}

+ 1 - 1
ldso/ldso/ldso.c

@@ -772,7 +772,7 @@ of this helper program; chances are you did not intend to run this program.\n\
 		char *tmp attribute_unused =
 			(char *) app_tpnt->l_tls_initimage;
 		app_tpnt->l_tls_initimage =
-			(char *) app_tpnt->l_tls_initimage + app_tpnt->loadaddr;
+			(char *) DL_RELOC_ADDR(app_tpnt->loadaddr, app_tpnt->l_tls_initimage);
 		_dl_debug_early("Relocated TLS initial image from %x to %x (size = %x)\n",
 			tmp, app_tpnt->l_tls_initimage, app_tpnt->l_tls_initimage_size);
 	}