1998-05-20  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* Makeconfig (rpath-link): Add resolvobjdir.
	(resolvobjdir): New variable.
	Reported by Peter Breitenlohner <peb@mppmu.mpg.de> [fixes PR libc/633].

1998-05-20 09:36  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-close.c: Call shared object terminators at the right time.
	Patch by Philippe Troin <phil@fifi.org>.

1998-05-20  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Make-dist (+tsrcs): Also add *.map for every member of
	$(extra-libs).

	* Makefile (distribute): Don't distribute scripts/printsources and
	scripts/=__ify.  Distribute FAQ.in.
	(rpm/%): Don't pass subdirs to sub-make.

	* timezone/Makefile: Protect inclusion of z.* by $(avoid-generated)
	instead of $(no_deps).

1998-05-19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/generic/setenv.c: Protect against GNU C extension.
	(KNOWN_VALUE, STORE_VALUE): Do it right.
	(setenv): Remove unused variable.

1998-05-18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* timezone/Makefile (tz-cflags): Define TM_GMTOFF and TM_ZONE.
	(CFLAGS-zdump.c): Add $(tz-cflags).

	* timezone/zdump.c (abbr): Use TM_ZONE if defined.  Add const to
	return type.

1998-05-18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/tzfile.c (__tzfile_compute): Undo last change.  Instead
	take struct tm parameter and set tm_isdst, tm_zone and tm_offset
	if use_localtime.
	* time/tzset.c: Update prototype of __tzfile_compute.
	(__tz_convert): Pass tp to __tzfile_compute.  Don't set tm_isdst,
	tm_zone and tm_offset here if __use_tzfile.

1998-05-19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules: Install libc.a even if there are no object file.

1998-05-18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (do-makelib): Don't force creating library from
	scratch, to avoid wasting time and space and to get correct
	behaviour if $(subdirs) is incomplete.

1998-05-19  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (do-stamp): Make it work when building in source
	directory.
This commit is contained in:
Ulrich Drepper 1998-05-20 10:50:03 +00:00
parent b0a01055eb
commit a709dd439a
11 changed files with 128 additions and 69 deletions

View File

@ -1,3 +1,64 @@
1998-05-20 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* Makeconfig (rpath-link): Add resolvobjdir.
(resolvobjdir): New variable.
Reported by Peter Breitenlohner <peb@mppmu.mpg.de> [fixes PR libc/633].
1998-05-20 09:36 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-close.c: Call shared object terminators at the right time.
Patch by Philippe Troin <phil@fifi.org>.
1998-05-20 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Make-dist (+tsrcs): Also add *.map for every member of
$(extra-libs).
* Makefile (distribute): Don't distribute scripts/printsources and
scripts/=__ify. Distribute FAQ.in.
(rpm/%): Don't pass subdirs to sub-make.
* timezone/Makefile: Protect inclusion of z.* by $(avoid-generated)
instead of $(no_deps).
1998-05-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/generic/setenv.c: Protect against GNU C extension.
(KNOWN_VALUE, STORE_VALUE): Do it right.
(setenv): Remove unused variable.
1998-05-18 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* timezone/Makefile (tz-cflags): Define TM_GMTOFF and TM_ZONE.
(CFLAGS-zdump.c): Add $(tz-cflags).
* timezone/zdump.c (abbr): Use TM_ZONE if defined. Add const to
return type.
1998-05-18 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* time/tzfile.c (__tzfile_compute): Undo last change. Instead
take struct tm parameter and set tm_isdst, tm_zone and tm_offset
if use_localtime.
* time/tzset.c: Update prototype of __tzfile_compute.
(__tz_convert): Pass tp to __tzfile_compute. Don't set tm_isdst,
tm_zone and tm_offset here if __use_tzfile.
1998-05-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules: Install libc.a even if there are no object file.
1998-05-18 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (do-makelib): Don't force creating library from
scratch, to avoid wasting time and space and to get correct
behaviour if $(subdirs) is incomplete.
1998-05-19 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Makerules (do-stamp): Make it work when building in source
directory.
1998-05-20 00:10 Ulrich Drepper <drepper@cygnus.com>
* elf/dl-load.c: Rename option and variable from ignore-rpath to

View File

@ -122,7 +122,8 @@ sources := $(filter-out $(addsuffix .c,$(basename $(.S.s))),$(sources)) $(.S.s)
$(+subdir-nodist) $(dont_distribute)
foo:=$(shell echo '+out=$(+out)' >&2; echo foofoo >&2)
+tsrcs := $(filter-out $(+out), $(sources) $(all-headers) $(distribute)) \
$(foreach l,$(extra-libs),$($l-map)) $(+sysdeps)
$(foreach l,$(extra-libs),$($l-map)) \
$(wildcard $(addsuffix .map,$(extra-libs))) $(+sysdeps)
foo:=$(shell echo 'made +tsrcs=$(+tsrcs)'>&2)
foo:=$(shell echo generated='$(generated)' >&2)
#generated := $(sort $(generated) $(generated:.S=.c) $(generated:.s=.c))

View File

@ -413,13 +413,14 @@ else
default-rpath = $(libdir)
endif
# This is how to find at build-time things that will be installed there.
rpath-link = $(common-objdir):$(mathobjdir):$(elfobjdir):$(nssobjdir):$(nisobjdir):$(dbobjdir):$(rtobjdir)
rpath-link = $(common-objdir):$(mathobjdir):$(elfobjdir):$(nssobjdir):$(nisobjdir):$(dbobjdir):$(rtobjdir):$(resolvobjdir)
mathobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)math)
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
nisobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nis)
dbobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)db2)
rtobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)rt)
resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
else
link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
endif

View File

@ -234,8 +234,8 @@ parent_echo-distinfo:
# Make the distribution tarfile.
distribute := README README.libm INSTALL FAQ NOTES NEWS PROJECTS \
BUGS COPYING.LIB COPYING ChangeLog ChangeLog.[0-9] \
distribute := README README.libm INSTALL FAQ FAQ.in NOTES NEWS BUGS \
PROJECTS COPYING.LIB COPYING ChangeLog ChangeLog.[0-9] \
Makefile Makeconfig Makerules Rules Make-dist MakeTAGS \
extra-lib.mk o-iterator.mk libc.map configure \
configure.in aclocal.m4 config.h.in config.make.in \
@ -244,9 +244,9 @@ distribute := README README.libm INSTALL FAQ NOTES NEWS PROJECTS \
rpm/template rpm/rpmrc glibcbug.in abi-tags stub-tag.h \
test-skeleton.c include/des.h \
$(addprefix scripts/, \
rellns-sh config.sub config.guess printsources \
mkinstalldirs move-if-change install-sh =__ify \
test-installation.pl gen-FAQ.pl)
rellns-sh config.sub config.guess \
mkinstalldirs move-if-change install-sh \
test-installation.pl gen-FAQ.pl)
distribute := $(strip $(distribute))
generated := $(generated) stubs.h
@ -270,7 +270,7 @@ endif
FORCE:
rpm/%: subdir_distinfo
$(MAKE) $(PARALLELMFLAGS) -C $(@D) subdirs='$(subdirs)' $(@F)
$(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
iconvdata/%:
$(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)

View File

@ -499,7 +499,7 @@ define o-iterator-doit
$(objpfx)stamp$o: $(o-objects); $$(do-stamp)
endef
define do-stamp
echo '$(patsubst $(common-objpfx)%,%,$^)' > $@T
echo '$(patsubst $(objpfx)%,$(addsuffix /,$(subdir))%,$^)' > $@T
mv -f $@T $@
endef
object-suffixes-left := $(object-suffixes-for-libc)
@ -508,17 +508,15 @@ include $(o-iterator)
endif
# Now define explicit rules to build the library archives; these depend
# on the stamp files built above. The rule always destroys and recreates
# the library from scratch; it's faster that way.
# on the stamp files built above.
define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c): \
$(subdirs-stamp-o) $(common-objpfx)stamp$o; $$(do-makelib)
endef
define do-makelib
cd $(common-objdir) && \
$(AR) $(CREATE_ARFLAGS) $(@F)T `cat $(patsubst $(common-objpfx)%,%,$^)`
$(RANLIB) $@T
mv -f $@T $@
$(AR) $(CREATE_ARFLAGS) $(@F) `cat $(patsubst $(common-objpfx)%,%,$^)`
$(RANLIB) $@
endef
subdirs-stamps := $(foreach d,$(subdirs),$(common-objpfx)$d/stamp%)
subdirs-stamp-o = $(subst %,$o,$(subdirs-stamps))
@ -575,10 +573,8 @@ $(addprefix $(..)./scripts/mkinstalldirs ,\
$(filter-out $(wildcard $(@D:%/=%)),$(@D:%/=%)))
endef
# Any directory (parent or subdir) that has any object files to build
# should install libc.a; this way "make install" in a subdir is guaranteed
# to install everything it changes.
ifdef objects
# Any directory (parent or subdir) should install libc.a; this way
# "make install" in a subdir is guaranteed to install everything it changes.
installed-libcs := $(foreach o,$(filter-out .os,$(object-suffixes-for-libc)),\
$(inst_libdir)/$(patsubst %,$(libtype$o),\
$(libprefix)$(libc-name)))
@ -589,7 +585,6 @@ $(installed-libcs): $(inst_libdir)/lib$(libprefix)%: lib $(+force)
# Running ranlib after installing makes the __.SYMDEF time stamp up to
# date, which avoids messages from some linkers.
$(RANLIB) $@
endif
define do-install-program
$(make-target-directory)

View File

@ -47,30 +47,39 @@ _dl_close (struct link_map *map)
__libc_lock_lock (_dl_load_lock);
/* Decrement the reference count. */
if (--map->l_opencount > 0 || map->l_type != lt_loaded)
if (map->l_opencount > 1 || map->l_type != lt_loaded)
{
/* There are still references to this object. Do nothing more. */
--map->l_opencount;
__libc_lock_unlock (_dl_load_lock);
return;
}
list = map->l_searchlist;
/* Call all termination functions at once. */
for (i = 0; i < map->l_nsearchlist; ++i)
{
struct link_map *imap = list[i];
if (imap->l_opencount == 1 && imap->l_type == lt_loaded)
{
if (imap->l_info[DT_FINI])
/* Call its termination function. */
(*(void (*) (void)) ((void *) imap->l_addr
+ imap->l_info[DT_FINI]->d_un.d_ptr)) ();
}
}
/* Notify the debugger we are about to remove some loaded objects. */
_r_debug.r_state = RT_DELETE;
_dl_debug_state ();
list = map->l_searchlist;
/* The search list contains a counted reference to each object it
points to, the 0th elt being MAP itself. Decrement the reference
counts on all the objects MAP depends on. */
for (i = 1; i < map->l_nsearchlist; ++i)
for (i = 0; i < map->l_nsearchlist; ++i)
--list[i]->l_opencount;
/* Clear the search list so it doesn't get freed while we are still
using it. We have cached it in LIST and will free it when
finished. */
map->l_searchlist = NULL;
/* Check each element of the search list to see if all references to
it are gone. */
for (i = 0; i < map->l_nsearchlist; ++i)
@ -84,11 +93,6 @@ _dl_close (struct link_map *map)
const ElfW(Phdr) *first, *last;
ElfW(Addr) mapstart, mapend;
if (imap->l_info[DT_FINI])
/* Call its termination function. */
(*(void (*) (void)) ((void *) imap->l_addr +
imap->l_info[DT_FINI]->d_un.d_ptr)) ();
if (imap->l_global)
{
/* This object is in the global scope list. Remove it. */
@ -126,7 +130,7 @@ _dl_close (struct link_map *map)
imap->l_prev->l_next = imap->l_next;
if (imap->l_next)
imap->l_next->l_prev = imap->l_prev;
if (imap->l_searchlist)
if (imap->l_searchlist && imap->l_searchlist != list)
free (imap->l_searchlist);
free (imap);
}

View File

@ -69,7 +69,8 @@ __libc_lock_define_initialized (static, envlock)
allow arbitrary many changes of the environment given that the used
values are from a small set. Outside glibc this will eat up all
memory after a while. */
#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH)
#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
&& defined __GNUC__)
# define USE_TSEARCH 1
# include <search.h>
@ -79,18 +80,11 @@ static void *known_values;
# define KNOWN_VALUE(Str) \
({ \
void **value = tfind (Str, &known_values, (__compar_fn_t) strcmp); \
if (value != NULL) \
value = *(const char **) value; \
value; \
void *value = tfind (Str, &known_values, (__compar_fn_t) strcmp); \
value != NULL ? *(char **) value : NULL; \
})
# define STORE_VALUE(Str) \
({ \
void **value = tsearch (Str, &known_values, (__compar_fn_t) strcmp); \
if (value != NULL) \
value = *(const char **) value; \
value; \
})
tsearch (Str, &known_values, (__compar_fn_t) strcmp)
#else
# undef USE_TSEARCH
@ -186,7 +180,6 @@ setenv (name, value, replace)
}
else if (replace)
{
size_t len = strlen (*ep);
char *new_value;
char *np;

View File

@ -415,13 +415,13 @@ find_transition (time_t timer)
int
__tzfile_compute (time_t timer, int use_localtime,
long int *leap_correct, int *leap_hit,
int *isdst, long int *offset)
struct tm *tp)
{
struct ttinfo *info = find_transition (timer);
register size_t i;
if (use_localtime)
{
struct ttinfo *info = find_transition (timer);
__daylight = rule_stdoff != rule_dstoff;
__timezone = -rule_stdoff;
__tzname[1] = NULL;
@ -432,11 +432,11 @@ __tzfile_compute (time_t timer, int use_localtime,
if (__tzname[1] == NULL)
/* There is no daylight saving time. */
__tzname[1] = __tzname[0];
tp->tm_isdst = info->isdst;
tp->tm_zone = &zone_names[info->idx];
tp->tm_gmtoff = info->offset;
}
*isdst = info->isdst;
*offset = info->offset;
*leap_correct = 0L;
*leap_hit = 0;

View File

@ -38,7 +38,7 @@ extern int __use_tzfile;
extern void __tzfile_read __P ((const char *file));
extern int __tzfile_compute __P ((time_t timer, int use_localtime,
long int *leap_correct, int *leap_hit,
int *isdst, long int *offset));
struct tm *tp));
extern void __tzfile_default __P ((const char *std, const char *dst,
long int stdoff, long int dstoff));
extern char *__tzstring __P ((const char *string));
@ -595,8 +595,6 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
{
long int leap_correction;
int leap_extra_secs;
int isdst;
long int offset;
if (timer == NULL)
{
@ -615,8 +613,7 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
if (__use_tzfile)
{
if (! __tzfile_compute (*timer, use_localtime,
&leap_correction, &leap_extra_secs,
&isdst, &offset))
&leap_correction, &leap_extra_secs, tp))
tp = NULL;
}
else
@ -625,18 +622,20 @@ __tz_convert (const time_t *timer, int use_localtime, struct tm *tp)
tp = NULL;
leap_correction = 0L;
leap_extra_secs = 0;
isdst = (*timer >= tz_rules[0].change && *timer < tz_rules[1].change);
offset = tz_rules[isdst].offset;
}
if (tp)
{
if (use_localtime)
{
tp->tm_isdst = isdst;
tp->tm_zone = __tzname[isdst];
tp->tm_gmtoff = offset;
if (!__use_tzfile)
{
int isdst = (*timer >= tz_rules[0].change
&& *timer < tz_rules[1].change);
tp->tm_isdst = isdst;
tp->tm_zone = __tzname[isdst];
tp->tm_gmtoff = tz_rules[isdst].offset;
}
}
else
{

View File

@ -53,7 +53,7 @@ define nl
endef
ifneq ($(no_deps),t)
ifndef avoid-generated
-include $(addprefix $(objpfx)z.,$(tzfiles))
endif
@ -158,9 +158,10 @@ $(objpfx)zic: $(objpfx)scheck.o $(objpfx)ialloc.o
tz-cflags = -DTZDIR='"$(zonedir)"' \
-DTZDEFAULT='"$(localtime-file)"' \
-DTZDEFRULES='"$(posixrules-file)"'
-DTZDEFRULES='"$(posixrules-file)"' \
-DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone
CFLAGS-zdump.c = -Wno-strict-prototypes -DNOID
CFLAGS-zdump.c = -Wno-strict-prototypes -DNOID $(tz-cflags)
CFLAGS-zic.c = -Wno-strict-prototypes -DNOID $(tz-cflags)
CFLAGS-ialloc.c = -Wno-strict-prototypes -DNOID
CFLAGS-scheck.c = -Wno-strict-prototypes -DNOID

View File

@ -127,7 +127,7 @@ extern char * optarg;
extern int optind;
extern char * tzname[2];
static char * abbr P((struct tm * tmp));
static const char *abbr P((struct tm * tmp));
static long delta P((struct tm * newp, struct tm * oldp));
static time_t hunt P((char * name, time_t lot, time_t hit));
static size_t longest;
@ -358,15 +358,19 @@ int v;
(void) printf("\n");
}
static char *
static const char *
abbr(tmp)
struct tm * tmp;
{
register char * result;
static char nada;
register const char *result;
static const char nada;
#ifdef TM_ZONE
result = tmp->TM_ZONE;
#else /* !defined TM_ZONE */
if (tmp->tm_isdst != 0 && tmp->tm_isdst != 1)
return &nada;
result = tzname[tmp->tm_isdst];
#endif /* !defined TM_ZONE */
return (result == NULL) ? &nada : result;
}