diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-07-12 23:35:19 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-07-12 23:35:19 +0000 |
commit | f21acc89c06c14160eab88246e9dbe0b17eb5f89 (patch) | |
tree | 096a11e16faed78c69e77fd79b7c8bb4dc0bd051 /elf | |
parent | 2d7da676f38bc00f40d2b604036c0295c156529e (diff) | |
download | glibc-f21acc89c06c14160eab88246e9dbe0b17eb5f89.tar.gz glibc-f21acc89c06c14160eab88246e9dbe0b17eb5f89.tar.xz glibc-f21acc89c06c14160eab88246e9dbe0b17eb5f89.zip |
Update. cvs/libc-ud-970712
1997-07-13 01:18 Ulrich Drepper <drepper@cygnus.com> * setjmp/setjmp.h: Define _setjmp and _longjmp also if __USE_XOPEN. * sysdeps/unix/sysv/linux/bits/ipc.h: Fix comment. * sysdeps/unix/sysv/linux/bits/msq.h: Likewise. * sysdeps/unix/sysv/linux/bits/sem.h: Likewise. * sysdeps/unix/sysv/linux/bits/shm.h: Likewise. * time/Makefile (routines): Add getdate. * time/time.h: Add prototype for getdate and getdate_r. * time/getdate.c: New file. Provided by Mark Kettenis <kettenis@phys.uva.nl>. 1997-06-30 14:49 H.J. Lu <hjl@gnu.ai.mit.edu> From Ralf Baechle <ralf@informatik.uni-koblenz.de> on Sat Jun 21 18:11:21 1997: * sysdeps/unix/sysv/linux/syscalls.list (swapon): Add __swapon alias. (swapoff): New. * elf/Makefile: Add linker script support. (headers): Add bits/dlfcn.h. * elf/dl-load.c (MAP_BASE_ADDR): New. * elf/dlfcn.h: Include <bits/dlfcn.h>. * elf/elf.h: Add MIPS support. * sysdeps/generic/Dist: Add entry.h. * sysdeps/generic/entry.h: New, define the entry symbol. * elf/rtld.c (_start): Include <entry.h>. Change to ENTRY_POINT. * sysdeps/generic/dl-sysdep.c (_start): Likewise. * mips/elf/start.S (_start): Likewise. * sysdeps/mips/bsd-_setjmp.S: Fix PIC. * sysdeps/mips/bsd-setjmp.S: Likewise. * sysdeps/mips/setjmp.S: Likewise. * mips/elf/start.S: Likewise. * sysdeps/unix/mips/brk.S: Likewise. * sysdeps/unix/mips/sysdep.S: Likewise. * sysdeps/unix/mips/sysdep.h: Likewise. * sysdeps/unix/mips/wait.S: Likewise. * sysdeps/mips/dl-machine.h: Update for Linux/MIPS. * sysdeps/mips/fpu_control.h: Likewise. * sysdeps/generic/bits/dlfcn.h: New file. * sysdeps/mips/rtld-ldscript.in: New for Linux/MIPS. * sysdeps/mips/rtld-parms: Likewise. * sysdeps/mips/bits/dlfcn.h: Likewise. * sysdeps/mips/mips64/rtld-parms: Likewise. * sysdeps/mips/mipsel/rtld-parms: Likewise. * sysdeps/unix/sysv/linux/mips/Dist: Likewise. * sysdeps/unix/sysv/linux/mips/Makefile: Likewise. * sysdeps/unix/sysv/linux/mips/clone.S: Likewise. * sysdeps/unix/sysv/linux/mips/entry.h: Likewise. * sysdeps/unix/sysv/linux/mips/fpregdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/fxstat.c: Likewise. * sysdeps/unix/sysv/linux/mips/kernel_sigaction.h: Likewise. * sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise. * sysdeps/unix/sysv/linux/mips/kernel_termios.h: Likewise. * sysdeps/unix/sysv/linux/mips/lxstat.c: Likewise. * sysdeps/unix/sysv/linux/mips/regdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/sgidefs.h: Likewise. * sysdeps/unix/sysv/linux/mips/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/mips/ustat.c: Likewise. * sysdeps/unix/sysv/linux/mips/xmknod.c: Likewise. * sysdeps/unix/sysv/linux/mips/xstat.c: Likewise. * sysdeps/unix/sysv/linux/mips/bits/endian.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/ioctl-types.h: * sysdeps/unix/sysv/linux/mips/bits/ipc.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/shm.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/sigaction.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/signum.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/statfs.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/termios.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/time.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/acct.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/asm.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/cachectl.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/fpregdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/regdef.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/syscall.h: Likewise. * sysdeps/unix/sysv/linux/mips/sys/sysmips.h: Likewise. 1997-04-09 19:05 H.J. Lu (hjl@gnu.ai.mit.edu) * isomac.c (xstrndup): New, use it instead of strndup (). 1997-07-02 08:55 H.J. Lu <hjl@gnu.ai.mit.edu> * sysdeps/i386/dl-machine.h (elf_machine_rel): Print the program name for different sizes. 1997-07-10 15:47 Fila Kolodny <fila@ibi.com> * nis/ypclnt.c: Change references to MAXHOSTNAMELEN to NIS_MAXNAMELEN. Add include of rpcsvc/nis.h. * inet/getnameinfo.c: Delete references to MAXHOSTNAMELEN. * sysdeps/posix/getaddrinfo.c: Likewise. Change size of variable buffer to be big enough to hold an IPv6 address in printable format. 1997-07-12 18:47 Ulrich Drepper <drepper@cygnus.com> * assert/assert.h [!NDEBUG] (assert, assert_perror): Don't use || and && in tests to allow use in C++ code which overloads these operators. Reported by Istvan Marko <istvan@cmdmail.amd.com>. * configure.in: Move mips64* recognition before mips*. Patch by Zack Weinberg <zack@rabi.phys.columbia.edu>. 1997-07-03 20:44 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules (lib%.so, $(common-objpfx)libc.so): Don't use automatic variables in dependency lists. (build-shlib): Always filter out the version script file. * extra-lib.mk ($(objpfx)$(lib).so): Depend on version script. 1997-07-12 17:56 Ulrich Drepper <drepper@cygnus.com> * login/login.c (tty_name): Test return value of ttyname_r for != 0, not < 0. * misc/ttyslot.c (ttyslot): Test return value of ttyname_r for == 0, not >= 0. * sysdeps/unix/getlogin.c (getlogin): Test return value of ttyname_r for != 0. * sysdeps/unix/getlogin_r.c (getlogin_r): Likewise. 1997-07-10 Andreas Jaeger <aj@arthur.rhein-neckar.de> * login/utmp_file.c (getutline_r_file): Fix type: compare with *result. 1997-07-11 00:21 Mark Kettenis <kettenis@phys.uva.nl> * login/Makefile (headers): Add utmpx.h and bits/utmpx.h. 1997-07-09 19:21 Mark Kettenis <kettenis@phys.uva.nl> * login/programs/utmpd.c, login/programs/database.c, login/programs/request.c: Prepare messages for internationalization. * login/programs/utmpd.c: (main): Change handling of errors in opening the database. * login/programs/database.c: (open_database, synchronize_dtatabase, initialize_database): Properly handle errors. (get_mtime): Use fstat instead of stat. All callers changed. * login/getutent_r.c: Make setutxent a weak alias for __setutxent. * login/getutent.c: Rename getutent to __getutent and make getutent a weak alias. Make getutxent a weak alias for __getutent. * login/utmpx.h: New file. * sysdeps/gnu/bits/utmp.h: Cleanup. Added comments. * sysdeps/gnu/bits/utmpx.h: New file. * stdio-common/strops.c: Partialy undo last change. Will need more investigation.
Diffstat (limited to 'elf')
-rw-r--r-- | elf/Makefile | 27 | ||||
-rw-r--r-- | elf/dl-load.c | 12 | ||||
-rw-r--r-- | elf/dlfcn.h | 11 | ||||
-rw-r--r-- | elf/elf.h | 4 | ||||
-rw-r--r-- | elf/rtld.c | 5 |
5 files changed, 46 insertions, 13 deletions
diff --git a/elf/Makefile b/elf/Makefile index ef9207c07b..269a872969 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -20,7 +20,7 @@ subdir := elf -headers = elf.h bits/elfclass.h link.h dlfcn.h +headers = elf.h bits/elfclass.h bits/dlfcn.h link.h dlfcn.h routines = $(dl-routines) dl-open dl-close dl-symbol dl-support \ dl-version enbl-secure @@ -88,6 +88,30 @@ $(objpfx)dl-allobjs.so: $(rtld-routines:%=$(objpfx)%.so) $(objpfx)librtld.so: $(objpfx)dl-allobjs.so $(common-objpfx)libc_pic.a $(reloc-link) '-Wl,-(' $^ -lgcc '-Wl,-)' +# Do we need a linker script? +rtld-ldscript-in := $(firstword $(wildcard $(+sysdep_dirs:%=%/rtld-ldscript.in))) +ifneq (,$(rtld-ldscript-in)) +LDFLAGS-rtld = -T $(objpfx)rtld-ldscript + +before-compile += $(objpfx)rtld-ldscript +rtld-parms = $(wildcard $(+sysdep_dirs:%=%/rtld-parms)) +include $(rtld-parms) +generated += rtld-ldscript +$(objpfx)rtld-ldscript: $(rtld-ldscript-in) $(rtld-parms) + sed -e 's#@@rtld-oformat@@#$(rtld-oformat)#' \ + -e 's#@@rtld-arch@@#$(rtld-arch)#' \ + -e 's#@@rtld-entry@@#$(rtld-entry)#' \ + -e 's#@@rtld-base@@#$(rtld-base)#' $< >$@ + +$(objpfx)ld.so: $(objpfx)librtld.so $(objpfx)rtld-ldscript + $(rtld-link) -Wl,-soname=$(rtld-installed-name) + +define rtld-link +$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \ + -Wl,-rpath=$(default-rpath) $(LDFLAGS-rtld) \ + $(filter-out $(objpfx)rtld-ldscript,$^) +endef +else $(objpfx)ld.so: $(objpfx)librtld.so $(rtld-link) -Wl,-soname=$(rtld-installed-name) @@ -95,6 +119,7 @@ define rtld-link $(LINK.o) -nostdlib -nostartfiles -shared -o $@ \ -Wl,-rpath=$(default-rpath) $^ endef +endif # The dl code in the static libc needs a default library path. CFLAGS-dl-support.c = -D'DEFAULT_RPATH="$(default-rpath)"' diff --git a/elf/dl-load.c b/elf/dl-load.c index 10cc074a6a..87859219f1 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -44,6 +44,15 @@ #define MAP_COPY MAP_PRIVATE #endif +/* Some systems link their relocatable objects for another base address + than 0. We want to know the base address for these such that we can + subtract this address from the segment addresses during mapping. + This results in a more efficient address space usage. Defaults to + zero for almost all systems. */ +#ifndef MAP_BASE_ADDR +#define MAP_BASE_ADDR(l) 0 +#endif + #include <endian.h> #if BYTE_ORDER == BIG_ENDIAN @@ -335,7 +344,8 @@ _dl_map_object_from_fd (char *name, int fd, char *realname, caddr_t mapat; ElfW(Addr) mappref; size_t maplength = loadcmds[nloadcmds - 1].allocend - c->mapstart; - mappref = ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart); + mappref = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart) + - MAP_BASE_ADDR (l)); mapat = map_segment (mappref, maplength, c->prot, 0, c->mapoff); l->l_addr = (ElfW(Addr)) mapat - c->mapstart; diff --git a/elf/dlfcn.h b/elf/dlfcn.h index 9b06988e96..9db5fb4635 100644 --- a/elf/dlfcn.h +++ b/elf/dlfcn.h @@ -22,15 +22,8 @@ #include <features.h> -/* The MODE argument to `dlopen' contains one of the following: */ -#define RTLD_LAZY 0x001 /* Lazy function call binding. */ -#define RTLD_NOW 0x002 /* Immediate function call binding. */ -#define RTLD_BINDING_MASK 0x3 /* Mask of binding time value. */ - -/* If the following bit is set in the MODE argument to `dlopen', - the symbols of the loaded object and its dependencies are made - visible as if the object were linked directly into the program. */ -#define RTLD_GLOBAL 0x100 +/* Collect various system dependand definitions and declarations. */ +#include <bits/dlfcn.h> /* If the first argument of `dlsym' is set to RTLD_NEXT the run-time address of the symbol called NAME in the next shared object is diff --git a/elf/elf.h b/elf/elf.h index 63d36b141c..d01bc90c90 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -741,6 +741,8 @@ typedef struct #define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ #define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ #define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ +#define E_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ +#define E_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ /* Special section indices. */ @@ -810,6 +812,8 @@ typedef struct /* Legal values for p_type field of Elf32_Phdr. */ #define PT_MIPS_REGINFO 0x70000000 /* Register usage information */ +#define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */ +#define PT_MIPS_OPTIONS 0x70000002 /* Legal values for d_tag field of Elf32_Dyn. */ diff --git a/elf/rtld.c b/elf/rtld.c index 22c1059fd2..a025757e05 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -25,6 +25,7 @@ #include <sys/mman.h> /* Check if MAP_ANON is defined. */ #include <stdio-common/_itoa.h> #include <assert.h> +#include <entry.h> #include "dynamic-link.h" @@ -137,7 +138,7 @@ _dl_start (void *arg) /* Now life is peachy; we can do all normal operations. On to the real work. */ -void _start (void); +void ENTRY_POINT (void); /* Some helper functions. */ @@ -268,7 +269,7 @@ dl_main (const ElfW(Phdr) *phdr, /* Set up a flag which tells we are just starting. */ _dl_starting_up = 1; - if (*user_entry == (ElfW(Addr)) &_start) + if (*user_entry == (ElfW(Addr)) &ENTRY_POINT) { /* Ho ho. We are not the program interpreter! We are the program itself! This means someone ran ld.so as a command. Well, that |