pullup from trunk
authorTom Yu <tlyu@mit.edu>
Wed, 23 Mar 2005 03:58:01 +0000 (03:58 +0000)
committerTom Yu <tlyu@mit.edu>
Wed, 23 Mar 2005 03:58:01 +0000 (03:58 +0000)
ticket: 2916
version_fixed: 1.4.1

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-4@17144 dc483132-0cff-0310-8789-dd5450dbe970

src/config/ChangeLog
src/config/lib.in
src/config/shlib.conf
src/include/ChangeLog
src/include/k5-platform.h
src/lib/gssapi/ChangeLog
src/lib/gssapi/Makefile.in
src/lib/krb5/ChangeLog
src/lib/krb5/Makefile.in
src/util/support/ChangeLog
src/util/support/threads.c

index 12e9786a3f9e44412bfe5c86d9b7a7750a4a59b1..ba2c712af574d456d6694f718761fb44993c5c34 100644 (file)
@@ -1,3 +1,18 @@
+2005-02-08  Ken Raeburn  <raeburn@mit.edu>
+
+       * lib.in (config.status): Change target to be in $thisconfigdir
+       rather than local.
+       (osf1.exports): Create a temporary file then rename into place.
+       Add options for library init/fini symbols, handling multiple
+       values.
+
+       * shlib.conf (case alpha*-dec-osf*): Don't handle init/fini
+       symbols here.
+       (case mips-sgi-irix*): Handle multiple init/fini symbols.  Always
+       set $initfini before it gets used.
+       (case *-*-solaris*, not gcc): Handle multiple init/fini symbols.
+       (case *-*-aix*): Handle multiple fini symbols.
+
 2004-12-17  Jeffrey Altman <jaltman@mit.edu>
 
         * win-pre.in: add -debug switch to LOPTS if DEBUG_SYMBOLS 
index 7ebdb3ff325864cad7c29e4170aeae5ff7500ad6..eea4601d594e03470a40615e5fa16455b3c91201 100644 (file)
@@ -57,7 +57,20 @@ binutils.versions: $(SHLIB_EXPORT_FILE) Makefile
        echo >> binutils.versions "};"
 
 osf1.exports: $(SHLIB_EXPORT_FILE) Makefile
-       sed "s/^/-exported_symbol /" < $(SHLIB_EXPORT_FILE) > osf1.exports
+       $(RM) osf1.tmp osf1.exports
+       sed "s/^/-exported_symbol /" < $(SHLIB_EXPORT_FILE) > osf1.tmp
+       for f in . $(LIBINITFUNC); do \
+         if test "$$f" != "." ; then \
+           echo " -init $$f"__auxinit >> osf1.tmp; \
+         else :; fi; \
+       done
+       a=""; \
+       for f in . $(LIBFINIFUNC); do \
+         if test "$$f" != "." ; then \
+           a="-fini $$f $$a"; \
+         else :; fi; \
+       done; echo " $$a" >> osf1.tmp; \
+       mv -f osf1.tmp osf1.exports
 
 lib$(LIBBASE)$(PFLIBEXT): $(PFOBJLISTS)
        $(RM) $@
@@ -120,7 +133,7 @@ install-profiled:
        $(RANLIB) $(DESTDIR)$(KRB5_LIBDIR)/lib$(LIBBASE)$(PFLIBEXT)
 
 Makefile: $(SRCTOP)/config/lib.in
-config.status: $(SRCTOP)/config/shlib.conf
+$(thisconfigdir)/config.status: $(SRCTOP)/config/shlib.conf
 
 # Use the following if links need to be made to $(TOPLIBD):
 # all-unix:: all-liblinks
index f5c6b84056416d9d1e87aac4fa1fa58e85d789bc..4d09e84e464448651a8513b8d612ec73d7d200ee 100644 (file)
@@ -38,7 +38,7 @@ alpha*-dec-osf*)
        SHLIBEXT=.so
        # Alpha OSF/1 doesn't need separate PIC objects
        SHOBJEXT=.o
-       INIT_FINI_PREP='if test -z "$(LIBINITFUNC)"; then initfini=""; else initfini="-Wl,-init,$(LIBINITFUNC)__auxinit"; fi; if test -z "$(LIBFINIFUNC)";then :;else initfini="$$initfini -Wl,-fini,$(LIBFINIFUNC)"; fi'
+       INIT_FINI_PREP=initfini=
        LDCOMBINE='$(CC) $(PTHREAD_CFLAGS) -shared -Wl,-expect_unresolved -Wl,\* -Wl,-update_registry -Wl,$(BUILDTOP)/so_locations -Wl,-soname -Wl,lib$(LIBBASE)$(SHLIBSEXT) -Wl,-hidden -Wl,-input,osf1.exports $$initfini'
        SHLIB_EXPORT_FILE_DEP=osf1.exports
        use_linker_init_option=yes
@@ -139,10 +139,11 @@ mips-sgi-irix*)
        SHOBJEXT=.o
        if test "$krb5_cv_prog_gcc" = yes; then
                LDCOMBINE_TAIL=""
+               INIT_FINI_PREP="initfini="
        else
                use_linker_init_option=yes
                use_linker_fini_option=yes
-               INIT_FINI_PREP='if test -z "$(LIBINITFUNC)"; then initfini=""; else initfini="-Wl,-init,$(LIBINITFUNC)__auxinit"; fi; if test -z "$(LIBFINIFUNC)";then :;else initfini="$$initfini -Wl,-fini,$(LIBFINIFUNC)"; fi'
+               INIT_FINI_PREP='initfini=; for f in . $(LIBINITFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-init,$${f}__auxinit"; fi; done; for f in . $(LIBFINIFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-fini,$${f}"; fi; done'
                LDCOMBINE_TAIL='-Wl,-exports_file -Wl,$(SHLIB_EXPORT_FILE)'
        fi
        LDCOMBINE='$(CC) -shared -Wl,-ignore_unresolved -Wl,-update_registry -Wl,$(BUILDTOP)/so_locations -Wl,-soname -Wl,lib$(LIBBASE)$(SHLIBSEXT) $$initfini'
@@ -279,6 +280,7 @@ mips-*-netbsd*)
                LDCOMBINE='$(CC) -dy -G -z text -h lib$(LIBBASE)$(SHLIBSEXT) $$initfini'
                #
                INIT_FINI_PREP='if test -z "$(LIBINITFUNC)"; then initfini=; else initfini="-Wl,-z,initarray=$(LIBINITFUNC)__auxinit"; fi ; if test -z "$(LIBFINIFUNC)"; then :; else initfini="$$initfini -Wl,-z,finiarray=$(LIBFINIFUNC)" ; fi'
+               INIT_FINI_PREP='initfini=; for f in . $(LIBINITFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-z,initarray=$${f}__auxinit"; fi; done; for f in . $(LIBFINIFUNC); do if test $$f = .; then :; else initfini="$$initfini -Wl,-z,finiarray=$$f"; fi; done'
                use_linker_init_option=yes
                use_linker_fini_option=yes
        fi
@@ -351,16 +353,17 @@ mips-*-netbsd*)
        SHLIB_EXPFLAGS='  $(SHLIB_DIRS) $(SHLIB_EXPLIBS)'
        PROFFLAGS=-pg
        if test "$krb5_cv_prog_gcc" = "yes" ; then
+         wl_prefix=-Wl,
          RPATH_FLAG='-Wl,-blibpath:'
          LDCOMBINE='$(CC) -shared -v -o shr.o.$(LIBMAJOR).$(LIBMINOR) $$objlist -nostartfiles -Xlinker -bgcbypass:1 -Xlinker -bfilelist -Xlinker -bM:SRE -Xlinker -bE:$(SHLIB_EXPORT_FILE) -Xlinker -bernotok $(SHLIB_EXPFLAGS) -lc $$initfini'
-         INIT_FINI_PREP='if test -z "$(LIBFINIFUNC)"; then initfini=""; else initfini="-Wl,-binitfini::$(LIBFINIFUNC):3"; fi'
-         use_linker_fini_option=yes
        else
+         wl_prefix=
          RPATH_FLAG=-blibpath:
          LDCOMBINE='/bin/ld -o shr.o.$(LIBMAJOR).$(LIBMINOR) $$objlist -H512 -T512 -bnoentry -bgcbypass:1 -bnodelcsect -bfilelist -bM:SRE -bE:$(SHLIB_EXPORT_FILE) -bernotok $(SHLIB_EXPFLAGS) -lc $$initfini'
-         INIT_FINI_PREP='if test -z "$(LIBFINIFUNC)"; then initfini=""; else initfini="-binitfini::$(LIBFINIFUNC):3"; fi'
-         use_linker_fini_option=yes
        fi
+       # Assume initialization always delayed.
+       INIT_FINI_PREP="wl=${wl_prefix}; "'i=1; initfini=; for f in . $(LIBFINIFUNC); do if test $$f != .; then initfini="$$initfini $${wl}-binitfini::$$f:$$i"; else :; fi; i=`expr $$i + 1`; done'
+       use_linker_fini_option=yes
        MAKE_SHLIB_COMMAND="${INIT_FINI_PREP} && ${LDCOMBINE}"' && ar cq $@ shr.o.$(LIBMAJOR).$(LIBMINOR) && chmod +x $@ && rm -f shr.o.$(LIBMAJOR).$(LIBMINOR)'
        RPATH_TAIL=:/usr/lib:/lib
        CC_LINK_SHARED='$(CC) $(PROG_LIBPATH) $(RPATH_FLAG)$(PROG_RPATH):'"$RPATH_TAIL"' $(CFLAGS) $(LDFLAGS)'
index 1f78907b75c076c24f8bc7801f7f12740e314037..33d4ceaace2cd7dd9cbeb03071e1de73b7803d85 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-08  Ken Raeburn  <raeburn@mit.edu>
+
+       * k5-platform.h (PROGRAM_EXITING) [__GNUC__ && !_WIN32 &&
+       CONSTRUCTOR_ATTR_WORKS]: Define as zero.
+
 2005-01-04  Jeffrey Altman <jaltman@mit.edu>
 
         * win-mac.h: define NEED_INSIXADDR_ANY for ipv6 symbol
index e0793f6290e2ba2e64e756b2dc717896cead4fdf..5c634bfc4100202782f7fa54bae8d347917a1347 100644 (file)
@@ -232,6 +232,8 @@ typedef struct { int error; unsigned char did_run; } k5_init_t;
         : (abort(),0))
 # define INITIALIZER_RAN(NAME) (JOIN__2(NAME,ran).did_run == 3 && JOIN__2(NAME, ran).error == 0)
 
+# define PROGRAM_EXITING()             (0)
+
 #elif defined(USE_LINKER_INIT_OPTION) || defined(_WIN32)
 
 /* Run initializer at load time, via linker magic, or in the
index af50c5e46dea5d08d9cd2619925807c46390bb8a..dbceda08c07fbac8588c730881c80bb60d4012a8 100644 (file)
@@ -1,3 +1,7 @@
+2005-02-08  Ken Raeburn  <raeburn@mit.edu>
+
+       * Makefile.in (LIBINITFUNC, LIBFINIFUNC): Define.
+
 2005-01-17  Jeffrey Altman <jaltman@mit.edu>
 
         * gss_libinit.c: implement cleanup of mutexes, static vars, etc for Windows
index a8f53dbe785550776f0ef21d96d12e6202296cc5..16ff510fe76468177e2c74e9553d1df1a5e81e64 100644 (file)
@@ -26,6 +26,8 @@ SRCS=\
 LIBBASE=gssapi_krb5
 LIBMAJOR=2
 LIBMINOR=2
+LIBINITFUNC=gssint_lib_init
+LIBFINIFUNC=gssint_lib_fini
 STOBJLISTS=OBJS.ST generic/OBJS.ST krb5/OBJS.ST
 SUBDIROBJLISTS=generic/OBJS.ST krb5/OBJS.ST
 SHLIB_EXPDEPS=\
index 698912e507ca3ca84d91adb83196e023daffad97..e1fc665433d407f44e750d453bfe4aa47938e684 100644 (file)
@@ -1,3 +1,7 @@
+2005-02-08  Ken Raeburn  <raeburn@mit.edu>
+
+       * Makefile.in (LIBINITFUNC, LIBFINIFUNC): Define.
+
 2005-01-17  Jeffrey Altman <jaltman@mit.edu>
 
         * krb5_libinit.c: implement library cleanup of mutexes, static vars, etc
index 736caf8ede91642af3d544f0333ae75b343ca20b..737e2a452c5a817bcf66298faaaf0e2c8d472412 100644 (file)
@@ -20,6 +20,8 @@ STLIBOBJS=krb5_libinit.o
 LIBBASE=krb5
 LIBMAJOR=3
 LIBMINOR=2
+LIBINITFUNC=profile_library_initializer krb5int_lib_init
+LIBFINIFUNC=profile_library_finalizer krb5int_lib_fini
 
 STOBJLISTS= \
        OBJS.ST \
index bfb973ed6bf4ac7d71bb41bb2c43e8df3ae4654a..ecffff7870c0474fed86db4f96f7845905f55fdd 100644 (file)
@@ -6,6 +6,13 @@
        interfering with the global list of thread specific data
        (used for library termination).
 
+2005-02-08  Ken Raeburn  <raeburn@mit.edu>
+
+       * threads.c (k5_key_delete) [pthread case]: Reset flags and
+       destructor function pointer to unset state.
+       (krb5int_thread_support_init, krb5int_thread_support_fini): If
+       SHOW_INITFINI_FUNCS is defined, print some tracing messages.
+
 2005-01-17  Jeffrey Altman <jaltman@mit.edu>
 
         * threads.c: implement cleanup of static vars on library
index 5eb85cdaa4e2f75400b292eab3a772f85bd27d01..15e991a8dcecd4eea7b0d279d69e68b1647a505e 100644 (file)
@@ -318,8 +318,21 @@ int k5_key_delete (k5_key_t keynum)
 
 #else /* POSIX */
 
-    /* Not written yet -- resource leak!  */
-    /* abort(); */
+    {
+       int err;
+
+       /* XXX RESOURCE LEAK:
+
+          Need to destroy the allocated objects first!  */
+
+       err = k5_mutex_lock(&key_lock);
+       if (err == 0) {
+           assert(destructors_set[keynum] == 1);
+           destructors_set[keynum] = 0;
+           destructors[keynum] = NULL;
+           k5_mutex_unlock(&key_lock);
+       }
+    }
 
 #endif
 
@@ -338,6 +351,10 @@ int krb5int_thread_support_init (void)
 {
     int err;
 
+#ifdef SHOW_INITFINI_FUNCS
+    printf("krb5int_thread_support_init\n");
+#endif
+
 #ifndef ENABLE_THREADS
 
     /* Nothing to do for TLS initialization.  */
@@ -373,6 +390,10 @@ void krb5int_thread_support_fini (void)
     if (! INITIALIZER_RAN (krb5int_thread_support_init))
        return;
 
+#ifdef SHOW_INITFINI_FUNCS
+    printf("krb5int_thread_support_fini\n");
+#endif
+
 #ifndef ENABLE_THREADS
 
     /* Do nothing.  */