summaryrefslogtreecommitdiff
path: root/ldso/include
diff options
context:
space:
mode:
authorMark Salter <msalter@redhat.com>2012-05-22 10:53:29 -0400
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2012-06-06 09:06:10 +0200
commit8554fb21bb34329201b38c2ae4387fb6f00645cc (patch)
tree462975e36aee3b3ff726e3300ead039e4da1fb3c /ldso/include
parent80c9bfc4668e2370b3434a801dc266f336265832 (diff)
Clean up DSBT support
The existing DSBT support relies on the kernel to provide DSBT info as part of the load maps passed to user space. The problem with this approach is that the DSBT info is in the dynamic section, so the kernel must access a userspace mapping of the dynamic section (or separately read a copy for the kernel) in order to retrieve the information needed by userspace. This patch reworks the DSBT support to remove the reliance on DSBT info coming from the kernel. Instead, ldso reads the info itself from the dynamic section. One other benefit of this is that it allows the existing kernel FDPIC loader to also load DSBT binaries. Signed-off-by: Mark Salter <msalter@redhat.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'ldso/include')
-rw-r--r--ldso/include/dl-elf.h5
-rw-r--r--ldso/include/dl-hash.h6
-rw-r--r--ldso/include/ldso.h3
3 files changed, 9 insertions, 5 deletions
diff --git a/ldso/include/dl-elf.h b/ldso/include/dl-elf.h
index 29d1a007f..060ee3dfb 100644
--- a/ldso/include/dl-elf.h
+++ b/ldso/include/dl-elf.h
@@ -222,11 +222,6 @@ unsigned int __dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info
#ifdef __DSBT__
/* Get the mapped address of the DSBT base. */
ADJUST_DYN_INFO(DT_DSBT_BASE_IDX, load_off);
-
- /* Initialize loadmap dsbt info. */
- 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
#undef ADJUST_DYN_INFO
return rtld_flags;
diff --git a/ldso/include/dl-hash.h b/ldso/include/dl-hash.h
index c7effc588..7bccdca96 100644
--- a/ldso/include/dl-hash.h
+++ b/ldso/include/dl-hash.h
@@ -139,6 +139,12 @@ struct elf_resolve {
memory when the module is dlclose()d. */
struct funcdesc_ht *funcdesc_ht;
#endif
+#ifdef __DSBT__
+ /* Information for DSBT */
+ void **dsbt_table;
+ unsigned long dsbt_size;
+ unsigned long dsbt_index;
+#endif
};
#define RELOCS_DONE 0x000001
diff --git a/ldso/include/ldso.h b/ldso/include/ldso.h
index 6f3b728c3..cb7b12218 100644
--- a/ldso/include/ldso.h
+++ b/ldso/include/ldso.h
@@ -84,6 +84,9 @@ extern struct elf_resolve *_dl_trace_prelink_map; /* Library map for prelinking
#else
#define _dl_trace_prelink 0
#endif
+#ifdef __DSBT__
+extern void **_dl_ldso_dsbt;
+#endif
#if defined(USE_TLS) && USE_TLS
extern void _dl_add_to_slotinfo (struct link_map *l);