Browse Source

Fixup the definition of _dl_open, and move some bits back where they were,
till I properly finish the next step in my evil plan.

Eric Andersen 20 years ago
parent
commit
499c27e1bd
5 changed files with 104 additions and 246 deletions
  1. 49 55
      ldso/include/dl-syscall.h
  2. 49 55
      ldso/include/ld_syscall.h
  3. 2 2
      ldso/ldso/dl-elf.c
  4. 2 132
      ldso/ldso/ldso.c
  5. 2 2
      ldso/ldso/readelflib1.c

+ 49 - 55
ldso/include/dl-syscall.h

@@ -4,14 +4,21 @@
 /* Pull in the arch specific syscall implementation */
 /* Pull in the arch specific syscall implementation */
 #include <ld_syscalls.h>
 #include <ld_syscalls.h>
 /*  For MAP_ANONYMOUS -- differs between platforms */
 /*  For MAP_ANONYMOUS -- differs between platforms */
-#include <asm/mman.h>			
+#include <asm/mman.h>
 /* Pull in whatever this particular arch's kernel thinks the kernel version of
 /* Pull in whatever this particular arch's kernel thinks the kernel version of
  * struct stat should look like.  It turns out that each arch has a different
  * struct stat should look like.  It turns out that each arch has a different
  * opinion on the subject, and different kernel revs use different names... */
  * opinion on the subject, and different kernel revs use different names... */
 #define kernel_stat stat
 #define kernel_stat stat
 #include <bits/kernel_stat.h>
 #include <bits/kernel_stat.h>
+#include <bits/kernel_types.h>
 
 
 
 
+/* _dl_open() parameters */
+#define O_RDONLY        0x0000
+#define O_WRONLY	     01
+#define O_RDWR		     02
+#define O_CREAT		   0100
+
 /* Encoding of the file mode.  */
 /* Encoding of the file mode.  */
 #define	S_IFMT		0170000	/* These bits determine file type.  */
 #define	S_IFMT		0170000	/* These bits determine file type.  */
 
 
@@ -25,7 +32,6 @@
 #define	S_IFSOCK	0140000	/* Socket.  */
 #define	S_IFSOCK	0140000	/* Socket.  */
 
 
 /* Protection bits.  */
 /* Protection bits.  */
-
 #define	S_ISUID		04000	/* Set user ID on execution.  */
 #define	S_ISUID		04000	/* Set user ID on execution.  */
 #define	S_ISGID		02000	/* Set group ID on execution.  */
 #define	S_ISGID		02000	/* Set group ID on execution.  */
 #define	S_ISVTX		01000	/* Save swapped text after use (sticky).  */
 #define	S_ISVTX		01000	/* Save swapped text after use (sticky).  */
@@ -33,6 +39,19 @@
 #define	S_IWRITE	0200	/* Write by owner.  */
 #define	S_IWRITE	0200	/* Write by owner.  */
 #define	S_IEXEC		0100	/* Execute by owner.  */
 #define	S_IEXEC		0100	/* Execute by owner.  */
 
 
+/* Stuff for _dl_mmap */
+#if 0
+#define MAP_FAILED	((void *) -1)
+#define _dl_mmap_check_error(X) (((void *)X) == MAP_FAILED)
+#else
+#ifndef _dl_MAX_ERRNO
+#define _dl_MAX_ERRNO 4096
+#endif
+#define _dl_mmap_check_error(__res)     \
+        (((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO)
+#endif
+
+
 
 
 /* Here are the definitions for some syscalls that are used
 /* Here are the definitions for some syscalls that are used
    by the dynamic linker.  The idea is that we want to be able
    by the dynamic linker.  The idea is that we want to be able
@@ -40,79 +59,29 @@
    we use our own version here.  Note that we cannot assume any
    we use our own version here.  Note that we cannot assume any
    dynamic linking at all, so we cannot return any error codes.
    dynamic linking at all, so we cannot return any error codes.
    We just punt if there is an error. */
    We just punt if there is an error. */
-
-
 #define __NR__dl_exit __NR_exit
 #define __NR__dl_exit __NR_exit
 static inline _syscall1(void, _dl_exit, int, status);
 static inline _syscall1(void, _dl_exit, int, status);
 
 
-
 #define __NR__dl_close __NR_close
 #define __NR__dl_close __NR_close
 static inline _syscall1(int, _dl_close, int, fd);
 static inline _syscall1(int, _dl_close, int, fd);
 
 
-
-#if defined(__powerpc__) || defined(__mips__) || defined(__sh__)
-/* PowerPC, MIPS and SuperH have a different calling convention for mmap(). */
-#define __NR__dl_mmap __NR_mmap
-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
-		int, prot, int, flags, int, fd, off_t, offset);
-#else
-#define __NR__dl_mmap_real __NR_mmap
-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
-
-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
-		int flags, int fd, unsigned long offset)
-{
-	unsigned long buffer[6];
-
-	buffer[0] = (unsigned long) addr;
-	buffer[1] = (unsigned long) size;
-	buffer[2] = (unsigned long) prot;
-	buffer[3] = (unsigned long) flags;
-	buffer[4] = (unsigned long) fd;
-	buffer[5] = (unsigned long) offset;
-	return (void *) _dl_mmap_real(buffer);
-}
-#endif
-
-#ifndef _dl_MAX_ERRNO
-#define _dl_MAX_ERRNO 4096
-#endif
-#define _dl_mmap_check_error(__res)	\
-	(((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO)
-#ifndef MAP_ANONYMOUS
-#ifdef __sparc__
-#define MAP_ANONYMOUS 0x20
-#else
-#error MAP_ANONYMOUS not defined and suplementary value not known
-#endif
-#endif
-
-
 #define __NR__dl_open __NR_open
 #define __NR__dl_open __NR_open
-#define O_RDONLY        0x0000
-#define O_WRONLY	     01
-#define O_RDWR		     02
-#define O_CREAT		   0100	/* not fcntl */
-static inline _syscall2(int, _dl_open, const char *, fn, int, flags);
+static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
 
 
 #define __NR__dl_write __NR_write
 #define __NR__dl_write __NR_write
-static inline _syscall3(unsigned long, _dl_write, int, fd, 
+static inline _syscall3(unsigned long, _dl_write, int, fd,
 	    const void *, buf, unsigned long, count);
 	    const void *, buf, unsigned long, count);
 
 
-
 #define __NR__dl_read __NR_read
 #define __NR__dl_read __NR_read
-static inline _syscall3(unsigned long, _dl_read, int, fd, 
+static inline _syscall3(unsigned long, _dl_read, int, fd,
 	    const void *, buf, unsigned long, count);
 	    const void *, buf, unsigned long, count);
 
 
 #define __NR__dl_mprotect __NR_mprotect
 #define __NR__dl_mprotect __NR_mprotect
 static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
 static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
 
 
-
-
 #define __NR__dl_stat __NR_stat
 #define __NR__dl_stat __NR_stat
 static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
 static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
 
 
-
 #define __NR__dl_munmap __NR_munmap
 #define __NR__dl_munmap __NR_munmap
 static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
 static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
 
 
@@ -134,5 +103,30 @@ static inline _syscall0(gid_t, _dl_getpid);
 #define __NR__dl_readlink __NR_readlink
 #define __NR__dl_readlink __NR_readlink
 static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
 static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
 
 
+#if defined(__powerpc__) || defined(__mips__) || defined(__sh__)
+/* PowerPC, MIPS and SuperH have a different calling convention for mmap(). */
+#define __NR__dl_mmap __NR_mmap
+static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+		int, prot, int, flags, int, fd, off_t, offset);
+#else
+#define __NR__dl_mmap_real __NR_mmap
+static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
+
+static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+		int flags, int fd, unsigned long offset)
+{
+	unsigned long buffer[6];
+
+	buffer[0] = (unsigned long) addr;
+	buffer[1] = (unsigned long) size;
+	buffer[2] = (unsigned long) prot;
+	buffer[3] = (unsigned long) flags;
+	buffer[4] = (unsigned long) fd;
+	buffer[5] = (unsigned long) offset;
+	return (void *) _dl_mmap_real(buffer);
+}
+#endif
+
+
 #endif /* _LD_SYSCALL_H_ */
 #endif /* _LD_SYSCALL_H_ */
 
 

+ 49 - 55
ldso/include/ld_syscall.h

@@ -4,14 +4,21 @@
 /* Pull in the arch specific syscall implementation */
 /* Pull in the arch specific syscall implementation */
 #include <ld_syscalls.h>
 #include <ld_syscalls.h>
 /*  For MAP_ANONYMOUS -- differs between platforms */
 /*  For MAP_ANONYMOUS -- differs between platforms */
-#include <asm/mman.h>			
+#include <asm/mman.h>
 /* Pull in whatever this particular arch's kernel thinks the kernel version of
 /* Pull in whatever this particular arch's kernel thinks the kernel version of
  * struct stat should look like.  It turns out that each arch has a different
  * struct stat should look like.  It turns out that each arch has a different
  * opinion on the subject, and different kernel revs use different names... */
  * opinion on the subject, and different kernel revs use different names... */
 #define kernel_stat stat
 #define kernel_stat stat
 #include <bits/kernel_stat.h>
 #include <bits/kernel_stat.h>
+#include <bits/kernel_types.h>
 
 
 
 
+/* _dl_open() parameters */
+#define O_RDONLY        0x0000
+#define O_WRONLY	     01
+#define O_RDWR		     02
+#define O_CREAT		   0100
+
 /* Encoding of the file mode.  */
 /* Encoding of the file mode.  */
 #define	S_IFMT		0170000	/* These bits determine file type.  */
 #define	S_IFMT		0170000	/* These bits determine file type.  */
 
 
@@ -25,7 +32,6 @@
 #define	S_IFSOCK	0140000	/* Socket.  */
 #define	S_IFSOCK	0140000	/* Socket.  */
 
 
 /* Protection bits.  */
 /* Protection bits.  */
-
 #define	S_ISUID		04000	/* Set user ID on execution.  */
 #define	S_ISUID		04000	/* Set user ID on execution.  */
 #define	S_ISGID		02000	/* Set group ID on execution.  */
 #define	S_ISGID		02000	/* Set group ID on execution.  */
 #define	S_ISVTX		01000	/* Save swapped text after use (sticky).  */
 #define	S_ISVTX		01000	/* Save swapped text after use (sticky).  */
@@ -33,6 +39,19 @@
 #define	S_IWRITE	0200	/* Write by owner.  */
 #define	S_IWRITE	0200	/* Write by owner.  */
 #define	S_IEXEC		0100	/* Execute by owner.  */
 #define	S_IEXEC		0100	/* Execute by owner.  */
 
 
+/* Stuff for _dl_mmap */
+#if 0
+#define MAP_FAILED	((void *) -1)
+#define _dl_mmap_check_error(X) (((void *)X) == MAP_FAILED)
+#else
+#ifndef _dl_MAX_ERRNO
+#define _dl_MAX_ERRNO 4096
+#endif
+#define _dl_mmap_check_error(__res)     \
+        (((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO)
+#endif
+
+
 
 
 /* Here are the definitions for some syscalls that are used
 /* Here are the definitions for some syscalls that are used
    by the dynamic linker.  The idea is that we want to be able
    by the dynamic linker.  The idea is that we want to be able
@@ -40,79 +59,29 @@
    we use our own version here.  Note that we cannot assume any
    we use our own version here.  Note that we cannot assume any
    dynamic linking at all, so we cannot return any error codes.
    dynamic linking at all, so we cannot return any error codes.
    We just punt if there is an error. */
    We just punt if there is an error. */
-
-
 #define __NR__dl_exit __NR_exit
 #define __NR__dl_exit __NR_exit
 static inline _syscall1(void, _dl_exit, int, status);
 static inline _syscall1(void, _dl_exit, int, status);
 
 
-
 #define __NR__dl_close __NR_close
 #define __NR__dl_close __NR_close
 static inline _syscall1(int, _dl_close, int, fd);
 static inline _syscall1(int, _dl_close, int, fd);
 
 
-
-#if defined(__powerpc__) || defined(__mips__) || defined(__sh__)
-/* PowerPC, MIPS and SuperH have a different calling convention for mmap(). */
-#define __NR__dl_mmap __NR_mmap
-static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
-		int, prot, int, flags, int, fd, off_t, offset);
-#else
-#define __NR__dl_mmap_real __NR_mmap
-static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
-
-static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
-		int flags, int fd, unsigned long offset)
-{
-	unsigned long buffer[6];
-
-	buffer[0] = (unsigned long) addr;
-	buffer[1] = (unsigned long) size;
-	buffer[2] = (unsigned long) prot;
-	buffer[3] = (unsigned long) flags;
-	buffer[4] = (unsigned long) fd;
-	buffer[5] = (unsigned long) offset;
-	return (void *) _dl_mmap_real(buffer);
-}
-#endif
-
-#ifndef _dl_MAX_ERRNO
-#define _dl_MAX_ERRNO 4096
-#endif
-#define _dl_mmap_check_error(__res)	\
-	(((int)__res) < 0 && ((int)__res) >= -_dl_MAX_ERRNO)
-#ifndef MAP_ANONYMOUS
-#ifdef __sparc__
-#define MAP_ANONYMOUS 0x20
-#else
-#error MAP_ANONYMOUS not defined and suplementary value not known
-#endif
-#endif
-
-
 #define __NR__dl_open __NR_open
 #define __NR__dl_open __NR_open
-#define O_RDONLY        0x0000
-#define O_WRONLY	     01
-#define O_RDWR		     02
-#define O_CREAT		   0100	/* not fcntl */
-static inline _syscall2(int, _dl_open, const char *, fn, int, flags);
+static inline _syscall3(int, _dl_open, const char *, fn, int, flags, __kernel_mode_t, mode);
 
 
 #define __NR__dl_write __NR_write
 #define __NR__dl_write __NR_write
-static inline _syscall3(unsigned long, _dl_write, int, fd, 
+static inline _syscall3(unsigned long, _dl_write, int, fd,
 	    const void *, buf, unsigned long, count);
 	    const void *, buf, unsigned long, count);
 
 
-
 #define __NR__dl_read __NR_read
 #define __NR__dl_read __NR_read
-static inline _syscall3(unsigned long, _dl_read, int, fd, 
+static inline _syscall3(unsigned long, _dl_read, int, fd,
 	    const void *, buf, unsigned long, count);
 	    const void *, buf, unsigned long, count);
 
 
 #define __NR__dl_mprotect __NR_mprotect
 #define __NR__dl_mprotect __NR_mprotect
 static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
 static inline _syscall3(int, _dl_mprotect, const void *, addr, unsigned long, len, int, prot);
 
 
-
-
 #define __NR__dl_stat __NR_stat
 #define __NR__dl_stat __NR_stat
 static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
 static inline _syscall2(int, _dl_stat, const char *, file_name, struct stat *, buf);
 
 
-
 #define __NR__dl_munmap __NR_munmap
 #define __NR__dl_munmap __NR_munmap
 static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
 static inline _syscall2(int, _dl_munmap, void *, start, unsigned long, length);
 
 
@@ -134,5 +103,30 @@ static inline _syscall0(gid_t, _dl_getpid);
 #define __NR__dl_readlink __NR_readlink
 #define __NR__dl_readlink __NR_readlink
 static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
 static inline _syscall3(int, _dl_readlink, const char *, path, char *, buf, size_t, bufsiz);
 
 
+#if defined(__powerpc__) || defined(__mips__) || defined(__sh__)
+/* PowerPC, MIPS and SuperH have a different calling convention for mmap(). */
+#define __NR__dl_mmap __NR_mmap
+static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
+		int, prot, int, flags, int, fd, off_t, offset);
+#else
+#define __NR__dl_mmap_real __NR_mmap
+static inline _syscall1(void *, _dl_mmap_real, unsigned long *, buffer);
+
+static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+		int flags, int fd, unsigned long offset)
+{
+	unsigned long buffer[6];
+
+	buffer[0] = (unsigned long) addr;
+	buffer[1] = (unsigned long) size;
+	buffer[2] = (unsigned long) prot;
+	buffer[3] = (unsigned long) flags;
+	buffer[4] = (unsigned long) fd;
+	buffer[5] = (unsigned long) offset;
+	return (void *) _dl_mmap_real(buffer);
+}
+#endif
+
+
 #endif /* _LD_SYSCALL_H_ */
 #endif /* _LD_SYSCALL_H_ */
 
 

+ 2 - 2
ldso/ldso/dl-elf.c

@@ -51,7 +51,7 @@ int _dl_map_cache(void)
 		return 0;
 		return 0;
 
 
 	if (_dl_stat(LDSO_CACHE, &st)
 	if (_dl_stat(LDSO_CACHE, &st)
-			|| (fd = _dl_open(LDSO_CACHE, O_RDONLY)) < 0) {
+			|| (fd = _dl_open(LDSO_CACHE, O_RDONLY, 0)) < 0) {
 		_dl_dprintf(2, "%s: can't open cache '%s'\n", _dl_progname, LDSO_CACHE);
 		_dl_dprintf(2, "%s: can't open cache '%s'\n", _dl_progname, LDSO_CACHE);
 		_dl_cache_addr = (caddr_t) - 1;	/* so we won't try again */
 		_dl_cache_addr = (caddr_t) - 1;	/* so we won't try again */
 		return -1;
 		return -1;
@@ -429,7 +429,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
 	}
 	}
 
 
 	libaddr = 0;
 	libaddr = 0;
-	infile = _dl_open(libname, O_RDONLY);
+	infile = _dl_open(libname, O_RDONLY, 0);
 	if (infile < 0) {
 	if (infile < 0) {
 #if 0
 #if 0
 		/*
 		/*

+ 2 - 132
ldso/ldso/ldso.c

@@ -314,7 +314,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *app_tpnt
 				filename[len1] = '.';
 				filename[len1] = '.';
 				_dl_strcpy (&filename[len1+1], tmp1);
 				_dl_strcpy (&filename[len1+1], tmp1);
 
 
-				_dl_debug_file= _dl_open (filename, O_WRONLY|O_CREAT, 0644);
+				_dl_debug_file= _dl_open(filename, O_WRONLY|O_CREAT, 0644);
 				if (_dl_debug_file<0)
 				if (_dl_debug_file<0)
 				{
 				{
 					_dl_debug_file = 2;
 					_dl_debug_file = 2;
@@ -422,7 +422,7 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *app_tpnt
 		struct stat st;
 		struct stat st;
 		char *preload;
 		char *preload;
 		if (!_dl_stat(LDSO_PRELOAD, &st) && st.st_size > 0) {
 		if (!_dl_stat(LDSO_PRELOAD, &st) && st.st_size > 0) {
-			if ((fd = _dl_open(LDSO_PRELOAD, O_RDONLY)) < 0) {
+			if ((fd = _dl_open(LDSO_PRELOAD, O_RDONLY, 0)) < 0) {
 				_dl_dprintf(2, "%s: can't open file '%s'\n",
 				_dl_dprintf(2, "%s: can't open file '%s'\n",
 						_dl_progname, LDSO_PRELOAD);
 						_dl_progname, LDSO_PRELOAD);
 			} else {
 			} else {
@@ -767,135 +767,5 @@ static int _dl_suid_ok(void)
 	return 0;
 	return 0;
 }
 }
 
 
-/* Minimal printf which handles only %s, %d, and %x */
-void _dl_dprintf(int fd, const char *fmt, ...)
-{
-	int num;
-	va_list args;
-	char *start, *ptr, *string;
-	static char *buf;
-
-	buf = _dl_mmap((void *) 0, PAGE_SIZE, PROT_READ | PROT_WRITE,
-			MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
-	if (_dl_mmap_check_error(buf)) {
-		_dl_write(fd, "mmap of a spare page failed!\n", 29);
-		_dl_exit(20);
-	}
-
-	start = ptr = buf;
-
-	if (!fmt)
-		return;
-
-	if (_dl_strlen(fmt) >= (PAGE_SIZE - 1)) {
-		_dl_write(fd, "overflow\n", 11);
-		_dl_exit(20);
-	}
-
-	_dl_strcpy(buf, fmt);
-	va_start(args, fmt);
-
-	while (start) {
-		while (*ptr != '%' && *ptr) {
-			ptr++;
-		}
-
-		if (*ptr == '%') {
-			*ptr++ = '\0';
-			_dl_write(fd, start, _dl_strlen(start));
-
-			switch (*ptr++) {
-				case 's':
-					string = va_arg(args, char *);
-
-					if (!string)
-						_dl_write(fd, "(null)", 6);
-					else
-						_dl_write(fd, string, _dl_strlen(string));
-					break;
-
-				case 'i':
-				case 'd':
-					{
-						char tmp[22];
-						num = va_arg(args, int);
-
-						string = _dl_simple_ltoa(tmp, num);
-						_dl_write(fd, string, _dl_strlen(string));
-						break;
-					}
-				case 'x':
-				case 'X':
-					{
-						char tmp[22];
-						num = va_arg(args, int);
-
-						string = _dl_simple_ltoahex(tmp, num);
-						_dl_write(fd, string, _dl_strlen(string));
-						break;
-					}
-				default:
-					_dl_write(fd, "(null)", 6);
-					break;
-			}
-
-			start = ptr;
-		} else {
-			_dl_write(fd, start, _dl_strlen(start));
-			start = NULL;
-		}
-	}
-	_dl_munmap(buf, PAGE_SIZE);
-	return;
-}
-
-char *_dl_strdup(const char *string)
-{
-	char *retval;
-	int len;
-
-	len = _dl_strlen(string);
-	retval = _dl_malloc(len + 1);
-	_dl_strcpy(retval, string);
-	return retval;
-}
-
-void *(*_dl_malloc_function) (size_t size) = NULL;
-void *_dl_malloc(int size)
-{
-	void *retval;
-
-#if 0
-#ifdef __SUPPORT_LD_DEBUG_EARLY__
-	_dl_dprintf(2, "malloc: request for %d bytes\n", size);
-#endif
-#endif
-
-	if (_dl_malloc_function)
-		return (*_dl_malloc_function) (size);
-
-	if (_dl_malloc_addr - _dl_mmap_zero + size > PAGE_SIZE) {
-#ifdef __SUPPORT_LD_DEBUG_EARLY__
-		_dl_dprintf(2, "malloc: mmapping more memory\n");
-#endif
-		_dl_mmap_zero = _dl_malloc_addr = _dl_mmap((void *) 0, size,
-				PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
-		if (_dl_mmap_check_error(_dl_mmap_zero)) {
-			_dl_dprintf(2, "%s: mmap of a spare page failed!\n", _dl_progname);
-			_dl_exit(20);
-		}
-	}
-	retval = _dl_malloc_addr;
-	_dl_malloc_addr += size;
-
-	/*
-	 * Align memory to 4 byte boundary.  Some platforms require this, others
-	 * simply get better performance.
-	 */
-	_dl_malloc_addr = (unsigned char *) (((unsigned long) _dl_malloc_addr + 3) & ~(3));
-	return retval;
-}
-
-
 #include "hash.c"
 #include "hash.c"
 #include "readelflib1.c"
 #include "readelflib1.c"

+ 2 - 2
ldso/ldso/readelflib1.c

@@ -51,7 +51,7 @@ int _dl_map_cache(void)
 		return 0;
 		return 0;
 
 
 	if (_dl_stat(LDSO_CACHE, &st)
 	if (_dl_stat(LDSO_CACHE, &st)
-			|| (fd = _dl_open(LDSO_CACHE, O_RDONLY)) < 0) {
+			|| (fd = _dl_open(LDSO_CACHE, O_RDONLY, 0)) < 0) {
 		_dl_dprintf(2, "%s: can't open cache '%s'\n", _dl_progname, LDSO_CACHE);
 		_dl_dprintf(2, "%s: can't open cache '%s'\n", _dl_progname, LDSO_CACHE);
 		_dl_cache_addr = (caddr_t) - 1;	/* so we won't try again */
 		_dl_cache_addr = (caddr_t) - 1;	/* so we won't try again */
 		return -1;
 		return -1;
@@ -429,7 +429,7 @@ struct elf_resolve *_dl_load_elf_shared_library(int secure,
 	}
 	}
 
 
 	libaddr = 0;
 	libaddr = 0;
-	infile = _dl_open(libname, O_RDONLY);
+	infile = _dl_open(libname, O_RDONLY, 0);
 	if (infile < 0) {
 	if (infile < 0) {
 #if 0
 #if 0
 		/*
 		/*