update from main archive 960904
authordrepper <drepper>
Thu, 5 Sep 1996 02:44:12 +0000 (02:44 +0000)
committerdrepper <drepper>
Thu, 5 Sep 1996 02:44:12 +0000 (02:44 +0000)
14 files changed:
ChangeLog
MakeTAGS
Makeconfig
Makefile
Makerules
Rules
configure
configure.in
csu/gmon-start.c
db/Makefile
elf/dl-close.c
elf/dl-open.c
extra-lib.mk
version.c

index 12724a5..086524d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,132 @@
+Thu Sep  5 03:20:42 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       Change configuration and Makefiles to allow add-ons to have a
+       sysdeps/ directory hierachy.
+       * configure.in: Test for sysdeps/ directory in add-ons.  Before
+       all test and searches in these hierachies, too.
+       * Makeconfig (full-config-subdirs): Define based on $(config-sysdirs).
+       Extend with $(..) if not absolute path.
+       Use $(full-config-subdirs) where $(config-sysdirs) was used.
+       * Makefile ($(objpfx)sysd-dirs): Use config-sysdirs.
+       * MakeTAGS: Use $(full-config-subdirs).
+       * Makerules: Change comment to libc.so link script.
+       (sysdirs): Define based on $(full-config-subdirs).
+       (sysd-Makefile): Define using config-sysdirs.
+       (sysd-rules): Likewise.
+       * sysdeps/unix/Makefile (sysd-syscalls): Define based on +sysdep-dirs.
+       * sysdeps/unix/make-syscalls.sh: Remove basedir argument.
+
+Wed Sep  4 01:32:21 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/m68k/fpu/k_cos.c: Rewritten for better accuracy.
+       * sysdeps/m68k/fpu/k_sin.c: Likewise.
+       * sysdeps/m68k/fpu/k_tan.c: Likewise.
+
+Thu Sep  5 01:06:09 1996  Richard Henderson  <rth@tamu.edu>
+
+       * malloc/free.c (free): Protect by using __libc_malloc_lock.
+       * malloc/malloc-find.c (malloc_find_object_address): Likewise.
+       * malloc/malloc-size.c (malloc_usable_size): Likewise.
+       * malloc/malloc-walk.c (malloc_walk): Likewise.
+       * malloc/memalign.c (memalign): Likewise.
+       * malloc/realloc.c (realloc): Likewise.
+       * malloc/malloc.c: Define __libc_malloc_lock.
+       (_malloc_internal): Don't use `malloc'.  Instead look for
+       `__malloc_hook' or call `_malloc_internal'.
+       (malloc): Protect by using `__libc_malloc_lock'.
+       * malloc/malloc.h: Declare `__libc_malloc_lock'.
+
+Mon Sep  2 22:42:59 1996  Richard Henderson  <rth@tamu.edu>
+
+       * sysdeps/alpha/elf/start.S: Use weak_alias for __start
+       instead of the hard definition.
+
+       * sysdeps/alpha/dl-machine.h (RTLD_START): Add type info for
+       _start and _dl_start_user.
+
+       * sysdeps/unix/sysv/linux/alpha/init-first.h (SYSDEP_CALL_INIT):
+       Make _dl_starting_up weak.  Add type info for NAME.
+
+Mon Sep  2 22:15:14 1996  Richard Henderson  <rth@tamu.edu>
+
+       * Makefile (all): Add extra_solibs pass.
+       (+subdir_targets): Same.
+       * Rules (extra_solibs): New phony empty target for subdirs without
+       extra libs.
+       * extra-lib.mk: Build lib*.so* in extra_solibs not lib-noranlib.
+       * manual/Makefile: Add dummy extra_solibs target.
+
+Sun Sep  1 15:41:22 1996  Richard Henderson  <rth@tamu.edu>
+
+       * Makeconfig (+link): Add $(link-extra-libs).
+       (link-extra-libs): New variable which expands to the full paths of
+       the other libraries needed by a program, as controled by LDLIBS-$(@F).
+       * db/Makefile: Use LDLIBS-makedb to link libdb not a dependency, as
+       the later attempts to install the library before linking it.
+
+       * sysdeps/unix/alpha/sysdep.S: Align errno.
+
+       * sysdeps/unix/sysv/linux/alpha/ioperm.c (struct platform): Add
+       hae_shift entry.
+       (io): Move bus_memory_base and sparse_bus_memory_base into struct.
+       (_hae_shift): New function.
+       * sysdeps/unix/sysv/linux/alpha/sys/io.h: New file.  Prototypes
+       for the bus query functions.
+
+Sat Aug 31 18:14:54 1996  Richard Henderson  <rth@tamu.edu>
+
+       * elf/dl-close.c (_dl_close): In static executables, map->l_prev
+       can be NULL when unloading a library.
+
+       * elf/dl-open.c (_dl_open): Pass __environ instead of __libc_envp
+       to the library .init function.
+
+       * sysdeps/alpha/dl-machine.h (elf_machine_rela):  Since we omitted
+       part of the COPY reloc processing earlier, omit the rest now --
+       we'll get into less trouble later when some fool does use a COPY.
+
+       * sysdeps/unix/sysv/linux/init-first.c (init): Accept argc et al as
+       parameters.  Move all argc and __libc_multiple_libcs calculation out
+       to init-first.h.  Use __environ not __libc_envp.
+       * sysdeps/unix/sysv/linux/alpha/init-first.h: Rewrite.
+       * sysdeps/unix/sysv/linux/i386/init-first.h: Rewrite.
+
+Thu Aug 29 20:26:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * sysdeps/posix/profil.c (profil): Don't clobber saved timer and
+       signal settings when profiling was already turned on.
+
+       * csu/gmon-start.c (__gmon_start__) [HAVE_INITFINI]: Protect from
+       being called twice.
+
+Wed Sep  4 01:31:50 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * sysdeps/unix/sysv/linux/i386/mmap.S: Test for
+       0 < return value < -4096 and not < 0 to decide about failure.
+       Reported by Andreas Jaeger.
+
+Tue Sep  3 19:04:05 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * stdio-common/vfscanf.c (__vfscanf): Don't count EOF char
+       in %c format.
+
+Sat Aug 31 18:10:51 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * wcsmbs/wchar.h: Define prototypes for wcstoq and wcstouq only
+       #ifdef __USE_GNU.
+
+Sat Aug 31 12:34:29 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * version.c: Add missing newline character in banner.
+
+       * sysdeps/unix/sysv/linux/alpha/Dist: Correct typo.
+       * sysdeps/unix/sysv/linux/i386/Dist: Likewise.
+
+Sat Aug 31 03:07:39 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intl/l10nflist.c (_nl_normalize_codeset): We convert to lower
+       case, so don't prepend uppercase `ISO' for only numeric arg.
+
 Tue Sep  3 11:16:07 1996  Thomas Bushnell/ n/BSG  <thomas@gnu.ai.mit.edu>
 
        * shadow/lckpwdf.c (__ulckpwdf): Don't take address of LOCK in
index 0e7eecd..dcbea93 100644 (file)
--- a/MakeTAGS
+++ b/MakeTAGS
@@ -39,7 +39,7 @@ tags_sources = $(all-sources) $(all-headers) $(all-dist)
 endif  # ctype
 endif  # No tags_sources
 
-sysdep-dirs := $(addprefix $(sysdep_dir)/,$(sysdirs))
+sysdep-dirs := $(full-config-subdirs)
 
 ifndef sysdep_dirs
 # Find all sysdep directories.
index d3d7890..e62608d 100644 (file)
@@ -78,10 +78,14 @@ endif
 sysdep_dir := $(..)sysdeps
 export sysdep_dir := $(sysdep_dir)
 
-
 # Get the values defined by options to `configure'.
 include $(common-objpfx)config.make
 
+# Complete path to sysdep dirs.
+full-config-sysdirs := $(filter /%, $(config-sysdirs)) \
+                      $(addprefix $(..), $(filter-out /%, $(config-sysdirs)))
+export full-config-sysdirs := $(full-config-sysdirs)
+
 # Run config.status to update config.make and config.h.  We don't show the
 # dependence of config.h to Make, because it is only touched when it
 # changes and so config.status would be run every time; the dependence of
@@ -93,12 +97,12 @@ $(common-objpfx)config.make: $(common-objpfx)config.status $(..)config.h.in
 # Find all the sysdeps configure fragments, to make sure we re-run
 # configure when any of them changes.
 $(common-objpfx)config.status: $(..)configure \
-                              $(foreach dir,$(config-sysdirs),\
+                              $(foreach dir,$(full-config-sysdirs),\
                                         $(wildcard \
-                                          $(sysdep_dir)/$(dir)/Implies) \
+                                          $(dir)/Implies) \
                                         $(patsubst %.in,%,\
                                                    $(firstword $(wildcard \
- $(addprefix $(sysdep_dir)/$(dir)/,configure configure.in)))))
+ $(addprefix $(dir)/,configure configure.in)))))
        @cd $(@D); if test -f $(@F); then exec $(SHELL) $(@F) --recheck; else \
         echo The GNU C library has not been configured. >&2; \
         echo Run \`configure\' to configure it before building. >&2; \
@@ -299,8 +303,8 @@ ifndef +link
 +link = $(CC) -nostdlib -nostartfiles -o $@ \
              $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS)  \
              $(addprefix $(csu-objpfx),start.o) $(+preinit) \
-             $(filter-out $(common-objpfx)libc%,$^) $(link-libc) \
-             $(+postinit)
+             $(filter-out $(common-objpfx)libc%,$^) \
+             $(link-extra-libs) $(link-libc) $(+postinit)
 endif
 ifndef config-LDFLAGS
 ifeq (yes,$(build-shared))
@@ -330,6 +334,13 @@ else
 link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
 endif
 endif
+ifndef link-extra-libs
+ifeq (yes,$(build-shared))
+link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).so$($(notdir $(lib)).so-version))
+else
+link-extra-libs = $(foreach lib,$(LDLIBS-$(@F)),$(common-objpfx)$(lib).a)
+endif
+endif
 ifndef gnulib
 gnulib := -lgcc
 endif
@@ -339,6 +350,7 @@ ifeq ($(elf),yes)
 endif
 csu-objpfx = $(common-objpfx)csu/
 elf-objpfx = $(common-objpfx)elf/
+db-objpfx = $(common-objpfx)db/
 
 ifeq (yes,$(build-shared))
 # The name under which the run-time dynamic linker is installed.
index d269a9f..b502895 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@ endif
 
 # This is the default target; it makes everything except the tests.
 .PHONY: all
-all: lib others
+all: lib extra_solibs others
 \f
 define autoconf-it
 @-rm -f $@.new
@@ -73,14 +73,13 @@ subdirs     := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
 
 
 # These are the targets that are made by making them in each subdirectory.
-+subdir_targets        := subdir_lib objects objs others subdir_mostlyclean    \
-                  subdir_clean subdir_distclean subdir_realclean       \
-                  tests subdir_lint.out                                \
++subdir_targets        := subdir_lib extra_solibs objects objs others          \
+                  subdir_mostlyclean subdir_clean subdir_distclean     \
+                  subdir_realclean tests subdir_lint.out               \
                   subdir_distinfo                                      \
                   subdir_echo-headers subdir_echo-distinfo             \
-                  subdir_install $(addprefix install-,                 \
-                                             no-libc.a bin lib         \
-                                             data headers others)
+                  subdir_install                                       \
+                  $(addprefix install-, no-libc.a bin lib data headers others)
 \f
 headers := errno.h sys/errno.h errnos.h limits.h values.h      \
           features.h gnu-versions.h libc-lock.h
@@ -117,9 +116,13 @@ endif
 
 $(objpfx)sysd-dirs: $(+sysdir_pfx)config.make
        (echo define sysdep-subdirs;                                          \
-        for dir in $(sysdirs); do                                            \
-          if [ -r $(sysdep_dir)/$$dir/Subdirs ]; then                        \
-            sed 's/#.*$$//' $(sysdep_dir)/$$dir/Subdirs;                     \
+        for sysdir in $(config-sysdirs); do                                  \
+          case $$sysdir in                                                   \
+            /*) dir=$$sysdir ;;                                              \
+            *)  dir=$(..)$$sysdir ;;                                         \
+          esac;                                                              \
+          if [ -r $$dir/Subdirs ]; then                                      \
+            sed 's/#.*$$//' $$dir/Subdirs;                                   \
           else true;                                                         \
           fi;                                                                \
         done;                                                                \
index 2b75154..441e24c 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -56,13 +56,13 @@ include $(..)Makeconfig
 endif
 
 # `configure' writes a definition of `config-sysdirs' in `config.make'.
-sysdirs = $(config-sysdirs)
+sysdirs = $(strip $(full-config-sysdirs))
 
 +sysdir_pfx = $(common-objpfx)
 
 export sysdirs := $(sysdirs)
 
-+sysdep_dirs := $(addprefix $(sysdep_dir)/,$(sysdirs))
++sysdep_dirs := $(full-config-sysdirs)
 ifdef objdir
 +sysdep_dirs := $(objdir) $(+sysdep_dirs)
 endif
@@ -86,8 +86,7 @@ endif
 # appropriate and not worry about where foo.h comes from, which may be
 # system dependent and not known by that Makefile.
 vpath %.h $(subst $(empty) ,:,$(strip $(common-objpfx) $(objpfx) \
-                                     $(addprefix $(sysdep_dir)/,$(sysdirs)) \
-                                     $(..)))
+                                     $(+sysdep_dirs) $(..)))
 
 # Some sysdep makefiles use this to distinguish being included here from
 # being included individually by a subdir makefile (hurd/Makefile needs this).
@@ -95,18 +94,21 @@ in-Makerules := yes
 
 ifndef avoid-generated
 -include $(+sysdir_pfx)sysd-Makefile
-ifneq ($(sysd-Makefile-sysdirs),$(sysdirs))
+ifneq ($(sysd-Makefile-sysdirs),$(config-sysdirs))
 sysd-Makefile-force = FORCE
 FORCE:
 endif
 $(+sysdir_pfx)sysd-Makefile: $(+sysdir_pfx)config.make $(..)Makerules \
                             $(sysd-Makefile-force)
        -@rm -f $@T
-       (echo 'sysd-Makefile-sysdirs := $(sysdirs)';                          \
-        for dir in $(sysdirs); do                                            \
-          file=sysdeps/$$dir/Makefile;                                       \
-          if [ -f $(..)$$file ]; then                                        \
-            echo include "\$$(..)$$file";                                    \
+       (echo 'sysd-Makefile-sysdirs := $(config-sysdirs)';                   \
+        for dir in $(config-sysdirs); do                                     \
+          file=$$dir/Makefile;                                               \
+          if [ -f $$file ]; then                                             \
+            case $$dir in                                                    \
+              /*) echo include "$$file" ;;                                   \
+              *)  echo include "\$$(..)$$file" ;;                            \
+            esac;                                                            \
           else true; fi;                                                     \
         done; \
         echo 'sysd-Makefile-done=t') > $@T
@@ -213,8 +215,8 @@ endif
 # contents of sysd-rules.
 ifdef sysd-Makefile-done
 -include $(+sysdir_pfx)sysd-rules
-ifneq ($(sysd-rules-sysdirs),$(sysdirs))
-# The value of $(sysdirs) the sysd-rules was computed for
+ifneq ($(sysd-rules-sysdirs),$(config-sysdirs))
+# The value of $(+sysdep_dirs) the sysd-rules was computed for
 # differs from the one we are using now.  So force a rebuild of sysd-rules.
 sysd-rules-force = FORCE
 FORCE:
@@ -222,12 +224,15 @@ endif
 endif
 $(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \
                          $(wildcard $(foreach dir,$(sysdirs),\
-                                              $(sysdep_dir)/$(dir)/Makefile))\
+                                              $(dir)/Makefile))\
                          $(sysd-rules-force)
        -@rm -f $@T
-       (echo 'sysd-rules-sysdirs := $(sysdirs)';                             \
-        for sysdir in $(sysdirs); do                                         \
-          dir="\$$(sysdep_dir)/$$sysdir";                                    \
+       (echo 'sysd-rules-sysdirs := $(config-sysdirs)';                      \
+        for sysdir in $(config-sysdirs); do                                  \
+          case $$sysdir in \
+            /*) dir=$$sysdir ;; \
+            *)  dir="\$$(..)$$sysdir" ;; \
+          esac; \
           for o in $(object-suffixes); do \
             $(open-check-inhibit-asm) \
             echo "\$$(objpfx)%$$o: $$dir/%.S \$$(before-compile); \
@@ -596,10 +601,10 @@ $(slibdir)/libc-$(version).so: $(common-objpfx)libc.so; $(do-install-program)
 install: $(slibdir)/libc.so$(libc.so-version)
 
 ifndef subdir
-# What we install as libc.so for programs to link against is in fact an
-# archive.  It contains the various $(static-only-routines) objects, and
-# the special object libc-syms.so that contains just the dynamic symbol
-# table of the shared libc object.
+# What we install as libc.so for programs to link against is in fact a
+# link script.  It contains references for the various libraries we need.
+# The libc.so object is not complete since some functions are only defined
+# in libc.a and the dynamic linker is an etra object.
 install: $(libdir)/libc.so
 $(libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
                   $(elfobjdir)/$(rtld-installed-name) \
diff --git a/Rules b/Rules
index 8d4f51f..507ec45 100644 (file)
--- a/Rules
+++ b/Rules
@@ -107,13 +107,14 @@ $(objpfx)%.out: /dev/null $(objpfx)%      # Make it 2nd arg for canned sequence.
 endif  # tests
 \f
 .PHONY: distclean realclean subdir_distclean subdir_realclean \
-       subdir_clean subdir_mostlyclean
+       subdir_clean subdir_mostlyclean extra_solibs
 subdir_mostlyclean: mostlyclean
 subdir_clean: clean
 subdir_distclean: distclean
 subdir_realclean: realclean
 realclean: distclean
 distclean: clean
+extra_solibs:
 
 .PHONY: subdir_echo-headers
 subdir_echo-headers: echo-headers
@@ -135,7 +136,6 @@ subdir_dist: dist
 
 # Convenient target to update all the generated source files.
 .PHONY: generated
-generated: $(addprefix $(objpfx),$(generated)) 
 generated: $(addprefix $(common-objpfx),$(common-generated))
 
 ifndef libc.so-version
index 522d64f..68aa0d7 100755 (executable)
--- a/configure
+++ b/configure
@@ -689,6 +689,12 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 
 subdirs="$add_ons"
 
+add_ons_pfx=
+if test x$add_ons != x; then
+  for f in $add_ons; do
+    add_ons_pfx="$add_ons_pfx $f/"
+  done
+fi
 
 
 # Make sure we can run config.sub.
@@ -819,23 +825,34 @@ done
 
 # Find what sysdep directories exist.
 sysnames=
-for b in $base ''; do
-  for m0 in $mach ''; do
-    for v in /$vendor ''; do
-      for o in /$ostry ''; do
-       for m in $mach ''; do
-         try="$m0$b$v$o$m"
-         test -n "$enable_debug_configure" && echo "$0 DEBUG: try $try" >&2
-         if test -d $sysdep_dir$try; then
-           sysnames="$sysnames $try"
-           { test -n "$o" || test -n "$b"; } && os_used=t
-           { test -n "$m" || test -n "$m0"; } && machine_used=t
-         fi
+IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+for d in $add_ons_pfx ''; do
+  for b in $base ''; do
+    for m0 in $mach ''; do
+      for v in /$vendor ''; do
+       for o in /$ostry ''; do
+         for m in $mach ''; do
+           if test "$m0$b$v$o$m"; then
+             try="${d}sysdeps$m0$b$v$o$m"
+             test -n "$enable_debug_configure" &&
+             echo "$0 DEBUG: try $try" >&2
+             case $try in
+               /*) dest=$try ;;
+               *)  dest=$srcdir/$try ;;
+             esac
+             if test -d $dest; then
+               sysnames="$sysnames $try"
+               { test -n "$o" || test -n "$b"; } && os_used=t
+               { test -n "$m" || test -n "$m0"; } && machine_used=t
+             fi
+           fi
+         done
        done
       done
     done
   done
 done
+IFS="$ac_save_ifs"
 
 if test -z "$os_used" && test "$os" != none; then
   { echo "configure: error: Operating system $os is not supported." 1>&2; exit 1; }
@@ -854,12 +871,18 @@ fi
 # machine (otherwise what's the point of an ABI?).
 if test "$elf" = yes; then
   elf_dirs=
-  for m in $mach; do
-    if test -d $sysdep_dir$m/elf; then
-      elf_dirs="$elf_dirs $m/elf"
-    fi
+  for d in $add_ons_pfx ''; do
+    case $d in
+      /*) xsrcdir= ;;
+      *)  xsrcdir=$srcdir/ ;;
+    esac
+    for m in $mach; do
+      if test -d $xsrcdir${d}sysdeps$m/elf; then
+       elf_dirs="$elf_dirs $d$m/elf"
+      fi
+    done
   done
-  sysnames="`echo $elf_dirs | sed -e 's,^/,,' -e 's, /,,g'` $sysnames"
+  sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
 fi
 
 
@@ -883,13 +906,25 @@ while test $# -gt 0; do
   # Report each name as we discover it, so there is no long pause in output.
   echo $ac_n "$name $ac_c" >&6
 
-  if test -f $sysdep_dir/$name/Implies; then
+  name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
+
+  case $name in
+    /*) xsrcdir= ;;
+    *)  xsrcdir=$srcdir/ ;;
+  esac
+  test -n "$enable_debug_configure" &&
+  echo "DEBUG: name/Implies $xsrcdir$name/Implies" >&2
+
+  if test -f $xsrcdir$name/Implies; then
     # Collect more names from the `Implies' file (removing comments).
-    implied="`sed 's/#.*$//' < $sysdep_dir/$name/Implies`"
-    for x in $implied; do
-      test -d $sysdep_dir/$x || {
-        echo "configure: warning: sysdeps/$name/Implies specifies nonexistent $x" 1>&2
-      }
+    implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`"
+    implied=
+    for x in $implied_candidate; do
+      if test -d $xsrcdir$name_base/$x; then
+       implied="$implied $name_base/$x";
+      else
+        echo "configure: warning: $name/Implies specifies nonexistent $x" 1>&2
+      fi
     done
   else
     implied=
@@ -899,7 +934,7 @@ while test $# -gt 0; do
   names="$names $name"
 
   # Find the parent of NAME, using the empty string if it has none.
-  parent="`echo $name | sed -n -e '/\//!q' -e 's=/[^/]*$==p'`"
+  parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
 
   # Add the names implied by NAME, and NAME's parent (if it has one), to
   # the list of names to be processed (the argument list).  We prepend the
@@ -913,10 +948,10 @@ while test $# -gt 0; do
 done
 
 # Add the default directories.
-sysnames="$names generic stub"
+sysnames="$names sysdeps/generic sysdeps/stub"
 
 # The other names were emitted during the scan.
-echo "$ac_t""generic stub" 1>&6
+echo "$ac_t""sysdeps/generic sysdeps/stub" 1>&6
 
 
 ### Locate tools.
@@ -1139,13 +1174,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1143 "configure"
+#line 1178 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1184: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1154,13 +1189,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1158 "configure"
+#line 1193 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1164: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1199: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1302,7 +1337,7 @@ if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1306 "configure"
+#line 1341 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -1318,7 +1353,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:1322: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1357: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -1425,7 +1460,7 @@ if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1429 "configure"
+#line 1464 "configure"
 #include "confdefs.h"
 
 int main() { return 0; }
@@ -1435,7 +1470,7 @@ asm (".section .init");
                                    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:1439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1474: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -1463,7 +1498,7 @@ if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1467 "configure"
+#line 1502 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() { return 0; }
@@ -1471,7 +1506,7 @@ int t() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:1475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -1565,7 +1600,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles -Wl,--no-whole-archive
-                           -o conftest conftest.c'; { (eval echo configure:1569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c'; { (eval echo configure:1604: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_ld_no_whole_archive=yes
 else
   libc_cv_ld_no_whole_archive=no
@@ -1586,7 +1621,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
                            -nostdlib -nostartfiles -fno-exceptions
-                           -o conftest conftest.c'; { (eval echo configure:1590: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+                           -o conftest conftest.c'; { (eval echo configure:1625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
@@ -1607,9 +1642,13 @@ libc_link_sources=
 # configure fragments, and looking for a uname implementation.
 uname=
 for dir in $sysnames; do
-  if test -r $sysdep_dir/$dir/configure; then
-    echo "$ac_t""running configure fragment for $dir" 1>&6
-    . $sysdep_dir/$dir/configure
+  case $dir in
+    /*) dest=$dir ;;
+    *)  dest=$srcdir/$dir ;;
+  esac
+  if test -r $dest/configure; then
+    echo "$ac_t""running configure fragment for $dest" 1>&6
+    . $dest/configure
   fi
 
   if test -z "$uname"; then
index 8939236..d5370f8 100644 (file)
@@ -77,6 +77,12 @@ AC_ARG_ENABLE(add-ons, dnl
              [add_ons=`echo "$enableval" | sed 's/,/ /g'`],
              [add_ons=])
 AC_CONFIG_SUBDIRS($add_ons)
+add_ons_pfx=
+if test x$add_ons != x; then
+  for f in $add_ons; do
+    add_ons_pfx="$add_ons_pfx $f/"
+  done
+fi
 
 AC_CANONICAL_HOST
 # We keep the original values in `$config_*' and never modify them, so we
@@ -189,23 +195,34 @@ changequote([,])dnl
 
 # Find what sysdep directories exist.
 sysnames=
-for b in $base ''; do
-  for m0 in $mach ''; do
-    for v in /$vendor ''; do
-      for o in /$ostry ''; do
-       for m in $mach ''; do
-         try="$m0$b$v$o$m"
-         test -n "$enable_debug_configure" && echo "$0 [DEBUG]: try $try" >&2
-         if test -d $sysdep_dir$try; then
-           sysnames="$sysnames $try"
-           { test -n "$o" || test -n "$b"; } && os_used=t
-           { test -n "$m" || test -n "$m0"; } && machine_used=t
-         fi
+IFS="${IFS=    }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+for d in $add_ons_pfx ''; do
+  for b in $base ''; do
+    for m0 in $mach ''; do
+      for v in /$vendor ''; do
+       for o in /$ostry ''; do
+         for m in $mach ''; do
+           if test "$m0$b$v$o$m"; then
+             try="${d}sysdeps$m0$b$v$o$m"
+             test -n "$enable_debug_configure" &&
+             echo "$0 [DEBUG]: try $try" >&2
+             case $try in
+               /*) dest=$try ;;
+               *)  dest=$srcdir/$try ;;
+             esac
+             if test -d $dest; then
+               sysnames="$sysnames $try"
+               { test -n "$o" || test -n "$b"; } && os_used=t
+               { test -n "$m" || test -n "$m0"; } && machine_used=t
+             fi
+           fi
+         done
        done
       done
     done
   done
 done
+IFS="$ac_save_ifs"
 
 if test -z "$os_used" && test "$os" != none; then
   AC_MSG_ERROR(Operating system $os is not supported.)
@@ -224,12 +241,18 @@ fi
 # machine (otherwise what's the point of an ABI?).
 if test "$elf" = yes; then
   elf_dirs=
-  for m in $mach; do
-    if test -d $sysdep_dir$m/elf; then
-      elf_dirs="$elf_dirs $m/elf"
-    fi
+  for d in $add_ons_pfx ''; do
+    case $d in
+      /*) xsrcdir= ;;
+      *)  xsrcdir=$srcdir/ ;;
+    esac
+    for m in $mach; do
+      if test -d $xsrcdir${d}sysdeps$m/elf; then
+       elf_dirs="$elf_dirs $d$m/elf"
+      fi
+    done
   done
-  sysnames="`echo $elf_dirs | sed -e 's,^/,,' -e 's, /,,g'` $sysnames"
+  sysnames="`echo $elf_dirs | sed -e 's,//,/,g'` $sysnames"
 fi
 
 
@@ -253,13 +276,25 @@ while test $# -gt 0; do
   # Report each name as we discover it, so there is no long pause in output.
   echo $ac_n "$name $ac_c" >&AC_FD_MSG
 
-  if test -f $sysdep_dir/$name/Implies; then
+  name_base=`echo $name | sed -e 's@\(.*sysdeps\)/.*@\1@'`
+
+  case $name in
+    /*) xsrcdir= ;;
+    *)  xsrcdir=$srcdir/ ;;
+  esac
+  test -n "$enable_debug_configure" &&
+  echo "[DEBUG]: name/Implies $xsrcdir$name/Implies" >&2
+
+  if test -f $xsrcdir$name/Implies; then
     # Collect more names from the `Implies' file (removing comments).
-    implied="`sed 's/#.*$//' < $sysdep_dir/$name/Implies`"
-    for x in $implied; do
-      test -d $sysdep_dir/$x || {
-        AC_MSG_WARN(sysdeps/$name/Implies specifies nonexistent $x)
-      }
+    implied_candidate="`sed 's/#.*$//' < $xsrcdir$name/Implies`"
+    implied=
+    for x in $implied_candidate; do
+      if test -d $xsrcdir$name_base/$x; then
+       implied="$implied $name_base/$x";
+      else
+        AC_MSG_WARN($name/Implies specifies nonexistent $x)
+      fi
     done
   else
     implied=
@@ -270,7 +305,7 @@ while test $# -gt 0; do
 
   # Find the parent of NAME, using the empty string if it has none.
 changequote(,)dnl
-  parent="`echo $name | sed -n -e '/\//!q' -e 's=/[^/]*$==p'`"
+  parent="`echo $name | sed -n -e 's=/[^/]*$==' -e '/sysdeps$/q' -e p`"
 changequote([,])dnl
 
   # Add the names implied by NAME, and NAME's parent (if it has one), to
@@ -285,10 +320,10 @@ changequote([,])dnl
 done
 
 # Add the default directories.
-sysnames="$names generic stub"
+sysnames="$names sysdeps/generic sysdeps/stub"
 AC_SUBST(sysnames)
 # The other names were emitted during the scan.
-AC_MSG_RESULT(generic stub)
+AC_MSG_RESULT(sysdeps/generic sysdeps/stub)
 
 
 ### Locate tools.
@@ -525,9 +560,13 @@ libc_link_sources=
 # configure fragments, and looking for a uname implementation.
 uname=
 for dir in $sysnames; do
-  if test -r $sysdep_dir/$dir/configure; then
-    AC_MSG_RESULT(running configure fragment for $dir)
-    . $sysdep_dir/$dir/configure
+  case $dir in
+    /*) dest=$dir ;;
+    *)  dest=$srcdir/$dir ;;
+  esac
+  if test -r $dest/configure; then
+    AC_MSG_RESULT(running configure fragment for $dest)
+    . $dest/configure
   fi
 [
   if test -z "$uname"; then
index aaff084..9139306 100644 (file)
@@ -40,6 +40,15 @@ void __gmon_start__ (void) __attribute__ ((constructor));
 void
 __gmon_start__ (void)
 {
+#ifdef HAVE_INITFINI
+  /* Protect from being called more than once.  Since crti.o is linked
+     into every shared library, each of their init functions will call us.  */
+  static int called;
+
+  if (called++)
+    return;
+#endif
+
   /* Start keeping profiling records.  */
   monstartup ((u_long) &_start, (u_long) &etext);
 
@@ -47,4 +56,3 @@ __gmon_start__ (void)
      collected data.  */
   atexit (&_mcleanup);
 }
-
index e5a6055..9613c2e 100644 (file)
@@ -39,4 +39,4 @@ CFLAGS-hash_func.c := -Wno-unused
 # The db code outsmarts the compiler frequently.
 override CFLAGS += -Wno-uninitialized
 
-$(objpfx)makedb: -ldb
+LDLIBS-makedb := db/libdb
index 184d382..0a16d69 100644 (file)
@@ -99,7 +99,8 @@ _dl_close (struct link_map *map)
              }
 
          /* Finally, unlink the data structure and free it.  */
-         map->l_prev->l_next = map->l_next;
+         if (map->l_prev)
+           map->l_prev->l_next = map->l_next;
          if (map->l_next)
            map->l_next->l_prev = map->l_prev;
          if (map->l_searchlist)
index 76f6329..ff19f81 100644 (file)
@@ -29,8 +29,8 @@ extern int __libc_multiple_libcs;     /* Defined in init-first.c.  */
 
 extern int __libc_argc;
 extern char **__libc_argv;
-extern char **__libc_envp;
 
+extern char **__environ;
 
 size_t _dl_global_scope_alloc;
 
@@ -142,7 +142,7 @@ _dl_open (const char *file, int mode)
   /* Run the initializer functions of new objects.  */
   while (init = _dl_init_next (new))
     (*(void (*) (int, char **, char **)) init) (__libc_argc, __libc_argv,
-                                               __libc_envp);
+                                               __environ);
 
   if (dl_start_ptr == NULL)
     /* We must be the static _dl_open in libc.a because ld.so.1 is not
index e608894..1db7520 100644 (file)
@@ -28,7 +28,7 @@ alltypes-$(lib) := $(foreach o,$(object-suffixes-$(lib)),\
 ifeq (,$(filter $(lib),$(extra-libs-others)))
 lib-noranlib: $(alltypes-$(lib))
 ifeq (yes,$(build-shared))
-lib-noranlib: $(objpfx)$(lib).so$($(lib).so-version)
+extra_solibs: $(objpfx)$(lib).so$($(lib).so-version)
 endif
 else
 others: $(alltypes-$(lib))
@@ -37,7 +37,7 @@ endif
 # The linked shared library is never a dependent of lib-noranlib,
 # because linking it will depend on libc.so already being built.
 ifneq (,$(filter .so,$(object-suffixes-$(lib))))
-others: $(objpfx)$(lib).so
+extra_solibs: $(objpfx)$(lib).so
 endif
 
 
index 8fc5cfe..c8f4ec5 100644 (file)
--- a/version.c
+++ b/version.c
@@ -27,7 +27,7 @@ Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
 PARTICULAR PURPOSE.\n\
-Report bugs to <bug-glibc@gnu.ai.mit.edu>.";
+Report bugs to <bug-glibc@gnu.ai.mit.edu>.\n";
 
 #include <unistd.h>