summaryrefslogtreecommitdiffstats
path: root/libexec/rtld-elf/alpha
diff options
context:
space:
mode:
authorjdp <jdp@FreeBSD.org>1999-08-30 01:48:19 +0000
committerjdp <jdp@FreeBSD.org>1999-08-30 01:48:19 +0000
commit4382ccec34f7f0bb2721459e301575176a175688 (patch)
treeb8c873578b2f44d81183ecf2c7d5dd097bff5f6b /libexec/rtld-elf/alpha
parentd8c85ab826fb402b3bb08f91f622e4e355f63b21 (diff)
downloadFreeBSD-src-4382ccec34f7f0bb2721459e301575176a175688.zip
FreeBSD-src-4382ccec34f7f0bb2721459e301575176a175688.tar.gz
Revamp the symbol lookup algorithm to cope better with objects
loaded separately by dlopen that have global symbols with identical names. Viewing each dlopened object as a DAG which is linked by its DT_NEEDED entries in the dynamic table, the search order is as follows: * If the referencing object was linked with -Bsymbolic, search it internally. * Search all dlopened DAGs containing the referencing object. * Search all objects loaded at program start up. * Search all objects which were dlopened() using the RTLD_GLOBAL flag (which is now supported too). The search terminates as soon as a strong definition is found. Lacking that, the first weak definition is used. These rules match those of Solaris, as best I could determine them from its vague manual pages and the results of experiments I performed. PR: misc/12438
Diffstat (limited to 'libexec/rtld-elf/alpha')
-rw-r--r--libexec/rtld-elf/alpha/reloc.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/libexec/rtld-elf/alpha/reloc.c b/libexec/rtld-elf/alpha/reloc.c
index 03d8c17..1b55d06 100644
--- a/libexec/rtld-elf/alpha/reloc.c
+++ b/libexec/rtld-elf/alpha/reloc.c
@@ -60,8 +60,7 @@ extern Elf_Dyn _DYNAMIC;
/* Relocate a non-PLT object with addend. */
static int
-reloc_non_plt_obj(Obj_Entry *obj_rtld, const Obj_Entry *obj,
- const Elf_Rela *rela)
+reloc_non_plt_obj(Obj_Entry *obj_rtld, Obj_Entry *obj, const Elf_Rela *rela)
{
Elf_Addr *where = (Elf_Addr *) (obj->relocbase + rela->r_offset);
OpenPOWER on IntegriCloud