From 08c36f4c11f5ffdcd1656802257ea472df8339e7 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Wed, 11 May 2011 20:29:59 +0200 Subject: x86_64: add TODO for R_X86_64_RELATIVE Signed-off-by: Bernhard Reutner-Fischer --- ldso/ldso/x86_64/dl-startup.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'ldso/ldso') diff --git a/ldso/ldso/x86_64/dl-startup.h b/ldso/ldso/x86_64/dl-startup.h index 7e05846dd..b2ea93db7 100644 --- a/ldso/ldso/x86_64/dl-startup.h +++ b/ldso/ldso/x86_64/dl-startup.h @@ -58,6 +58,9 @@ void PERFORM_BOOTSTRAP_RELOC(ELF_RELOC *rpnt, ElfW(Addr) *reloc_addr, case R_X86_64_TPOFF64: *reloc_addr = sym->st_value + rpnt->r_addend - symbol_addr; break; +/*TODO: case R_X86_64_RELATIVE: + *reloc_addr = load_addr + rpnt->r_addend; + break; */ default: _dl_exit(1); } -- cgit v1.2.3 From 8514218c136c9a21a5ed4f123d2c49f21ef86947 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Thu, 26 May 2011 18:15:06 +0200 Subject: Correct a bug when remapping textrel segments on nommu From: Alan Davis On C6X, when trying to execute a program that has a textrel DSO, it fails to load. The telltale line in the LD_DEBUG output is: _dl_get_ready_to_run:779: file=''; needed by './a.out' The corresponding DT_NEEDED entry has 'libc.so.0', but here the filename is empty. This is what is happening in _dl_elf_shared_library(): First, map all segments according to their permissions. Text gets initially mapped read-only. Then, parse the dynamic information. The dynamic table is in RW but some of the tags may point to RO. For example, DT_NEEDED points to a string in .dynstr which is in RO. These pointers get computed according to the loadmap from the original mapping. Then, in response to a DT_TEXTREL tag, the RO segment gets remapped, thereby invaliding anything that points to it, in particular certain dynamic tags such as DT_NEEDED. The following patch re-parses the dynamic info after the remapping so as to re-compute any invalid pointers. Signed-off-by: Alan Davis Signed-off-by: Bernd Schmidt --- ldso/ldso/dl-elf.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'ldso/ldso') diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index 7b5d75146..09b3aaf01 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -714,6 +714,9 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure, DL_UPDATE_LOADADDR_HDR(lib_loadaddr, new_addr + (ppnt->p_vaddr & ADDR_ALIGN), ppnt); + /* This has invalidated all pointers into the previously readonly segment. + Update any them to point into the remapped segment. */ + _dl_parse_dynamic_info(dpnt, dynamic_info, NULL, lib_loadaddr); #endif } } -- cgit v1.2.3 From 3862c65a05983b2b18cb7884a124a905828f7a18 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Sun, 9 Jan 2011 01:45:08 +0100 Subject: ARM: #include where __USE_BX__ is used The check for __USE_BX__ will be available in bits/arm_asm.h, so the latter must be included wherever the former is used. Signed-off-by: "Yann E. MORIN" Cc: Khem Raj Cc: Bernhard Reutner-Fischer Cc: Carmelo AMOROSO Signed-off-by: Khem Raj --- ldso/ldso/arm/dl-startup.h | 1 + 1 file changed, 1 insertion(+) (limited to 'ldso/ldso') diff --git a/ldso/ldso/arm/dl-startup.h b/ldso/ldso/arm/dl-startup.h index a95389d98..2dfdaffda 100644 --- a/ldso/ldso/arm/dl-startup.h +++ b/ldso/ldso/arm/dl-startup.h @@ -7,6 +7,7 @@ */ #include +#include #if !defined(__thumb__) __asm__( -- cgit v1.2.3 From c2eaaf39dc68e5d2acc4fbae95d815c85dd5a4fb Mon Sep 17 00:00:00 2001 From: Carmelo Amoroso Date: Mon, 13 Jun 2011 19:58:22 +0200 Subject: ldso_tls: fix compiler warning due to missing cast Fix compiler warning (as below) due to missign cast In file included from ldso/ldso/ldso.c:42:0: ldso/ldso/dl-tls.c: In function 'init_tls': ldso/ldso/dl-tls.c:1028:24: error: initialization makes pointer from integer without a cast Signed-off-by: Carmelo Amoroso --- ldso/ldso/dl-tls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ldso/ldso') diff --git a/ldso/ldso/dl-tls.c b/ldso/ldso/dl-tls.c index 43dd5a00a..362efbbec 100644 --- a/ldso/ldso/dl-tls.c +++ b/ldso/ldso/dl-tls.c @@ -1025,7 +1025,7 @@ init_tls (void) /* And finally install it for the main thread. If ld.so itself uses TLS we know the thread pointer was initialized earlier. */ - const char *lossage = TLS_INIT_TP (tcbp, USE___THREAD); + const char *lossage = (char *)TLS_INIT_TP (tcbp, USE___THREAD); if(__builtin_expect (lossage != NULL, 0)) { _dl_debug_early("cannot set up thread-local storage: %s\n", lossage); _dl_exit(30); -- cgit v1.2.3