summaryrefslogtreecommitdiff
path: root/libexec/ld.so
diff options
context:
space:
mode:
Diffstat (limited to 'libexec/ld.so')
-rw-r--r--libexec/ld.so/i386/archdep.h11
-rw-r--r--libexec/ld.so/library_mquery.c15
2 files changed, 14 insertions, 12 deletions
diff --git a/libexec/ld.so/i386/archdep.h b/libexec/ld.so/i386/archdep.h
index c7d003e2c89..29143adede9 100644
--- a/libexec/ld.so/i386/archdep.h
+++ b/libexec/ld.so/i386/archdep.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: archdep.h,v 1.6 2003/04/25 20:32:07 drahn Exp $ */
+/* $OpenBSD: archdep.h,v 1.7 2003/04/28 21:32:08 drahn Exp $ */
/*
* Copyright (c) 1998 Per Fogelstrom, Opsycon AB
@@ -56,12 +56,15 @@ _dl_mmap(void *addr, unsigned int len, unsigned int prot,
flags, fd, 0, offset));
}
-static inline int
-_dl_mquery(int flags, void **addr, size_t size, int fd, off_t off)
+static inline void *
+_dl_mquery(void *addr, unsigned int len, unsigned int prot,
+ unsigned int flags, int fd, off_t offset)
{
- return(_dl__syscall((quad_t)SYS_mquery, flags, addr, size, fd, off));
+ return((void *)_dl__syscall((quad_t)SYS_mquery, addr, len, prot,
+ flags, fd, 0, offset));
}
+
static inline void
RELOC_REL(Elf32_Rel *r, const Elf32_Sym *s, Elf32_Addr *p, unsigned long v)
{
diff --git a/libexec/ld.so/library_mquery.c b/libexec/ld.so/library_mquery.c
index 2a3cb267dd5..2ed736bd541 100644
--- a/libexec/ld.so/library_mquery.c
+++ b/libexec/ld.so/library_mquery.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: library_mquery.c,v 1.5 2003/04/25 20:32:07 drahn Exp $ */
+/* $OpenBSD: library_mquery.c,v 1.6 2003/04/28 21:32:08 drahn Exp $ */
/*
* Copyright (c) 2002 Dale Rahn
@@ -445,7 +445,6 @@ retry:
for (ld = lowld; ld != NULL; ld = ld->next) {
off_t foff;
int fd, flags;
- int error;
/*
* We don't want to provide the fd/off hint for anything
@@ -473,13 +472,13 @@ retry:
* adjust the base mapping address to match this free mapping
* and restart the process again.
*/
- error = _dl_mquery(flags, &ld->start, ROUND_PG(ld->size), fd,
- foff);
- if (_dl_check_error(error)) {
+ ld->start = _dl_mquery(ld->start, ROUND_PG(ld->size), ld->prot,
+ flags, fd, foff);
+ if (_dl_check_error(ld->start)) {
ld->start = (void *)(LOFF + ld->moff);
- error = _dl_mquery(0, &ld->start, ROUND_PG(ld->size),
- fd, foff);
- if (_dl_check_error(error))
+ ld->start = _dl_mquery(ld->start, ROUND_PG(ld->size),
+ ld->prot, flags & ~MAP_FIXED, fd, foff);
+ if (_dl_check_error(ld->start))
goto fail;
}