summaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/dl-sysdep.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-10-09 07:06:29 +0000
committerRoland McGrath <roland@gnu.org>1995-10-09 07:06:29 +0000
commitb122c7038e826eeabbc0118612b988c1a0f5b991 (patch)
tree1f3963026427771b6504b8afb91216895d95ba45 /sysdeps/mach/hurd/dl-sysdep.c
parent80fd73873bd51e58039983a9416ef3bb97bdac57 (diff)
Mon Oct 9 02:54:14 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* Makeconfig (config-LDFLAGS): Define to -Wl-dynamic-linker=$(libdir)$(rtld-installed-name). (rtld-installed-name): New variable. * elf/Makefile (install-lib): Variable removed. (install-others): Define this instead, to $(libdir)(rtld-installed-name). ($(libdir)(rtld-installed-name)): New target; install from ld.so. * elf/ldd.sh.in: New file. * elf/Makefile (distribute): Add ldd.sh.in. (install-bin): Add ldd. ($(objpfx)ldd: ldd.sh.in): New rule. * sysdeps/mach/hurd/dl-sysdep.c: Use __hurd_fail throughout. * hurd/hurd.h (__hurd_fail): Replace macro with inline function. Translate some Mach errors to Hurd errors. * elf/rtld.c (dl_main): Under --list, print msg if executable is statically linked. * elf/dl-load.c (_dl_map_object_from_fd): Rewrote program header table processing. Sat Oct 7 01:25:48 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> * sysdeps/stub/machine-gmon.h: Add #error. Fri Oct 6 01:49:48 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu> * elf/dynamic-link.h (elf_get_dynamic_info): If DYN is null, don't examine it.
Diffstat (limited to 'sysdeps/mach/hurd/dl-sysdep.c')
-rw-r--r--sysdeps/mach/hurd/dl-sysdep.c91
1 files changed, 39 insertions, 52 deletions
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c
index 8e1ef174e2..10380753cd 100644
--- a/sysdeps/mach/hurd/dl-sysdep.c
+++ b/sysdeps/mach/hurd/dl-sysdep.c
@@ -262,41 +262,38 @@ open (const char *file_name, int mode, ...)
file_t startdir, newpt, fileport;
int dealloc_dir;
int nloops;
-
+ error_t err;
assert (mode == O_RDONLY);
-
startdir = _dl_hurd_data->portarray[file_name[0] == '/' ?
INIT_PORT_CRDIR : INIT_PORT_CWDIR];
while (file_name[0] == '/')
file_name++;
- if (errno = __dir_lookup (startdir, file_name, mode, 0,
- &doretry, retryname, &fileport))
- return -1;
+ if (err = __dir_lookup (startdir, file_name, mode, 0,
+ &doretry, retryname, &fileport))
+ return __hurd_fail (err);
dealloc_dir = 0;
nloops = 0;
- errno = 0;
while (1)
{
if (dealloc_dir)
__mach_port_deallocate (__mach_task_self (), startdir);
- if (errno)
- return -1;
+ if (err)
+ return __hurd_fail (err);
switch (doretry)
{
case FS_RETRY_REAUTH:
{
mach_port_t ref = __mach_reply_port ();
- errno = __io_reauthenticate
- (fileport, ref, MACH_MSG_TYPE_MAKE_SEND);
- if (! errno)
- errno = __auth_user_authenticate
+ err = __io_reauthenticate (fileport, ref, MACH_MSG_TYPE_MAKE_SEND);
+ if (! err)
+ err = __auth_user_authenticate
(_dl_hurd_data->portarray[INIT_PORT_AUTH],
fileport,
ref, MACH_MSG_TYPE_MAKE_SEND,
@@ -304,18 +301,15 @@ open (const char *file_name, int mode, ...)
__mach_port_destroy (__mach_task_self (), ref);
}
__mach_port_deallocate (__mach_task_self (), fileport);
- if (errno)
- return -1;
+ if (err)
+ return __hurd_fail (err);
fileport = newpt;
/* Fall through. */
case FS_RETRY_NORMAL:
#ifdef SYMLOOP_MAX
if (nloops++ >= SYMLOOP_MAX)
- {
- errno = ELOOP;
- return -1;
- }
+ return __hurd_fail (ELOOP);
#endif
/* An empty RETRYNAME indicates we have the final port. */
@@ -327,11 +321,11 @@ open (const char *file_name, int mode, ...)
opened:
/* We have the file open. Now map it. */
- errno = __io_map (fileport, &memobj_rd, &memobj_wr);
+ err = __io_map (fileport, &memobj_rd, &memobj_wr);
if (dealloc_dir)
__mach_port_deallocate (__mach_task_self (), fileport);
- if (errno)
- return -1;
+ if (err)
+ return __hurd_fail (err);
if (memobj_wr != MACH_PORT_NULL)
__mach_port_deallocate (__mach_task_self (), memobj_wr);
@@ -359,26 +353,20 @@ open (const char *file_name, int mode, ...)
{
int fd;
char *end;
- errno = 0;
+ err = 0;
fd = (int) strtol (retryname, &end, 10);
- if (end == NULL || errno || /* Malformed number. */
+ if (end == NULL || err || /* Malformed number. */
/* Check for excess text after the number. A slash
is valid; it ends the component. Anything else
does not name a numeric file descriptor. */
(*end != '/' && *end != '\0'))
- {
- errno = ENOENT;
- return -1;
- }
+ return __hurd_fail (ENOENT);
if (fd < 0 || fd >= _dl_hurd_data->dtablesize ||
_dl_hurd_data->dtable[fd] == MACH_PORT_NULL)
- {
- /* If the name was a proper number, but the file
- descriptor does not exist, we return EBADF instead
- of ENOENT. */
- errno = EBADF;
- return -1;
- }
+ /* If the name was a proper number, but the file
+ descriptor does not exist, we return EBADF instead
+ of ENOENT. */
+ return __hurd_fail (EBADF);
fileport = _dl_hurd_data->dtable[fd];
if (*end == '\0')
{
@@ -459,13 +447,13 @@ open (const char *file_name, int mode, ...)
}
case '\0':
- if (errno = opentty (&fileport))
- return -1;
+ if (err = opentty (&fileport))
+ return __hurd_fail (err);
dealloc_dir = 1;
goto opened;
case '/':
- if (errno = opentty (&startdir))
- return -1;
+ if (err = opentty (&startdir))
+ return __hurd_fail (err);
dealloc_dir = 1;
strcpy (retryname, &retryname[4]);
break;
@@ -478,18 +466,16 @@ open (const char *file_name, int mode, ...)
default:
bad_magic:
- errno = EGRATUITOUS;
- return -1;
+ return __hurd_fail (EGRATUITOUS);
}
break;
default:
- errno = EGRATUITOUS;
- return -1;
+ return __hurd_fail (EGRATUITOUS);
}
- errno = __dir_lookup (startdir, file_name, mode, 0,
- &doretry, retryname, &fileport);
+ err = __dir_lookup (startdir, file_name, mode, 0,
+ &doretry, retryname, &fileport);
}
}
@@ -504,6 +490,7 @@ close (int fd)
caddr_t
mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
{
+ error_t err;
vm_prot_t vmprot;
vm_address_t mapaddr;
@@ -516,14 +503,14 @@ mmap (caddr_t addr, size_t len, int prot, int flags, int fd, off_t offset)
vmprot |= VM_PROT_EXECUTE;
mapaddr = (vm_address_t) addr;
- errno = __vm_map (__mach_task_self (),
- &mapaddr, (vm_size_t) len, 0 /*ELF_MACHINE_USER_ADDRESS_MASK*/,
- !(flags & MAP_FIXED),
- (mach_port_t) fd, (vm_offset_t) offset,
- flags & (MAP_COPY|MAP_PRIVATE),
- vmprot, VM_PROT_ALL,
- (flags & MAP_INHERIT) ? VM_INHERIT_COPY : VM_INHERIT_NONE);
- return errno ? (caddr_t) -1 : (caddr_t) mapaddr;
+ err = __vm_map (__mach_task_self (),
+ &mapaddr, (vm_size_t) len, 0 /*ELF_MACHINE_USER_ADDRESS_MASK*/,
+ !(flags & MAP_FIXED),
+ (mach_port_t) fd, (vm_offset_t) offset,
+ flags & (MAP_COPY|MAP_PRIVATE),
+ vmprot, VM_PROT_ALL,
+ (flags & MAP_INHERIT) ? VM_INHERIT_COPY : VM_INHERIT_NONE);
+ return err ? (caddr_t) __hurd_fail (err) : (caddr_t) mapaddr;
}
void