summaryrefslogtreecommitdiff
path: root/ldso/include
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2011-04-11 13:13:18 +0200
committerBernd Schmidt <bernds@codesourcery.com>2011-04-11 13:26:48 +0200
commit56ea76b6bf190bffdc07aba90e4b25dfc096027b (patch)
tree8644959d652ecf68e190f0652cff04f44e88f715 /ldso/include
parent85f4b028d767fc390a7b866d2f58d58be489242d (diff)
Fix nommu handling of DT_TEXTREL
We have a problem with DT_TEXTREL shared libraries on nommu machines. The dynamic linker's strategy is to map the text segment read-only first, then look for DT_TEXTREL, and use mprotect to change protections if necessary. This fails on nommu, since a nommu kernel can decide to share the memory for private read-only file mappings, and mprotect doesn't (can't) do anything about this sharing. Existing nommu targets apparently have no need for this, but on C6X, we may need to assign library indices at run-time if no --dsbt-index option was passed to the linker at build time. Hence, the following patch, which instead of using mprotect, redoes the mapping with PF_W set. Signed-off-by: Bernd Schmidt <bernds@codesourcery.com>
Diffstat (limited to 'ldso/include')
-rw-r--r--ldso/include/dl-elf.h2
-rw-r--r--ldso/include/ldso.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/ldso/include/dl-elf.h b/ldso/include/dl-elf.h
index 7fbb373b4..e7203fd8f 100644
--- a/ldso/include/dl-elf.h
+++ b/ldso/include/dl-elf.h
@@ -184,7 +184,7 @@ unsigned int __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info
ADJUST_DYN_INFO(DT_DSBT_BASE_IDX, load_off);
/* Initialize loadmap dsbt info. */
- load_off.map->dsbt_table = dynamic_info[DT_DSBT_BASE_IDX];
+ load_off.map->dsbt_table = (void *)dynamic_info[DT_DSBT_BASE_IDX];
load_off.map->dsbt_size = dynamic_info[DT_DSBT_SIZE_IDX];
load_off.map->dsbt_index = dynamic_info[DT_DSBT_INDEX_IDX];
#endif
diff --git a/ldso/include/ldso.h b/ldso/include/ldso.h
index 69b5dd75a..95bcd14a4 100644
--- a/ldso/include/ldso.h
+++ b/ldso/include/ldso.h
@@ -34,6 +34,8 @@
#include <sys/types.h>
/* Pull in the arch specific page size */
#include <bits/uClibc_page.h>
+/* Pull in the MIN macro */
+#include <sys/param.h>
/* Pull in the ldso syscalls and string functions */
#ifndef __ARCH_HAS_NO_SHARED__
#include <dl-syscall.h>