diff options
47 files changed, 797 insertions, 428 deletions
@@ -1,3 +1,130 @@ +1997-02-27 05:12 Ulrich Drepper <drepper@cygnus.com> + + * manual/Makefile: Add rules to run and distribute xtract-typefun. + * manual/xtract-typefun.awk: New file. Script to extract function, + variable, macro anchor to put into the `dir' file. + * manual/signal.texi: Document difference between SysV and BSD + signal(3) function and add documentation for sysv_signal. + + * sysdeps/libm-i387/e_acoshl.c: Clear upper half of word containing + exponent before comparing. + +1997-02-27 01:13 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/generic/netinet/in.h (htonl, htons, ntohl, ntohs): Change + prototypes to use types with explicit width. `unsigned long' is + different on 64 bit systems. + * sysdeps/unix/sysv/linux/netinet/in.h: Likewise. + * sysdeps/generic/htonl.c: Likewise. + * sysdeps/generic/htons.c: Likewise. + * sysdeps/generic/ntohl.c: Likewise. + * sysdeps/generic/ntohs.c: Likewise. + Suggested by a sun <asun@zoology.washington.edu>. + +1997-02-26 08:30 Andreas Jaeger <aj@arthur.pfalz.de> + + * math/math.h: Include <__math.h> if __NO_MATH_INLINES is not + defined and we want optimization. + +1997-02-27 01:13 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/generic/netinet/in.h (htonl, htons, ntohl, ntohs): Change + prototypes to use types with explicit width. `unsigned long' is + different on 64 bit systems. + Suggested by a sun <asun@zoology.washington.edu>. + +1997-02-02 19:53 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * misc/getpass.c: Don't disable canonical input. + Reverted patch of Mon Jan 6 01:35:29 1997. + +1996-12-14 22:07 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * libio/libioP.h (_IO_finish_t): Take additional parameter, to + match the hidden __in_chrg parameter of the destructor. + (_IO_FINISH): Pass zero for it. + * libio/genops.c (_IO_default_finish): Add second parameter, which + is ignored. + * libio/memstream.c (_IO_mem_finish): Likewise. + * libio/fileops.c (_IO_mem_finish): Likewise. + * libio/strops.c (_IO_str_finish): Likewise. All callers changed. + +1997-02-27 00:23 H.J. Lu <hjl@lucon.org> + + * time/Makefile: Avoid using patterns in dependencies. + +1997-02-26 00:56 Miguel de Icaza <miguel@nuclecu.unam.mx> + + * elf/rtld.c: Make _dl_start static. Otherwise the linker on the + SPARC will convert the call _dl_start into a call into the PLT. + + * elf/rtld.c (_dl_start): On the SPARC we need to adjust the value + of arg to make it point to the actual values. + + * sysdeps/sparc/elf/DEFS.h: New ELF specific version. + * sysdeps/sparc/Dist: Mention sysdeps/sparc/elf/DEFS.h. + + * sysdeps/sparc/bsd-_setjmp.S, sysdeps/sparc/bsd-setjmp.S: Make + them PIC aware. + + * sysdeps/sparc/dl-machine.h (elf_machine_load_address): + Implemented. + (elf_machine_rela): Make it compile; fix existing relocation + types; add unhandled relocation types. + (ELF_ADJUST_ARG): Get pointer to arguments at program startup. + (RTLD_START): Initial implementation, not yet finished. + + * sysdeps/sparc/elf/start.S: Fix. + + * sysdeps/sparc/fpu_control.h: Remove duplicate declaration of + __setfpucw. + + * sysdeps/sparc/divrem.m4: Make compilable under Linux. + * sysdeps/sparc/rem.S, sysdeps/sparc/sdiv.S, sysdeps/sparc/udiv.S, + sysdeps/sparc/urem.S : Regenerated. + + * sysdeps/sparc/setjmp.S: Make it PIC aware. + + * sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S: Define + __ASSEMBLY__ before using kernel header. + + * sysdeps/unix/sysv/linux/sparc/Makefile: Use -mv8 flag to compile + rtld.c. + + * sysdeps/unix/sysv/linux/sparc/brk.c: Implement. + * sysdeps/unix/sysv/linux/sparc/profil-counter.h: Remove code + to handle old signals. + * sysdeps/unix/sysv/linux/sparc/sigaction.c: Implements sigaction + for all Linux/SPARC kernels. + * sysdeps/unix/sysv/linux/sparc/syscall.S: Add code to store + errno using __errno_location. + * sysdeps/unix/sysv/linux/sparc/sysdep.h: Add various handler + macros for assembler sources. + * sysdeps/unix/sysv/linux/sparc/errno.c: Define errno. + +1997-02-25 16:02 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * elf/rtld.c (dl_main): Remove dead code that is never executed. + Rename local variable l to main_map where it is used to point to + the load_map for the executable. + +1997-02-25 15:03 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * elf/dl-version.c (_dl_check_all_versions): Ignore libraries that + could not be found. + +1997-02-24 23:18 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Makerules: Generate implicit object suffix rules automagically. + (o-iterator): Move before first use. + + * Makeconfig (all-object-suffixes): Add .bo suffix. + +1997-02-25 15:11 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-i387/e_acoshf.S (__ieee754_acoshf): Test correct + word on stack for overflow. + 1997-02-24 23:05 Wolfram Gloger <wmglo@dent.med.uni-muenchen.de> * malloc/malloc.c (malloc_get_state): New function. @@ -155,7 +282,7 @@ __STRICT_ANSI__. * math/math.h: Prevent definition of struct exception when using - C++. + C++. Use __exception instead. 1997-02-22 01:45 Ulrich Drepper <drepper@cygnus.com> diff --git a/Makeconfig b/Makeconfig index 811392b13e..2501789440 100644 --- a/Makeconfig +++ b/Makeconfig @@ -481,7 +481,7 @@ endif # to pass different flags for each flavor. libtypes = $(foreach o,$(object-suffixes),$(libtype$o)) object-suffixes := .o -all-object-suffixes := .o .so .po .go +all-object-suffixes := .o .so .po .go .bo libtype.o := lib%.a ifeq (yes,$(build-shared)) # Under --enable-shared, we will build a shared library of PIC objects. @@ -80,6 +80,12 @@ ar-symtab-name = __.SYMDEF else ar-symtab-name = # The null name is used in ELF archives. endif + +# This variable is used in ``include $(o-iterator)'' after defining +# $(o-iterator-doit) to produce some desired rule using $o for the object +# suffix, and setting $(object-suffixes-left) to $(object-suffixes); a copy +# is produced for each object suffix in use. +o-iterator = $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-left)) # Include any system-specific makefiles. @@ -167,23 +173,25 @@ $(common-objpfx)dummy.d: # generated sysdep rules in included from sysd-rules below. When # compiling in the source tree, generated sources go into the current # directory, and those should be chosen before any sources in sysdeps. -$(objpfx)%.o: %.S $(before-compile); $(compile-command.S) -$(objpfx)%.so: %.S $(before-compile); $(compile-command.S) -$(objpfx)%.po: %.S $(before-compile); $(compile-command.S) -$(objpfx)%.go: %.S $(before-compile); $(compile-command.S) -$(objpfx)%.bo: %.S $(before-compile); $(compile-command.S) +define o-iterator-doit +$(objpfx)%$o: %.S $(before-compile); $$(compile-command.S) +endef +object-suffixes-left := $(object-suffixes) +include $(o-iterator) $(objpfx)%.d: %.S $(before-compile); $(+make-deps) -$(objpfx)%.o: %.s $(before-compile); $(compile-command.s) -$(objpfx)%.so: %.s $(before-compile); $(compile-command.s) -$(objpfx)%.po: %.s $(before-compile); $(compile-command.s) -$(objpfx)%.go: %.s $(before-compile); $(compile-command.s) -$(objpfx)%.bo: %.s $(before-compile); $(compile-command.s) + +define o-iterator-doit +$(objpfx)%$o: %.s $(before-compile); $$(compile-command.s) +endef +object-suffixes-left := $(object-suffixes) +include $(o-iterator) $(objpfx)%.d: %.s $(common-objpfx)dummy.d; $(make-dummy-dep) -$(objpfx)%.o: %.c $(before-compile); $(compile-command.c) -$(objpfx)%.so: %.c $(before-compile); $(compile-command.c) -$(objpfx)%.po: %.c $(before-compile); $(compile-command.c) -$(objpfx)%.go: %.c $(before-compile); $(compile-command.c) -$(objpfx)%.bo: %.c $(before-compile); $(compile-command.c) + +define o-iterator-doit +$(objpfx)%$o: %.c $(before-compile); $$(compile-command.c) +endef +object-suffixes-left := $(object-suffixes) +include $(o-iterator) $(objpfx)%.d: %.c $(before-compile); $(+make-deps) # Omit the objpfx rules when building in the source tree, because @@ -191,23 +199,25 @@ $(objpfx)%.d: %.c $(before-compile); $(+make-deps) ifdef objpfx # Define first rules to find the source files in $(objpfx). # Generated source files will end up there. -$(objpfx)%.o: $(objpfx)%.S $(before-compile); $(compile-command.S) -$(objpfx)%.so: $(objpfx)%.S $(before-compile); $(compile-command.S) -$(objpfx)%.po: $(objpfx)%.S $(before-compile); $(compile-command.S) -$(objpfx)%.go: $(objpfx)%.S $(before-compile); $(compile-command.S) -$(objpfx)%.bo: $(objpfx)%.S $(before-compile); $(compile-command.S) +define o-iterator-doit +$(objpfx)%$o: $(objpfx)%.S $(before-compile); $$(compile-command.S) +endef +object-suffixes-left := $(object-suffixes) +include $(o-iterator) $(objpfx)%.d: $(objpfx)%.S $(before-compile); $(+make-deps) -$(objpfx)%.o: $(objpfx)%.s $(before-compile); $(compile-command.s) -$(objpfx)%.so: $(objpfx)%.s $(before-compile); $(compile-command.s) -$(objpfx)%.po: $(objpfx)%.s $(before-compile); $(compile-command.s) -$(objpfx)%.go: $(objpfx)%.s $(before-compile); $(compile-command.s) -$(objpfx)%.bo: $(objpfx)%.s $(before-compile); $(compile-command.s) + +define o-iterator-doit +$(objpfx)%$o: $(objpfx)%.s $(before-compile); $$(compile-command.s) +endef +object-suffixes-left := $(object-suffixes) +include $(o-iterator) $(objpfx)%.d: $(objpfx)%.s $(common-objpfx)dummy.d; $(make-dummy-dep) -$(objpfx)%.o: $(objpfx)%.c $(before-compile); $(compile-command.c) -$(objpfx)%.so: $(objpfx)%.c $(before-compile); $(compile-command.c) -$(objpfx)%.po: $(objpfx)%.c $(before-compile); $(compile-command.c) -$(objpfx)%.go: $(objpfx)%.c $(before-compile); $(compile-command.c) -$(objpfx)%.bo: $(objpfx)%.c $(before-compile); $(compile-command.c) + +define o-iterator-doit +$(objpfx)%$o: $(objpfx)%.c $(before-compile); $$(compile-command.c) +endef +object-suffixes-left := $(object-suffixes) +include $(o-iterator) $(objpfx)%.d: $(objpfx)%.c $(before-compile); $(+make-deps) endif @@ -391,12 +401,6 @@ headers := $(headers) $(sysdep_headers) override objects := $(addprefix $(objpfx),$(sources:.c=.o)) -# This variable is used in ``include $(o-iterator)'' after defining -# $(o-iterator-doit) to produce some desired rule using $o for the object -# suffix, and setting $(object-suffixes-left) to $(object-suffixes); a copy -# is produced for each object suffix in use. -o-iterator = $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-left)) - # The makefile may define $(extra-libs) with `libfoo libbar' # to build libfoo.a et al from the modules listed in $(libfoo-routines). ifdef extra-libs diff --git a/elf/dl-version.c b/elf/dl-version.c index ae1c2f34f7..2a6f1b94df 100644 --- a/elf/dl-version.c +++ b/elf/dl-version.c @@ -334,7 +334,7 @@ _dl_check_all_versions (struct link_map *map, int verbose) int result = 0; for (l = map; l != NULL; l = l->l_next) - result |= _dl_check_map_versions (l, verbose); + result |= l->l_opencount != 0 && _dl_check_map_versions (l, verbose); return result; } diff --git a/elf/rtld.c b/elf/rtld.c index eb7b3bec2a..9f18e23b91 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -79,7 +79,7 @@ RTLD_START #error "sysdeps/MACHINE/dl-machine.h fails to define RTLD_START" #endif -ElfW(Addr) +static ElfW(Addr) _dl_start (void *arg) { struct link_map bootstrap_map; @@ -126,6 +126,10 @@ _dl_start (void *arg) _dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr + _dl_rtld_map.l_info[DT_RPATH]->d_un.d_val); +#ifdef ELF_ADJUST_ARG + ELF_ADJUST_ARG(arg); +#endif + /* Call the OS-dependent function to set up life so we can do things like file access. It will call `dl_main' (below) to do all the real work of the dynamic linker, and then unwind our frame and run the user @@ -147,7 +151,7 @@ dl_main (const ElfW(Phdr) *phdr, ElfW(Addr) *user_entry) { const ElfW(Phdr) *ph; - struct link_map *l; + struct link_map *main_map; int lazy; enum { normal, list, verify, trace } mode; struct link_map **preloads; @@ -235,7 +239,7 @@ of this helper program; chances are you did not intend to run this program.\n", { void doit (void) { - l = _dl_map_object (NULL, _dl_argv[0], lt_library, 0); + main_map = _dl_map_object (NULL, _dl_argv[0], lt_library, 0); } char *err_str = NULL; const char *obj_name __attribute__ ((unused)); @@ -248,37 +252,23 @@ of this helper program; chances are you did not intend to run this program.\n", } } else - l = _dl_map_object (NULL, _dl_argv[0], lt_library, 0); + main_map = _dl_map_object (NULL, _dl_argv[0], lt_library, 0); - phdr = l->l_phdr; - phent = l->l_phnum; - l->l_name = (char *) ""; - *user_entry = l->l_entry; + phdr = main_map->l_phdr; + phent = main_map->l_phnum; + main_map->l_name = (char *) ""; + *user_entry = main_map->l_entry; } else { /* Create a link_map for the executable itself. This will be what dlopen on "" returns. */ - l = _dl_new_object ((char *) "", "", lt_executable); - if (l == NULL) + main_map = _dl_new_object ((char *) "", "", lt_executable); + if (main_map == NULL) _dl_sysdep_fatal ("cannot allocate memory for link map", NULL); - l->l_phdr = phdr; - l->l_phnum = phent; - l->l_entry = *user_entry; - } - - if (l != _dl_loaded) - { - /* GDB assumes that the first element on the chain is the - link_map for the executable itself, and always skips it. - Make sure the first one is indeed that one. */ - l->l_prev->l_next = l->l_next; - if (l->l_next) - l->l_next->l_prev = l->l_prev; - l->l_prev = NULL; - l->l_next = _dl_loaded; - _dl_loaded->l_prev = l; - _dl_loaded = l; + main_map->l_phdr = phdr; + main_map->l_phnum = phent; + main_map->l_entry = *user_entry; } /* Scan the program header table for the dynamic section. */ @@ -288,7 +278,7 @@ of this helper program; chances are you did not intend to run this program.\n", case PT_DYNAMIC: /* This tells us where to find the dynamic section, which tells us everything we need to do. */ - l->l |
