Compare commits

...
Author SHA1 Message Date
Ulrich Drepper adfa20781b update from main archive 960830
Fri Aug 30 19:55:27 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libio/genops.c: Make _cleanup an alias of _IO_cleanup.
	Reported by Erik Troan.

Fri Aug 30 15:40:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/Dist: Add sys/procfs.h and
 	sys/sysmacros.h.  Reported by Curtiss <1CMC3466@IBM.MTSAC.EDU>.

Fri Aug 30 13:53:32 1996  Andreas Jaeger  <aj@arthur.pfalz.de>

	* sysdeps/unix/mman/syscalls.list: `mmap' has 6 arguments, not 5.

Fri Aug 30 13:01:10 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* sysdeps/i386/fpu/__math.h (tan): Pop 1.0 in ST to get
	real result.

Fri Aug 30 03:33:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_cbrtl.c: New file.  `long double'
	implementation.

	* sysdeps/unix/sysv/linux/i386/Dist: Add clone.S.
1996-08-31 00:13:23 +00:00
Thomas Bushnell, BSG 924840c542 *** empty log message ***
Fri Aug 30 13:39:21 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* Makerules (BUILD_CFLAGS): Use @(common-objpfx) for config.h, not
 	$(..).  Some rules (like sysdeps/posix/Makefile for mk-stdiolim)
 	do `cd' commands.
	(sed-remove-objpfx): Don't substitute for $(objpfx) anymore;
 	$(common-objpfx) is good enough.
	* Rules (common-generated): Provide default (empty) value.
	(dummy.o, dummy.c, empty.o, empty.c): Put these in
 	$(common-generated), not $(generated), and without $(..).
	(subdir_echo-distinfo): Treat $(common-generated) just like
 	$(generated).
	(generated): Depend on the (suitably mutated) $(common-generated)
 	files too.
	* Makerules (common-clean): Remove common-generated files too.
	* sysdeps/mach/hurd/Makefile (generated): Don't put errnos.d and
 	stamp-errnos here.
	(common-generated): Do put errnos.d and stamp-errnos here.
	(rpath-link): Don't use +=; $(rpath-link) is a colon separated list.

	* sysdeps/mach/hurd/Makefile (before-compile): Add auth; also add
 	auth to following rule to get it built.

	$(common-objpfx).  All uses in dependency lists changed.
1996-08-30 23:40:22 +00:00
Ulrich Drepper 6e953631df update from main archive 960829
Fri Aug 30 01:26:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/Dist: Add close.S.
	* sysdeps/unix/sysv/linux/m68k/Dist: Likewise.
	* sysdeps/unix/sysv/linux/alpha/Dist: Likewise.

	* version.c: Add comment about where to report bugs to.
	* catgets/gencat.c (usage): Likewise.
	* db/makedb.c (usage): Likewise.
	* locale/programs/locale.c (usage): Likewise.
	* locale/programs/localedef.c (usage): Likewise.

	* manual/socket.texi: A little bit better wording.

Thu Aug 29 18:03:06 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makerules: Make sure directory exists before generating stamp file.
	(BUILD_CFLAGS): Always refer to using $(..).
	* manual/Makefile: Make sure directory exists before generating
 	stamp file.
	(make-target-directory): Add macro definition.
	* sysdeps/generic/Makefile: Make sure directory exists before
 	generating stamp file.

	* Makefile (distribute): Add autolock.sh.  Reported by Fila Kolodny.

Tue Aug 27 10:06:22 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	When compiling in separate directory put objects into
	subdirectories matching the source layout.
	* Makeconfig (objpfx) [ifdef objdir]: Append $(subdir).
	When looking for configparms try in $(common-objpfx).
	Use $(common-objpfx)SUBDIR to find objects from other subdirectory
	builds.
	* Makerules: Add $(objpfx) to vpath list.
	(make-dummy-dep): Use $(common-objpfx) to avoid creating dummy.d
	more than once.  All uses in dependency lists changed.
	(+make-deps): Make target directory.
	(sed-remove-objpfx): Substitute $(common-objpfx).
	(do-ar, build-extra-lib, $(common-objpfx)stub-$(subdir)): Use
	$(objpfx) instead of $(objdir) for cd command.
	(O%-lib): Always find libc relative to $(..).
	(subdir-stamps): Collect stamp files from subdirs.
	(common-mostlyclean): Remove stub file in $(common-objpfx).
	* MakeTAGS ($P/siglist.pot): Find siglist.c in stdio-common.
	* Rules (dep-dummy-lib): Use $(common-objpfx) to avoid creating to
	more than once.
	($(objpfx)dummy.c, $(objpfx)empty.c): Change target name to use
	$(common-objfpx).  All uses in dependency lists changed.
	(generated): Prepend $(..) to names.
	* bare/Makefile ($(objpfx)lib$(config-vendor).a): Remove $(objpfx)
	from $@.
	* nss/Makefile ($(objpfx)libnss_dns.so, $(objpfx)libnss_db.so):
	Use $(common-objpfx) instead of $(..) in dependencies.
	* sysdeps/mach/Makefile (mach-objpfx): Unconditionally use
	$(common-objpfx) instead of $(..) and (objpfx).
	* sysdeps/mach/hurd/Makefile (hurd-objpfx): Likewise.
	(rpath-link): Likewise.
	(rpcuserlibs): Likewise.
	* sysdeps/unix/Makefile [$(subdir) = stdio-common]: Check for
	errlist.c in $(objpfx), not $(common-objpfx).
	($(common-objpfx)s-proto.d): Special rule not covered by pattern
	rule.
	* sysdeps/unix/make-syscalls.sh: Make syscall rules depending on
	s-proto.d in $(common-objpfx), not $(objpfx).

Thu Aug 29 17:45:49 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (nss_dlerror_run): Free returned error
	string.

Thu Aug 29 15:53:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/e_acoshl.c: New file. `long double'
 	implementation.
	* sysdeps/libm-ieee754/e_atanhl.c: Likewise.
	* sysdeps/libm-ieee754/e_remainderl.c: Likewise.
	* sysdeps/libm-ieee754/e_scalbl.c: Likewise.
	* sysdeps/libm-ieee754/s_asinhl.c: Likewise.
	* sysdeps/libm-ieee754/s_cosl.c: Likewise.
	* sysdeps/libm-ieee754/s_sinl.c: Likewise.
	* sysdeps/libm-ieee754/s_tanhl.c: Likewise.
	* sysdeps/libm-ieee754/s_tanl.c: Likewise.

	* stdio-common/printf_fp.c (__printf_fp): Use default value '.' if
1996-08-30 00:58:28 +00:00
Thomas Bushnell, BSG 747e2b4361 *** empty log message ***
* sysdeps/mach/hurd/setitimer.c (setitimer_locked): Correct
 	spelling error of _hurd_itimerval.
1996-08-29 21:09:30 +00:00
Thomas Bushnell, BSG bfb826224b *** empty log message ***
* mach/Makefile (MIGFLAGS-mach/mach4): Define variable.
  	mach/Machrules (mig.uh, mig.__h): Include $(user-MIGFLAGS) and
 	$(MIGFLAGS-$*) here too, as well as in the code-generating MiG calls.
1996-08-29 19:45:04 +00:00
Thomas Bushnell, BSG b77409e605 *** empty log message ***
* hurd/hurdinline.c: Include "hurd.h" for function definitions too.
1996-08-29 17:59:39 +00:00
Thomas Bushnell, BSG 9607dca3f4 *** empty log message ***
Thu Aug 29 12:00:30 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* stdio/fseek.c (fseek): Don't assume we know the file position;
 	other handles may have changed it.  So set STREAM.__offset to -1
 	before calling __stdio_check_offset to make sure we have a correct
 	value.
1996-08-29 16:02:14 +00:00
Ulrich Drepper 14bab8de31 update from main archive 960828
Thu Aug 29 00:28:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/printf_fp.c (__printf_fp): Use default value `.` if
 	`decimal' char is 0.

	* C-numeric.c (not_available): New constant.
	(_nl_C_LC_NUMERIC): Use `not_available' for grouping value.

	* nss/nsswitch.conf: Example configuration file.
	* nss/db-Makefile: Example Makefile for generation of databases
	for nss_db.
	* nss/Makefile (distribute): Add nsswitch.conf and db-Makefile.

1996-08-28  Paul Eggert  <eggert@twinsun.com>

	* C-messages.c (_nl_C_LC_MESSAGES): Set yesexpr to "^[yY]" and
 	noexpr to "^[nN]"; this conforms to POSIX.2.

	* C-time.c (_nl_C_LC_TIME): Change %d to %e in d_t_format, to
 	conform to POSIX.2.

1996-08-28  Paul Eggert  <eggert@twinsun.com>

	* C-monetary.c (not_available): New constant.
	(_nl_C_LC_MONETARY): Set mon_decimal_point to "", and set
 	mon_grouping, int_frac_digits, frac_digits, p_cs_precedes,
 	p_sep_by_space, n_cs_precedes, n_sep_by_space, p_sign_posn, and
 	n_sign_posn to CHAR_MAX, as required by the POSIX Standard.

Wed Aug 28 23:12:28 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nss_db/db-XXX.c: Correct function names.  They must be
	`_nss_db_*' instead of `_nss_files_*'.
	(lookup): `parse_line' returns 1 if succesful.
	* nss/nss_files/files-service.c (servbyname): Key for database
	must also contain protocol names.
	(servbypt): Likewise.
	Test must also check for protocol.  Add `proto' argument.

Tue Aug 27 09:56:13 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* MakeTAGS ($P/subdirs.pot): Prefix all file names, not only the
	first one.

Fri Aug 16 16:11:25 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* nss/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r): Treat
 	EPFNOSUPPORT and EAFNOSUPPORT as implying NSS_STATUS_UNAVAIL just
 	like ECONNREFUSED already does.
	(_nss_dns_gethostbyaddr_r): Likewise.
	* nss/nss_dns/dns-network.c (_nss_dns_getnetbyname_r): Likewise.
	(_nss_dns_getnetbyaddr_r): Likewise.

	* sysdeps/mach/hurd/socket.c (socket): For message transmission
 	and RPC errors that indicate that the socket server is not really
 	present and able to do its job, turn the error into EPFNOSUPPORT.

	* sysdeps/generic/sbrk.c (__sbrk):  Get kernel brk address
	always only if in static libc or if statically linked program
	uses libc.so.
1996-08-29 00:31:18 +00:00
Ulrich Drepper b236e99d90 Upadte.
Tue Aug 27 17:45:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* Makerules: Add some test for correct version of GNU Make.

	* io/fcntl.h: Undo change from Mon Aug 26 22:22:17 1996.
	* sysdeps/unix/sysv/linux/fcntlbits.h: Place macros here instead.

	* sysdeps/generic/dl-sysdep.c: Initialize break address to
	avoid overwriting last page (OK, Roland).

Tue Aug 27 16:20:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* resolv/resolv.h: Update from BIND-4.9.5-T3A.
	* resolv/arpa/nameser.h: Likewise.
	* resolv/res_init.c: Likewise.
	* resolv/res_debug.c: Likewise.
	* resolv/res_mkquery.c: Likewise.

Tue Aug 27 15:47:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-error.c (catch): Define errstring element not as const.
	(_dl_catch_error): ERRSTRING argument is not const pointer.
	Initialize *ERRSTRING and *OBJNAME separately.
	* elf/link.h: Change prototype for `_dl_catch_error'.

	* elf/dl-load.c (_dl_map_object): Use separate variable for
	copied NAME to avoid `const' warning.

	* elf/dlerror.c: Make `last_errstring' variable not const pointer.

	* elf/rtld.c: Implement reading of /etc/ld.so.preload.  This
	provides preloading even for SUID binaries.
	Add some more casts to avoid signed<->unsigned warnings.

Tue Aug 27 15:40:28 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* posix/sys/types.h: Define loff_t.
	* sysdeps/unix/sysv/linux/gnu/types.h: Define __loff_t.

Mon Aug 26 16:31:33 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/setitimer.c (setitimer_locked): Tolerate NEW
	being null; in that case don't touch the timer at all (but do
	return something in OLD if necessary).

Mon Aug 26 13:35:16 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/init-first.c (__libc_multiple_libcs): New
 	variable.
	* sysdeps/i386/init-first.c: Likewise.
	* sysdeps/stub/init-first.c: Likewise.
1996-08-28 00:26:07 +00:00
Ulrich Drepper 0b72c47ecf Update 960827.
Mon Aug 26 22:22:17 1996  Ulrich Drepper  <drepper@cygnus.com>

	* io/fcntl.h: Add definition for BSD F* macros.

	* misc/init-misc.c (__init_misc): Make static.
	* misc/Makefile: Pass -fkeep-inline-functions flag for init-misc.c.

	* configure.in: Add test for -fno-exception option of gcc.
	* config.make.in: Add definition of have-no-exceptions.
	* Makerules: Define no-exceptions based on have-no-exceptions.
	* csu/Makefile: When translating initfini.c pass $(no-exceptions).
	This is necessary for gcc >= ss-960816.

Mon Aug 26 17:16:48 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h: Clear startup flag.

Fri Aug 16 21:17:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (o-iterator-doit): Simplify reference to autolock
	script.

Fri Aug 16 21:17:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (o-iterator-doit): Simplify reference to autolock
	script.

Sat Aug 24 15:27:41 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): After resizing the
	buffer move the current contents to the end.  Correctly relocate
	file name pointer to upper half of the buffer.

Mon Aug 26 15:49:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* rtld.c (dl_main): Remove code to call ld.so initializer.  This
	was introduced for compatibility with Linux ld.so and would not
	be used anymore.  Now we don't have any good values to use as the
	parameters to the initializer so simply remove it.

Sun Aug 25 18:25:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* gmon/gmon.c (ERR): Don't write the terminating NUL.

	* sysdeps/posix/profil.c (profil): Disable the profiling timer at
	first.
	(profil_count): Use 64 bit arithmethic to avoid overflow.

	* sysdeps/generic/machine-gmon.h (MCOUNT): Fix argument order.

	* sysdeps/generic/ftime.c: Likewise.
1996-08-27 01:46:37 +00:00
Ulrich Drepper 59f63dc4f5 Regenerated: autoconf configure.in 1996-08-27 00:14:18 +00:00
Thomas Bushnell, BSG 485604b41c *** empty log message *** 1996-08-26 20:34:42 +00:00
Thomas Bushnell, BSG 548330d38e *** empty log message *** 1996-08-26 17:39:10 +00:00
Ulrich Drepper dcf0671d90 handle password file locking. 1996-08-26 10:28:45 +00:00
Ulrich Drepper 4884d0f03c Update.
Mon Aug 26 02:01:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-open.c (_dl_open): Call library initializer with
	correct command line arguments and environment information.
	* elf/rtld.c (dl_main): Provide arguments to initializer of
	ld.so itself.

Sun Aug 25 19:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>

	* shadow/Makefile (routines): Add lckpwdf.
	* shadow/lckpwdf.c: New file.

	* sysdeps/i386/fpu_control.h (_FPU_GETCW, _FPU_SETCW): Force
	argument `cw' to be placed in memory.  Patch by Torbjorn Granlund.

Sun Aug 25 12:53:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* configure.in: Add definition for `__eh_pc' and `__throw' in
	test for --no-whole-archive.  The compiler generates dependencies
	for this but none of the standard librares and startup files
	are used.  Necessary for gcc >= ss-960816.

Sun Aug 25 01:31:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-error.c (_dl_signal_error): If error is catched, malloc
	return string since string might be on stack.
	* elf/dl-lookup.c (_dl_lookup_symbol): Undo change of
	Wed Aug 21 10:14:59 1996.
	* elf/dlerror.c (dlerror): Free error string after printing.
	(_dlerror_run): If error string was not printed since last error
	free string.
	* rtld.c (dl_main): Free error string in case of error.

Sat Aug 24 03:16:47 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/syslog.c (vsyslog): Don't use `localtime' or `gmtime' since
 	this changes the global state for `localtime' and `gmtime'.  Use
 	`__localtime_r'/`__gmtime_r' instead.
	* resolv/res_debug.c (__p_secstodate): Likewise.
	* sysdeps/generoc/ftime.c: Likewise.
	* sysdeps/posix/gettimeofday.c: Likewise.
	Reported by Paul Eggert.

	* time/gmtime.c: De-ANSI-fy.
	* time/strftime.c: Don't call non-reentrant functions which change
 	state.

Wed Aug 21 10:14:59 1996  Richard Henderson  <rth@tamu.edu>

	* elf/dl-lookup.c (_dl_lookup_symbol): Malloc the error string rather
	than putting it on the stack.

Wed Aug 21 10:12:42 1996  Richard Henderson  <rth@tamu.edu>

	* elf/rtld.c (dl_main): When looking up symbols in response to --list,
	don't find .plt entries.

Mon Aug 19 23:18:12 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (RTLD_START): Optimize clearing
	_dl_starting_up.

Tue Aug 20 17:42:10 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (line_wrap_stream): Initialize D->seek.
1996-08-26 00:14:11 +00:00
Ulrich Drepper 655a5796e7 Add definition of __eh_pc and __throw to --no-whole-archive test program. 1996-08-25 23:59:31 +00:00
Miles Bader 0f86f6c9a1 (line_wrap_stream): Initialize D->seek. 1996-08-20 21:55:39 +00:00
Karl Berry f77a6b9e45 (\key): Typeset a lozenge around the argument (from gildea@intouchsys.com). 1996-08-20 18:37:11 +00:00
Ulrich Drepper 39778c6c9e update from main archive 960818 1996-08-19 01:07:44 +00:00
Ulrich Drepper e9d258b798 Update.
Sat Aug 17 12:19:37 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* login/pututline_r.c (__pututline_r): Fix handling of case where
 	getutid_r() fails with ESRCH.  Reported by Miquel van Smoorenburg.

Wed Aug 14 14:10:54 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (platform): Change entry
 	for "Jensen" so _bus_base() returns 0 on that platform.  Use
 	_bus_base_sparse() to determine base address of sparse memory.

	* sysdeps/unix/sysv/linux/sys/io.h: Enclose #include <asm/io.h>
	and declarations in __BEGIN_DECLS/__END_DECLS.

Sun Aug 18 13:37:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* err.h: New file.  Wrapper around misc/err.h.

	Correct solution of multiple initialization problem by
	Roland McGrath.
	* csu/initfini.c: Remove global variable __libc_is_static.
	* elf/rtld.c: Introduce new global variable _dl_starting_up.
	It's nonzero during the startup.
	* elf/dl-open.c (_dl_open): When _dl_start function is not
	available (i.e., if in static libc) set `__libc_multiple_libcs'
	to nonzero value.
	* sysdeps/unix/sysv/linux/init-first.c (__libc_multiple_libc):
	New global variable.
	(init): Undo change of Fri Aug  2 03:12:40 1996.
	Initialize `__libc_multiple_libcs' to nonzero only if this is
	a shared lib called from a statically linked program and don't
	call `personality' and `setfpucw' in this case either.
	* sysdeps/generic/sbrk.c: Undo change of Fri Aug  2 03:12:40 1996.
	Don't call brk(0) until `__libc_multiple_libcs' is nonzero.
	* sysdeps/i386/dl-machine.h (RTLD_START): Clear _dl_starting_up
	before jumping to user code.
	* sysdeps/m68k/dl-machine.h (RTLD_START): Likewise.

Fri Aug 16 04:59:01 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/init-first.c: Remove hack from
	Thu Aug  8 12:40:20 1996.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir) = csu]: Use
	-fkeep-inline-functions flag instead.
1996-08-18 14:47:31 +00:00
Thomas Bushnell, BSG a057e7dcc7 *** empty log message *** 1996-08-16 20:42:32 +00:00
Ulrich Drepper 2de99474c3 update from main archive 960815 1996-08-16 01:33:20 +00:00
Ulrich Drepper ad86485dcf Update.
Fri Aug 16 01:24:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* inet/ruserpass.c (userpass): Allocate buffer for .netrc file
	name dynamically.  Reported by Alan Cox.
	Uncomment warnings and mark as translatable.

	* time/strftime (strftime): Add implementation for %s and %z
	format.  Change behaviour for unknown format character: now
	simply print it.  This matches the behaviour of printf.
	Reported by Jim Meyering.
	* manual/time.texi: Document all formats and flags of strftime.

Thu Aug 15 18:02:51 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): Loaded object has type lt_executable,
	not lt_library.

	* misc/sys/select.h: Define fd_set using typedef, not #define.
	Proposed by David Mosberger-Tang.

Thu Aug 15 12:48:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* po/header.pot: Use real description line.

Thu Aug 15 04:42:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): When started with --verify prevent
	any warning.  Just exit with an error.
	* elf/ldd.sh.in: Don't run given object directly.  This fails for
	libraries.  Instead use $RTLD again.

	* sysdeps/generic/sbrk.c (__sbrk):  Get kernel brk address
	always only if in static libc or if statically linked program
	uses libc.so.
1996-08-16 00:23:04 +00:00
root 5699edb407 Regenerated from ../sysdeps/gnu/errlist.awk ../manual/errno.texi 1996-08-15 23:44:33 +00:00
Ulrich Drepper 706074a5bb update from main archive 960814 1996-08-15 01:23:29 +00:00
Ulrich Drepper 046e3001f9 Update for manual changes.
Thu Aug 15 02:08:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* manual/nss.texi: New file.  Document NSS.
	* manual/nsswitch.texi: New file.  Example configuration.

	* manual/string.texi: Document stpncpy, strdupa, and strndupa.
	* manual/example/strdupa.c: New file.  Example for strdupa.
1996-08-15 00:14:23 +00:00
Ulrich Drepper df21c8581a Update.
Wed Aug 14 21:36:16 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtod.c (STRTOD): Correct assertion about size of
	wint_t and wchar_t.  Reported by David Mosberger-Tang.

Mon Aug 12 22:40:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* elf/dl-lookup.c (_dl_lookup_symbol): Remove fifth parameter
	RELOC_ADDR and make NOPLT a set of flags.  All callers
	changed.  Delete condition that checks for resolving to the
	location being filled in.  Add condition to skip the
	executable's symbols if requested.
	* elf/link.h: Change declaration of _dl_lookup_symbol
	accordingly.
	(DL_LOOKUP_NOEXEC, DL_LOOKUP_NOPLT): New definitions.
	* elf/dl-reloc.c (RESOLVE): Remove second parameter and rename
	NOPLT to FLAGS.
	* elf/dl-runtime.c (RESOLVE): Likewise.
	* elf/rtld.c (RESOLVE): Likewise.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Pass
	DL_LOOKUP_NOEXEC as second argument to the RESOLVE macro if
	processing a copy reloc, DL_LOOKUP_NOPLT for a jump slot
	reloc, zero otherwise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	* sysdeps/mips/dl-machine.h (elf_machine_rel): Likewise.

Wed Aug 14 17:57:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* MakeTAGS: Clean up use of --omit-header and -n for xgettext.
	* po/header.pot: Add empty line at end.

Sun Aug 11 13:45:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* MakeTAGS (all-pot): Remove $P/errlist.pot, all error messages
 	are now in $P/stdio-common.pot.
	(XGETTEXTFLAGS-errlist.pot): Variable removed.

Mon Aug 12 19:25:03 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* Makerules (do-ar, o-iterator-doit): Compute path to autolock
 	script at run time, not configure time.
	* config.make.in, configure.in: Undo previous change.

Wed Aug 14 13:20:02 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/i386/close.S: Push return value of thread
	on stack as argument for `_exit'.  Reported by Andreas Schwab.

Mon Aug 12 19:36:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/clone.S: New file.

Wed Aug 14 04:22:35 1996  Richard Henderson  <rth@tamu.edu>

	* elf/dl-load.c (_dl_map_object): Save name in malloced memory.
	(_dl_map_object_from_fd): Free name on error.

Wed Aug 14 13:00:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* string/strdup.c: Use result of memcpy to avoid reloading.

Tue Aug 13 00:55:03 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* shadow/sgetspent_r.c (__sgetspent_r): Copy string to buffer, not
	the other way round.

	* resolv/Makefile (libresolv-routines): Add base64, inet_net_ntop,
 	inet_net_pton, inet_net.
	* resolv/arpa/nameser.h (__BIND): Update version number.
Mon Aug 12 19:03:22 1996  Thomas Bushnell n/BSG  <thomas@psilocin.gnu.ai.mit.edu>

	* sysdeps/generic/gnu/types.h: Declare __fd_mask as `unsigned long'.

	* mach/Makefile (mach/mach_host.uh): Depend on
 	$(objpfx)/mach-syscalls.mk.
	($(objpfx)mach-shortcuts.h): Depend on $(objpfx)mach/mach_host.h.
	(This fixes a make loop; thanks to Marcus Daniels
 	<marcus@sysc.pdx.edu> for the patch.)
1996-08-14 21:45:21 +00:00
Ulrich Drepper 13d84ccd53 Updated.
Tue Aug 13 20:51:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/canonicalize.c (canonicalize): Add cast to prevent
 	warning.

	* Makerules (o-iterator-doit): Use autolock.sh when running ranlib.

Tue Aug 13 18:26:45 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (__nss_configure_lookup): Use fact that list is
 	sorted.

	Update from bind-4.9.5-T1A.
	* resolv/Makefile (routines): Add inet_net_ntop, inet_net_pton,
 	inet_net.
	(libresolv-routines): Add base64.

	* resolv/gethnamaddr.c: Include <sys/types.h>.
	* resolv/getnetnamadr.c: Likewise.
	* resolv/herror.c: Likewise.
	* resolv/inet_addr.c: Likewise.
	* resolv/nsap_addr.c: Likewise.
	* resolv/res_comp.c: Likewise.
	* resolv/res_data.c: Likewise.
	* resolv/res_init.c: Likewise.
	* resolv/res_mkquery.c: Likewise.
	* resolv/res_query.c: Likewise.
	* resolv/res_send.c: Likewise.

	* resolv/gethnamaddr.c [! SPRINTF_CHAR] (SPRINTF): Cast return
 	value of sprintf.
	* resolv/inet_ntop.c: Likewise.

	* resolv/gethnamaddr.c [BSD]: Include <stdlib.h>.
	Remove prototype of gethostbyname_ipv4.

	* resolv/inet_ntop.c, resolv/inet_pton.c: Use ISO C `mem*'
 	functions instead of BSD `b*' functions.

	* resolv/nsap_addr.c: Add copyright message.

	* resolv/res_comp.c: Remove comment explaining label format.
	(res_mailok): Correct check.

	* resolv/res_debug: Include missing headers.
	(__fp_nquery): Handle `unused', `ad', and `cd' bits.
	(__p_fqnname): New function to print FQDN from compressed name.
	(__p_rr): Use __p_fqnname.  Correct printing of ".  Handle T_TXT
	correctly.  Add handling of T_KEY and T_SIG.
	Handle class and type names by using name arrays instead of
	explicit `switch'es.
	(__sym_ston, __sym_ntos, __sym_ntop): New functions to use arrays.
	(__dn_count_labels, __p_secstodate): New functions.

	* resolv/resolv.h (__RES): Update version number.
	(res_sym): New type.
	Add #defines for new functions.
	Declare sym_ntos, sym_ntop, b64_ntop, b64_pton, __p_fqnname,
	__p_secstodate, dn_count_labels.

	* resolv/arpa/nameser.h (__BIND): Update verison number.
	Add KEYFLAG_* and ALGORITHM_* symbols.
	(HEADER): Add `ad' and `cd' flags.

	* inet/ient.h: Add prototypes for inet_neta, inet_net_ntop,
	and inet_net_pton.

	* manual/maint.texi: Document that we use bind-4.9.5.
	* INSTALL: Ditto.

Mon Aug 12 16:41:52 1996  Thomas Bushnell n/BSG  <thomas@gnu.ai.mit.edu>

        * io/getwd.c (getwd) [! PATH_MAX]: Don't assume that the user's
        buffer is any longer than the amount necessary to hold the
        filename; the Hurd getcwd uses the *entire* contents of the
        buffer, however long it is specified to be.
1996-08-14 02:26:32 +00:00
Thomas Bushnell, BSG acba7f1984 *** empty log message *** 1996-08-12 23:22:12 +00:00
Ulrich Drepper 15a83d04bb Few last minute patches from main on 960811 1996-08-12 03:00:59 +00:00
Ulrich Drepper a8874eadae Last minute change.
Mon Aug 12 04:33:09 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (__nss_database_lookup): Always release locks
 	before returning.  Reported by Miles Bader.

	(distributes): Add databases.def.
1996-08-12 02:44:03 +00:00
Ulrich Drepper a3e59be8d1 Update.
Mon Aug 12 03:31:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/nsswitch.c (__nss_configure_lookup):  New function.
	Allows to specify services.
	* nss/XXX-lookup.h: Rename database variable and make global.
	* nss/databases.def: New file.  Real names of all databases.

	* nss/nss.h: New file.  Contains declaration useful for users
	and service developers.
	* nss/nsswitch.h: Move some declarations to nss/nss.h.
	* nss.h: New file.  Wrapper around nss/nss.h.

	* nss/Makefile (headers): Add nss.h.
	(distributes): Add databases.h.

Sun Aug 11 16:19:42 1996  Ulrich Drepper  <drepper@cygnus.com>

	Help the poor people with fast machines by making sure only
	one `ar' commands works on the library.
	* autolock.sh: New file.  Written by Tom Tromey.
	* Makerules (do-ar): Call autolock.sh shell script instead of
	directly using `ar'.
	* config.make.in: Make configuration variable AUTOLOCK which
	gets initialized by configure.
	* configure.in: Define variable AUTOLOCK to point to autolock.sh
	script and mark it to substitute.

	* string/Makefile: Add -fno-builtin for tst-strlen.c, too.

	* elf/dl-lookup.c (_dl_lookup_symbol): Allow self-referencing.
	Patch by David Mosberger-Tang.

Sun Aug 11 01:12:38 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt): Optimize LD_BIND_NOW
	startup by moving Icache flush from here ...
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): ... to here.
	(ELF_MACHINE_USER_ADDRESS_MASK): Delete; it is unused.

	* sysdeps/alpha/divrem.h: Update comment to reflect the actual
	calling conventions.  The code is already correct.

Sun Aug 11 01:06:42 1996  Richard Henderson  <rth@tamu.edu>

	* string/Makefile: Compile tester with -fno-builtin as we want to
	test our implementations, not gcc's.
1996-08-12 01:42:37 +00:00
Ulrich Drepper 267ca16a67 Update to 960810.
Sat Aug 10 13:17:27 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* shadow.h: New file.

	* sysdeps/unix/sysv/linux/netinet/in.h: Move
 	__BEGIN_DECLS/__END_DECLS up so ntohl() et al are bracketed as
 	well.

	* socket/sys/socket.h [__cplusplus]: Use old-style __SOCKADDR_ARG.
	g++ 2.7.2 (and earlier) has no transparent unions support.

Fri Aug  9 18:50:06 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (_bus_base_sparse): New
	function to determine the base address of sparse bus memory.
	(APECS_*): Rename to CIA_*.
	(APECS_SPARSE_MEM, CIA_SPARSE_MEM): New macros.
	(platform): Add sparse_bus_memory_base member and initialize.
	(sparse_bus_memory_base): New variable.

Tue Aug  6 10:23:18 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/posix/ttyname_r.c (ttyname_r),
	sysdeps/posix/ttyname.c (ttyname): Return -1/NULL if
	!__isatty(fd) (POSIX.1 says so.)

	* sysdeps/unix/getlogin.c (getlogin): Fix to check fd 0 only.
  	This is not a gross hack, after all---for compatibility,
 	getlogin() really should check fd 0 only and not try to base its
 	operation on the controlling tty.

Wed Jul 17 10:54:20 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/getlogin.c (getlogin): Add static variable NAME,
 	change utmp_data from static to auto.

Sun Aug 11 02:56:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* posix/unistd.h [__USE_MISC]: Add prototype for `nice'.
	Reported by David Mosberger-Tang.
1996-08-11 01:08:23 +00:00
Ulrich Drepper f2b5d40e87 One more update.
Sat Aug 10 02:05:28 1996  Richard Henderson  <richard@twiddle.tamu.edu>

	* sysdeps/libm-ieee754/s_isnan.c [NO_LONG_DOUBLE]: Add strong
	alias to `__isnanl'.
1996-08-10 00:08:49 +00:00
Ulrich Drepper a8922de8c7 Update for 960809.
Fri Aug  9 17:38:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/sys/timex.h: Include <sys/time.h> to
	get `struct timeval'.
	* sysdeps/unix/sysv/linux/sys/acct.h: Get time_t from <time.h>.
	* sysdeps/unix/sysv/linux/sys/module.h: Get size_t from <stddef.h>.
	* sysdeps/unix/sysv/linux/sys/io.h: Get definition of __P.
	* sysdeps/unix/sysv/linux/sys/klog.h: Likewise.
	* gmon/sys/gmon.h: Include <sys/types.h> to get u_long.
	* sysdeps/unix/sysv/linux/direntry.h: Complete types in
	<linux/dirent.h>.
	* io/fts.h: Include <sys/types.h> to get dev_t.
	Reported by Matthias Urlichs.

	* sysdeps/posix/tempname.c [USE_IN_LIBIO]: Don't clear
 	_IO_file_flags.  It's the same as _flags.
	Reported by Miquel van Smoorenburg <miquels@Q.cistron.nl>.

Wed Aug  7 19:38:47 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/resourcebits.h: Add RLIMIT_AS.
1996-08-10 00:00:16 +00:00
Ulrich Drepper a5113b141c Update.
Thu Aug  8 16:17:38 1996  Ulrich Drepper  <drepper@cygnus.com>

	* pwd/getpwent.c: Define BUFLEN from NSS_BUFLEN_PASSWD.
	* pwd/getpwent_r.c: Likewise.
	* pwd/getpwnam.c: Likewise.
	* pwd/getpwnam_r.c: Likewise.
	* pwd/getpwuid.c: Likewise.
	* pwd/getpwuid_r.c: Likewise.

	* grp/getgrent.c: Define BUFLEN from NSS_BUFLEN_GROUP.
	* grp/getgrent_r.c: Likewise.
	* grp/getgrgid.c: Likewise.
	* grp/getgrgid_r.c: Likewise.
	* grp/getgrnam.c: Likewise.

	* pwd/fgetpwent_r.c: New file.  Reentrant version of fgetpwent.
	* pwd/fgetpwent.c: Rewrite to use fgetpwent_r.
	* pwd/Makefile (routines): Add fgetpwent_r.
	* pwd/pwd.h: Add prototypes for __fgetpwent_r and fgetpwent_r.

	* grp/fgetgrent_r.c: New file.  Reentrant version of fgetgrent.
	* grp/fgetgrent.c: Rewrite to use fgetgrent_r.
	* grp/Makefile (routines): Add fgetgrent_r.
	* grp/grp.h: Add prototypes for __fgetgrent_r and fgetgrent_r.

	Implement shadow password lookup functions.  This is no complete
	shadow password suite.
	* shadow/Makefile: New file.
	* shadow/fgetspent.c: New file.
	* shadow/fgetspent_r.c: New file.
	* shadow/getspent.c: New file.
	* shadow/getspent_r.c: New file.
	* shadow/getspnam.c: New file.
	* shadow/getspnam_r.c: New file.
	* shadow/putspent.c: New file.
	* shadow/sgetspent.c: New file.
	* shadow/sgetspent_r.c: New file.
	* shadow/shadow.h: New file.
	* shadow/spwd-lookup.c: New file.
	* shadow/nss_files/files-spwd.c: New file.

Thu Aug  8 13:33:45 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/ftime.c: New file.  Available system
 	call is only a stub.
	Reported by Matthias Urlichs.

	* Makeconfig [!default_cflags]: Change default value from `-g'
	to `-g -O'.

	* configure.in: Recognize i686.
	* sysdeps/i386/i686/Implies: Default on i586 optimized code.

Thu Aug  8 12:40:20 1996  Matthias Urlichs  <smurf@smurf.noris.de>

	* Makeconfig [$(build-omitfp) == yes]: Add to CFLAGS-.so
	value of CFLAGS-.o, not CFLAGS-o.

	* sysdeps/unix/sysv/linux/init-first.c (init): Add volatile
	pointer to ourself.  Otherwise `gcc -O3' optimized init away.

	sure that all tables in binary file are word-aligned.
1996-08-09 02:46:09 +00:00
Ulrich Drepper 233963756b Update.
Thu Aug  8 01:41:43 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/Makefile: Undo change of Tue Aug  6 14:27:11 1996.
	* elf/dl-support: Add definition of `_dl_sysdep_read_whole_file'.

Thu Aug  8 01:15:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/fpu_control.h (_FPU_DEFAULT, _FPU_IEEE): Set
	to 0x137f to allow long double operations.

Sun Aug  4 13:12:05 1996  Richard Henderson  <rth@tamu.edu>

	Bug Fixes:

	* nss/nsswitch.c (_res): Remove redundant variable definition.
	The real one is in resolve/res_init.c, and having both prevents
	using -fno-common when building the shared library.
	* sunrpc/rpc_prot.c (_null_auth): Same.  Original is in rpc_common.c.

	* sysdeps/unix/sysv/linux/alpha/brk.S: When PIC, define __curbrk as
	a .bss object not a COMMON symbol.

	* sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/bsd-setjmp.S: Must load
	$gp before referencing __sigsetjmp symbol.  Retain LITUSE for same.

	Optimizations:

	* sysdeps/alpha/strlen.S: Rearrange first-word setup and thense the
	main loop for better dual-issue on EV5.  Rearrange binary search to
	pipeline better and trim one instruction.

	Cosmetic Changes:

	* time/localtime.c (localtime_r): Move lock declaration back next to
	the comment where it was before the 960724 change.

	* INSTALL, manual/maint.texi: alpha-gnu-linux -> alpha-ANYTHING-linux.
	The second word is supposed to be the hardware manufacturer.

	* sysdeps/alpha/_mcount.S: Retain LITUSE for __mcount.
	* sysdeps/alpha/setjmp.S: Retain LITUSE for __sigsetjmp_aux.

	* sysdeps/alpha/divrem.h: More local labels, retain LITUSE for _mcount.

	* sysdeps/alpha/alphaev5/add_n.S, sysdeps/alpha/alphaev5/lshift.S,
	sysdeps/alpha/alphaev5/rshift.S, sysdeps/alpha/alphaev5/sub_n.S:
	Same cleanups as with EV4 GMP stuff.

Tue Jul 25 03:30:56 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/Makefile [misc] (sysdep_routines): Add clone.
	* sysdeps/unix/sysv/linux/alpha/clone.S: New file.
	* sysdeps/unix/sysv/linux/i386/clone.S: New file.

Sun Aug  4 00:12:41 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/gnu/types.h: Declare __fd_mask as
	`unsigned long'.

	* misc/sys/select.h: Declare fd_mask as alias of __fd_mask.

Sat Aug  3 16:20:02 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (platform): Add entry for
 	Mikasa.

	* socket/sys/socket.h (send, __send, sendto): Declare buffer
 	pointer as __const.

	* string/tester.c (main): Test stpncpy.

	* sysdeps/generic/stpncpy.c (__stpncpy): Fix so it works without
 	segfault when called with an N that is not a multiple of four and
 	src[N-1]=='\0'.

	* misc/syslog.c (LogType): New variable.
	(openlog): If connect() with SOCK_DGRAM fails with EPROTOTYPE,
 	try again with SOCK_STREAM (the Linux syslogd uses a socket of the
 	latter type).
	(vsyslog): When LogType==SOCK_STREAM, also send ASCII NUL
 	terminator as a record-delimiter.  If __send(LogFile) fails,
	call closelog() so logfile gets re-opened next time.

Wed Aug  7 15:15:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/dl-open (_dl_open): Add cast to avoid warning.

	* manual/memory.texi: Improve some examples to give readers better
	advice: Use `stpcpy' instead of `strcat' if possible.
	* manual/string.texi: Document `strtok_r' and `strtok'.

	* sunrpc/Makefile: Move `+gccwarn' definition before inclusion
	of Makeconfig.
	[$(cross-compiling)=no]: Change test before making librpcsvc
	to this from $(cross-compile).
	Reported by Andreas Schwab.

Tue Aug  6 14:27:11 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/Makefile (routines): Move dl-sysdep to here...
	(rtld-routines): ...from here.  This should make static linking
	work again.

	* locale/setlocale.c: Add local variable `lock' and add code to
	`setlocale' to avoid simultaneous changing of global data.

	* catgets/catgets.c (catopen): Use `__strdup' instead of `strdup'.
	* catgets/open_catalog (__open_catalog): Use `__stpcpy', `__open',
	`__fstat', `__read', `__mmap', `__munmap' and `__close' instead
	of unprotected names.
1996-08-07 23:50:59 +00:00
Ulrich Drepper 80776ab80d Another correction.
tcgetattr.  We have weak aliases now.
	* stdlib/stdlib.h [__OPTIMIZE__ && __GNUC__ >= 2]: Remove
	"optimizations" for random functions.
1996-08-06 00:29:58 +00:00
Ulrich Drepper 6946d44b05 Correction.
tcgetattr.  We have weak aliases now.
  	* stdlib/stdlib.h [__OPTIMIZE__ && __GNUC__ >= 2]: Remove
 	"optimizations" for random functions.
1996-08-06 00:28:41 +00:00
Ulrich Drepper 08a3c37600 Update.
Tue Aug  6 01:13:56 1996  Ulrich Drepper  <drepper@cygnus.com>

	Clean name space according to ISO C, ISO C/Amd 1, and POSIX.1.
	This requires to rename several functions to use __ protected
	names.
	* dirent/dirent.h: Add prototypes of __opendir, __closedir,
	and __readdir.
	* sysdeps/mach/hurd/closedir.c: Prepend function name with __
	and make old name a weak alias.
	* sysdeps/mach/hurd/getrlimit.c: Likewise.
	* sysdeps/mach/hurd/opendir.c: Likewise.
	* sysdeps/mach/hurd/readdir.c: Likewise.
	* sysdeps/stub/closedir.c: Likewise.
	* sysdeps/stub/opendir.c: Likewise.
	* sysdeps/stub/readdir.c: Likewise.
	* sysdeps/unix/closedir.c: Likewise.
	* sysdeps/unix/opendir.c: Likewise.
	* sysdeps/unix/readdir.c: Likewise.

	* sysdeps/unix/opendir.c: Call `__fcntl' instead `fcntl'.

	* sysdeps/posix/getcwd.c: Call `__opendir', `__readdir',
	`__closedir' instead of unprotected names.

	* libio/filedoalloc.c (_IO_file_doallocate): Call `__isatty'
	instead of `isatty' since later is not part of ISO C.
	* libio/fileops.c (_IO_file_fopen): Call `__open' instead of
	`open' since later is not part of ISO C.

	* login/endutent.c (endutent): Call `__endutent_r', not
	`endutent_r'.
	* login/endutent_r.c: Rename defined function to `__endutent_r',
	make `endutent_r' weak alias.
	* login/getutent.c (getutent): Call `__getutent_r', not
	`getutent_r'.
	* login/getutid.c (getutid): Call `__getutid_r', not `getutid_r'.
	* login/getutid_r.c: Rename defined function to `__getutent_r',
	make `getutent_r' weak alias.
	* login/getutline.c (getutline): Call `__getutline_r', not
 	`getutline_r'.
	* login/getutline_r.c: Rename defined function to `__getutline_r',
	make `getutline_r' weak alias.
	* login/pututline_r.c: Rename defined function to `__pututline_r',
	make `pututline_r' weak alias.
	* login/setutent.c (setutent): Call `__setutline_r', not
 	`setutline_r'.
	* login/setutent_r.c: Rename defined function to `__setutline_r',
	make `setutline_r' weak alias.
	Rename `utmpname' to `__utmpname' and make former weak alias.
	(__utmpname): Call `__strdup', not `strdup'.
	* login/utmp.h: Add prototypes for name space clean reentrant
	versions.
	* sysdeps/unix/getlogin.c: Call `__ttyname_r', `__setutent_r',
	and `__endutent_r' instead of unprotected names.

	* math/math.h: Add prototype for `__matherr'.
	* sysdeps/libm-ieee754/k_standard.c: Call `__matherr' instead
	of `matherr'.

	* nss/getXXbyYY.c: Call __ protected reentrant function.
	* nss/getXXent.c: Likewise.
	* nss/getXXbyYY_r.c: Define `get*' function with __ protected
	name.  Make usual name a weak alias.
	* nss/getXXent_r.c: Likewise.

	* posix/unistd.h: Add prototype for `__ttyname_r'.
	* sysdeps/posix/ttyname_r.c: Rename function to `__ttyname_r'
	and make `ttyname_r' a weak alias.

	* resource/sys/resource.h: Add prototype for `__getrlimit'.
	* sysdeps/stub/getrlimit.c: Prepend function name with __
	and make old name a weak alias.
	* sysdeps/unix/syscalls.list: Rename system call to `__getrlimit'
	and make `getrlimit' weak alias.

	* libc/stdio/stdio.h: Add prototype for `__vscanf'.
	* libc/stdio/vscanf.c: De-ANSI-fy.
	Rename function to `__vscanf' and make `vscanf' a weak alias.
	* stdio-common/scanf.c (scanf): Use _IO_vscanf/__vscanf instead
 	of `vscanf'.

	* stdio-common/reg-printf.c: De-ANSI-fy.
	Rename function to `__register_printf_function' and make
	`register_printf_function' weak alias.

	* stdio-common/vfprintf.c: Call `__wcsrtombs' instead of
	`wcsrtombs'.

	* stdlib/mbstowcs.c: Call `__mbsrtowcs' instead of `mbsrtowcs'.
	* stdlib/mbtowc.c: Call `__mbrtowc' instead of `mbrtowc'.
	* stdlib/wcstombs.c: Call `__wcsrtombs' instead of `wcsrtombs'.
	* stdlib/wctomb.c: Call `__wcrtomb' instead of `wcrtomb'.
	* wcsmbs/mbrtowc.c: Prepend function name with __ and make old
 	name a weak alias.
	* wcsmbs/mbsrtowcs.c: Likewise.
	* wcsmbs/wcrtomb.c: Likewise.
	* wcsmbs/wcsrtombs.c: Likewise.
	* wcsmbs/wchar.h: Add prototypes for __ protected versions.

	* sysdeps/posix/sigsetmask.c (__sigsetmask): Call `__sigprocmask'
	instead of `sigprocmask'.


	* grp/grp.h [__USE_REENTRANT]: Add prototypes for reentrant
	version getgrent_r, getgrgid_r, and getgrnam_r.
	* pwd/pwd.h [__USE_REENTRANT]: Add prototypes for reentrant
	version getpwent_r, getpwuid_r, getpwnam_r and __ protected
	names.
	* resolv/netdb.h: Complete rewrite.  No more BSD ugliness.


	* misc/error.c (private_strerror): Translate messages from table,
	too.

	* io/fcntl.h: Pretty printing.
	* misc/fstab.h: Likewise.
	* misc/ttyent.h: Likewise.
	* resource/sys/resource.h: Likewise.
	* string/argz.h: Likewise.
	* string/envz.h: Likewise.

	Add support for symbols from POSIX.1c (POSIX threads).
	* posix/getconf.c: Handle new sysconf symbols.
	* posix/posix1_lim.h: Define _POSIX_TTY_NAME_MAX and
	_POSIX_LOGIN_NAME_MAX with minimal maximal values.
	* sysdeps/generic/confname.h: Define new symbols.
	* sysdeps/posix/sysconf.c: Handle new symbols.
	* sysdeps/stub/sysconf.c: Ditto.
	* sysdeps/unix/sysv/linux/sysconf.c: Removed.  Generic version
	is ok now.

	* sunrpc/rpc/xdr.h: Move definition of type `xdrproc_t' to
	have real prototype.

	* sysdeps/generic/resourcebits.h: Add macro definition for
	RLIMIT_* values.  Some sources test using #ifdef whether specific
	limit is available.
	* sysdeps/unix/bsd/sun/sunos4/resourcebits.h: Ditto.
	* sysdeps/unix/sysv/linux/resourcebits.h: Removed.  We need
	separate files for the architectures.
	* sysdeps/unix/sysv/linux/alpha/resourcebits.h: New file.
	* sysdeps/unix/sysv/linux/i386/resourcebits.h: New file.
	* sysdeps/unix/sysv/linux/m68k/resourcebits.h: New file.
	* sysdeps/unix/sysv/linux/mips/resourcebits.h: New file.

	* sysdeps/posix/getdtsz.c: Rewrite to use `__getrlimit' function
	and only default on `OPEN_MAX'.
	* sysdeps/unix/sysv/sysv4/getdtsz.c: Removed.  Default is already
	the POSIX version.

	* time/Makefile (routines): Add ctime_r.
	* time/asctime.c: Add implementation of `asctime_r'.  Make
	`asctime' implementation based on reentrant version.
	* time/ctime_r.c: New file.
	* time/time.h [__USE_REENTRANT]: Add definition of `asctime_r'
	and `ctime_r'.

Sat Aug  3 18:41:36 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/C-ctype.c (_nl_C_LC_CTYPE_toupper): Fix EOF entry.
	(_nl_C_LC_CTYPE): Fix ordering.
	* locale/categories.def (LC_CTYPE): Add missing ctype-class32; fix
 	typo.

Sat Aug  3 12:31:06 1996  Richard Henderson  <rth@tamu.edu>

	* csu/initfini.c: Discover the maximum alignment generated by the
	compiler when emitting a function.
	(_init): Make sure the end of the crti fragment is aligned.
	(_fini): Likewise.

Fri Aug  2 03:12:40 1996  Ulrich Drepper  <drepper@cygnus.com>

	* initfini.c: (__libc_is_static): New variable.  Will be
 	initialized in init-first.c.  Some actions in the libc work
 	different when libc is static or dynamic.

	* sysdeps/unix/sysv/linux/init-first.c (init): Use
 	`__libc_is_static' variable to determine whether call to
 	`personality' and `setfpucw' is necessary.  When done set variable
 	to +-1 depending on library type.

	* locale/setlocale.c (setlocale): Use global variable
 	`__libc_enable_secure' instead of calling `get{,e}{g,u}id()' to
 	determine whether it's a SET[UG]ID program.

Fri Aug  2 14:40:22 1996  Roland McGrath  <roland@fast.cs.utah.edu>

	* Version 1.93 test release.

	* manual/Makefile: Use -include for chapters-incl too.

	* Makeconfig (+link): Add back start.o, mistakenly removed in last
	change.

Fri Aug  2 01:04:02 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* nss/Makefile (generated): Add db-*.c.

	* sysdeps/i386/sysdep.h: Get generic/sysdep.h explicitly instead of
	using #include_next.

	* configure.in (--enable-add-ons): Quote m4 macro args.

	* elf/rtld.c (dl_main): For --verify, fail if no dynamic section.

Thu Aug  1 14:40:03 1996  Roland McGrath  <roland@fast.cs.utah.edu>

	* sunrpc/Makefile [$(cross-compile)=no]: Test before making librpcsvc.

	* Makerules (build-shlib): Add -B$(csu-objpfx) to find crt[in].o there.

	* Makeconfig (+preinit, +postinit): Prepend $(csu-objpfx) here.
	(+link): Not here.

	* stdio-common/_itoa.h (_itoa_word): Declare unused to suppress
	warning when inline function is elided.
	* sysdeps/i386/dl-machine.h (elf_machine_matches_host): Likewise.
	(elf_machine_runtime_setup): Likewise.
	* elf/dynamic-link.h (elf_get_dynamic_info): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_got): Likewise.
	(elf_machine_load_address): Likewise.

	* catgets/gencat.c: Include <locale.h>.

	* sysdeps/unix/mk-local_lim.c (param): Add SYMLOOP_MAX/MAXSYMLINKS.

	* login/logwtmp.c (logwtmp): Call time, not __time.

	* sysdeps/gnu/utmpbits.h (_HAVE_UT_PID): New macro.
	* login/login.c (login): Test [_HAVE_UT_PID] to use ut_pid member.
	* login/logwtmp.c (logwtmp): Likewise.

	* sysdeps/generic/ioctl-types.h (sizeof): Define to 0 around #if
	comparing ioctl macro values.

	* sysdeps/i386/sysdep.h: Do `#include_next <sysdep.h>'.

	* manual/Makefile: Use -include for chapters to suppress warning.

	* sysdeps/stub/socket.c: Fix type of TYPE arg.
	* sysdeps/stub/socketpair.c: Likewise.

	* sysdeps/stub/_exit.c (_exit): Remove obsolete __NORETURN keyword.

	* sysdeps/generic/sysdep.h: New file, broken out of ...
	* sysdeps/unix/sysdep.h: ... here.
	(C_LABEL): Moved out.

	* Makeconfig (soversions.mk): Don't use newfangled ${x%%y} syntax;
	stick to sed.  Do `exit 0' at end because while returns nonzero.

	* sysdeps/i386/sysdep.h: New file, broken out of ...
	* sysdeps/unix/i386/sysdep.h: ... here.  Generic asm macros moved out.

	* sysdeps/stub/stdio_lim.h (L_ctermid, L_cuserid): Macros removed.
	They are defined unconditionally in libio/stdio.h.

	* elf/dl-runtime.c: Include <stddef.h> for `NULL' defn.
	* elf/dl-cache.c: Likewise.

Mon Jul 29 19:20:05 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/Makefile [$(subdir == misc]
	(sysdep_headers): Add sys/sysmacros.h.
	* sysdeps/unix/sysv/linux/sys/sysmacros.h: New file.

 	tcgetattr.  We have weak aliases now.  * stdlib/stdlib.h
 	[__OPTIMIZE__ && __GNUC__ >= 2]: Remove "optimizations" for random
 	functions.
1996-08-06 00:25:29 +00:00
Ulrich Drepper ba3f9540ed Corrected handling of add-ons. 1996-08-05 20:16:29 +00:00
Karl Berry f2fec269bf (\heading, \subheading, \subsubheading): Can no
* texinfo.tex (\heading, \subheading, \subsubheading): Can no  
longer call the nonexistent \*secheadingi series. Instead, call  
\plain*secheading. 
(\plainsubsecheading, \plainsubsubsecheading): New macros, by analogy 
with \plainsecheading. 
(\unnumberedsubseczzz, \unnumberedsubsubseczzz): Call them.
1996-08-05 18:01:12 +00:00
Karl Berry 793fde8adb (\HEADINGSdouble, \HEADINGSsingle, HEADINGSdoubleafter, \HEADINGSsingleafter, \CHAPPAGoff, \CHAPPAGon, \CHAPPAGodd): Set \contentsalignmacro, analogous to \pagealignmacro. (\startcontents): Call \contentsalignmacro instead of \pagealignmacro. 1996-08-03 18:59:17 +00:00
Roland McGrath 08e5142a5b Fri Aug 2 14:40:22 1996 Roland McGrath <roland@fast.cs.utah.edu>
* manual/Makefile: Use -include for chapters-incl too.
1996-08-02 20:56:23 +00:00
Roland McGrath 0569100ebe Fri Aug 2 01:04:02 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/Makefile (generated): Add db-*.c.
1996-08-02 16:10:33 +00:00
Karl Berry 9a01894149 Restoring good RCS id. 1996-08-02 15:12:28 +00:00
Roland McGrath e75154a665 Remade for alpha-1.93 1996-08-02 05:27:50 +00:00
Roland McGrath 9ebb936d99 Wed Jul 31 14:21:36 1996 Ulrich Drepper <drepper@cygnus.com>
* termios/termios.h [__OPTIMIZE__]: Remove "optimization" for
	tcgetattr.  We have weak aliases now.
	* stdlib/stdlib.h [__OPTIMIZE__ && __GNUC__ >= 2]: Remove
	"optimizations" for random functions.
1996-08-01 00:08:31 +00:00
Roland McGrath 033badd4fa Mon Jul 29 20:33:42 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/netinet/in.h (ntohl, ntohs, htonl,
	htons) [__BIG_ENDIAN]: #undef them before defining to avoid
	redefinition warning.

Mon Jul 29 20:28:27 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/time.h: Don't optimize tzset() to __tzset() which bypasses
	the __tzset_lock.

Tue Jul 30 15:14:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sunrpc/rpc/pmap_clnt.h: Fix botched patch for multiple inclusion
	protection.

Tue Jul 30 02:48:28 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/loadlocale.c (_nl_load_locale): Change cast to `size_t'
	to be 64-bit clean.
	Reported by Richard Henderson <rth@tamu.edu>.

Tue Jul 30 15:04:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* locale/programs/ld-collate.c (collate_output): Fix typo reported by
	David Miller.

Tue Jul 30 13:23:13 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/setlocale.c (setlocale): Don't try to free C locale
	data.
	Reported by Matthias Urlichs.
1996-07-31 09:45:04 +00:00
Roland McGrath d0320d682a Mon Jul 29 20:28:27 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* time/time.h: Don't optimize tzset() to __tzset() which bypasses
	the __tzset_lock.
1996-07-31 09:39:37 +00:00
Miles Bader 1f0917b7d3 Tue Jul 30 14:35:17 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/dl-sysdep.c	(__open): Use open_file.
 	(open_file): New function, contents mostly from __open.
	(_dl_sysdep_read_whole_file): New function.
1996-07-30 19:23:39 +00:00
Miles Bader a01680aa29 (open_file): New function, contents mostly from __open. (__open): Use open_file. (_dl_sysdep_read_whole_file): New function. 1996-07-30 19:23:06 +00:00
Roland McGrath 55ad485cee Tue Jul 30 15:14:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sunrpc/rpc/pmap_clnt.h: Fix botched patch for multiple inclusion
	protection.
1996-07-30 19:15:53 +00:00
Roland McGrath d69b7ce7ee Tue Jul 30 13:23:13 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/setlocale.c (setlocale): Don't try to free C locale
	data.
	Reported by Matthias Urlichs.
1996-07-30 19:02:29 +00:00
Miles Bader b98f370ce8 Sat Jul 27 11:23:59 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/Makefile ($(common-objpfx)errnos.d): Quote
	`..' dots in sed search string.
1996-07-30 16:58:05 +00:00
Karl Berry ea6631a23d (\indexfonts): Make leading be 12pt. Otherwise, it's too crammed. (\smalllispx): Remove \setleading{10pt}. That was too small. (\doprintindex): Do not call \tex ... \Etex. Index files are Texinfo source, not TeX source, except for using \ instead of @ as the escape character (for now). 1996-07-29 19:08:10 +00:00
Roland McGrath 6b3a222416 Mon Jul 29 01:27:07 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sunrpc/rpc/rpc_msg.h: Fix botched patch for multiple inclusion
	protection.

	* configure.in: Grok `--enable-add-ons=DIR1,DIR2,...', and configure
	in those directories.
	* config.make.in (add-ons): New varaible, set from @subdirs@.
	* Makefile (subdirs): Added $(add-ons) at the end.
1996-07-29 05:54:17 +00:00
Roland McGrath ce7a5ef4bc Sun Jul 28 23:46:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c (strftime: do_number): Initialize PRINTED to
	MAXDIGITS in case P is null and so sprintf is never actually called.

Mon Jul 29 02:46:23 1996  Ulrich Drepper  <drepper@cygnus.com>

	Add support for the to-be-written internationalized regexp.
	This code must be able to use collation symbols and collation
	equivalent classes.
	* locale/C-collate.c (_nl_C_LC_COLLATE_symbol_hash,
	_nl_C_LC_COLLATE_symbol_strings, _nl_C_LC_COLLATE_symbol_classes):
	New global variables for collation classes.
	* locale/categories.def: Add new descriptions for collation symbols
	and collation classes.
	* locale/langinfo.h: Add constants for collation symbols and
	collation classes.
	* locale/lc-collate.c: Add new global variables for collation symbols
	and collation classes.
	(_nl_postload_collate): Initialize new variables.
	* locale/programs/ld-collate.c: Add code to emit tables for
	collation symbols and collation classes.
	* locale/programs/locales.h: Change prototype for `collate_output'.
	* locale/programs/locfile.c (write_all_categories): Call
	`collate_output' with new argument.
	* locale/localeinfo.h: Add declaration for new global vars.
	(union locale_data_value): New member wstr for `wchar_t' strings.
	* locale/programs/locale-spec.c: Handle `collate-classes'
	keyword and print information about available collation classes.
	* locale/strlen-hash.h: New file.  Simple hashing function which
	takes a string with known length.
	* locale/Makefile (distribute): Add strlen-hash.h.
	(locale-modules): New var.  Additional files for `locale' program.

	* locale/C-ctype.c: Rewrite to avoid using string for giving values
	which are of type `u_int32_t'.
	Correct entry for EOF in toupper and tolower tables.

	* locale/loadlocale.c (_nl_load_locale):  Add cast to prevent
	warning.

	* locale/programs/ld-ctype.c (ctype_output): Add code to make
	sure that all tables in binary file are words aligned.

	* locale/programs/locfile.c (write_locale_data): Correct handling
	of LC_MESSAGES locale.  Create directory if necessary.

	* locale/setlocale.c (setlocale): Add cast to avoid warning.

	* string/string.h: Add prototype for `__strndup'.

Wed Jul 24 19:10:00 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* wcsmbs/mbrtowc.c: Remove unused variable.

Sun Jul 28 22:40:25 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): Update to
	2.0.10; some problems were reported with an earlier version, and this
	one is known to work.

	* sysdeps/generic/dl-sysdep.c (__libc_enable_secure): New variable.
	* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
1996-07-29 03:49:00 +00:00
Roland McGrath cddcfecfd1 Sat Jul 27 13:02:09 1996 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c (dl_main): Ignore arguments when environment variable
 	LD_TRACE_LOADED_OBJECTS is set.

Sun Jul 28 19:42:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): Initialize
	__libc_enable_secure instead of _dl_secure.
	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_start): Likewise.
	* elf/dl-load.c (_dl_map_object): Check __libc_enable_secure instead
	of _dl_secure.
	* elf/Makefile (routines): Add enbl-secure.
	(elide-routines.so): Here too.
	* sysdeps/generic/enbl-secure.c: New file.
	* posix/unistd.h [__USE_GNU]: Declare `__libc_enable_secure' flag.
	* elf/dl-support.c (_dl_secure): Variable removed.
	* elf/rtld.c: Likewise.  Replace all uses with __libc_enable_secure.

Sun Jul 28 19:26:40 1996  David S. Miller  <dm@neteng.engr.sgi.com>

	* sysdeps/mips/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
	Declare _dl_runtime_resolve with __attribute__ ((unused)) so the
	compiler doesn't elide it.
	(elf_machine_rel): Follow Jul 14 change in sysdeps/i386/dl-machine.h.
1996-07-29 00:18:42 +00:00
Roland McGrath 40fa2c8c2f Sun Jul 28 19:26:40 1996 David S. Miller <dm@neteng.engr.sgi.com>
* sysdeps/mips/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
	Declare _dl_runtime_resolve with __attribute__ ((unused)) so the
	compiler doesn't elide it.
	(elf_machine_rel): Follow Jul 14 change in sysdeps/i386/dl-machine.h.
1996-07-28 23:43:36 +00:00
Karl Berry cd4e176cbf (paragraphindent): Move to more reasonable place in the source file. (chapfonts, secfonts, subsecfonts, indexfonts): Call \setleading. (\chfplain, \secheading, \plainsecheading, \subsecheading, \subsubheading): Rewrite to properly \hangindent the title. (\sectionheading): New generic macro to print section titles. 1996-07-28 20:57:40 +00:00
Karl Berry 9e9f9cc23f Initial revision 1996-07-28 20:55:30 +00:00
Miles Bader 5f6a519f47 ($(common-objpfx)errnos.d): Quote `..' dots in sed search string. 1996-07-27 16:49:26 +00:00
Roland McGrath 6f25696828 Sat Jul 27 04:37:34 1996 Ulrich Drepper <drepper@cygnus.com>
* string/string.h (strndupa): Change to use return value of
	`memcpy' for more performance.
	* string/strndup.c: Likewise.
1996-07-27 09:36:38 +00:00
Roland McGrath 61965e9b17 Sat Jul 27 02:58:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Take new option --verify when run directly.
	In verify mode, exit with status zero iff the argument object's
	PT_INTERP matches argv[0].
	* elf/ldd.sh.in: Use ${RTLD} --verify and only run the program if it
	exits with zero status.  This makes `ldd' secure again.

Fri Jul 26 22:49:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* elf/rtld.c (dl_main): Implement LD_TRACE_LOADED_OBJECTS
	environment variable handling.  This makes the dynamic linker
	only print loaded libraries and quit.

	* elf/ldd.sh.in: Don't use `rtld --list' but instead
	LD_TRACE_LOADED_OBJECTS environment variable to print needed
	objects.

Sat Jul 27 02:03:26 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* db/makedb.c (main): Print version on stdout, not stderr.  Don't exit
	after printing version until after doing usage for --help.
	(long_options, main, usage): Rename -l/--lowercase option to
	-f/--fold-case (-f matches sort).

Sat Jul 27 04:32:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/makedb.c: New file.  Implement program to create simple <db.h>
	database from textual input.  This will be used for nss_db.

Sat Jul 27 01:24:05 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sunrpc/rpc/auth_unix.h: Fix misapplied patches in last changes.
	* sunrpc/rpc/pmap_clnt.h: Likewise.
	* sunrpc/rpc/auth.h: Likewise.
	* sunrpc/rpc/pmap_rmt.h: Likewise.
	* sunrpc/rpc/rpc_msg.h: Likewise.

Sat Jul 27 04:37:34 1996  Ulrich Drepper  <drepper@cygnus.com>

	* string/string.h (strndupa): Change to use return value of
	`memcpy' for more performance.
	* string/strndup.c: Likewise.

	* string/string.h (strdupa): Don't call __builtin_alloca in argument.
	This might lead to problems.
	(strndupa): Likewise.
1996-07-27 07:29:13 +00:00
Roland McGrath fc933e284e Fri Jul 26 15:24:25 1996 Ulrich Drepper <drepper@cygnus.com>
* sunrpc/rpc/auth.h: Add protection against multiple inclusion
	and change K&R prototypes to ANSI prototypes.
	* sunrpc/rpc/auth_unix.h: Ditto.
	* sunrpc/rpc/clnt.h: Ditto.
	* sunrpc/rpc/pmap_clnt.h: Ditto.
	* sunrpc/rpc/pmap_prot.h: Ditto.
	* sunrpc/rpc/pmap_rmt.h: Ditto.
	* sunrpc/rpc/rpc_msg.h: Ditto.
	* sunrpc/rpc/svc.h: Ditto.
	* sunrpc/rpc/svc_auth.h: Ditto.
	* sunrpc/rpc/xdr.h: Ditto.

Fri Jul 26 18:06:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sunrpc/rpc/auth.h: Add __BEGIN_DECLS and __END_DECLS.
	* sunrpc/rpc/auth_unix.h: Likewise.
	* sunrpc/rpc/clnt.h: Likewise.
	* sunrpc/rpc/netdb.h: Likewise.
	* sunrpc/rpc/pmap_clnt.h: Likewise.
	* sunrpc/rpc/pmap_prot.h: Likewise.
	* sunrpc/rpc/rpc_msg.h: Likewise.
	* sunrpc/rpc/svc.h: Likewise.
	* sunrpc/rpc/svc_auth.h: Likewise.
	* sunrpc/rpc/xdr.h: Likewise.

	* sunrpc/rpc/pmap_clnt.h: Move definition of type `resultproc_t'
	to here from...
	* sunrpc/pmap_rmt.c: ...here.
1996-07-27 02:04:33 +00:00
Roland McGrath 7443a5a8a4 Fri Jul 26 20:39:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* ctype/test_ctype.c: Test EOF too.
1996-07-27 00:40:06 +00:00
Roland McGrath 4f2a1df0d2 Fri Jul 26 00:36:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* ctype/test_ctype.c: Test EOF too.
1996-07-27 00:32:20 +00:00
Miles Bader 4627647c99 Fri Jul 26 16:10:43 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/pututline_r.c (pututline_r): Only call getutid_r if ID has a
	valid ut_id field.
	* login/getutid_r.c (getutid_r): Mark UTMP_DATA->loc_utmp invalid
	if a search fails.
1996-07-26 21:03:47 +00:00
Miles Bader d4eaba51e7 (getutid_r): Mark UTMP_DATA->loc_utmp invalid if a search fails. 1996-07-26 21:01:48 +00:00
Roland McGrath fa8463e5ed Fri Jul 26 00:36:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mips/dl-machine.h: New file, contributed by Kazumoto Kojima
	<kkojima@info.kanagawa-u.ac.jp>.
1996-07-26 04:37:35 +00:00
Roland McGrath 036cc82fbc Fri Jul 26 04:41:28 1996 Ulrich Drepper <drepper@cygnus.com>
* intl/libintl.h: Define optimizing macros if __OPTIMIZE__ is
	defined, not __OPTIMIZED.
	(_nl_msg_cat_cntr): Move declaration outside macro definition
	to prevent "nested extern" warning.
	(dcgettext): Rename local variable `result' to `__result'.

Thu Jul 25 22:46:30 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* locale/programs/localedef.c (__progname): Remove decl.
	(main): Use program_invocation_short_name instead of __progname.
	(usage): Use program_invocation_name instead of __progname.

Fri Jul 26 03:46:08 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c: Use "libc" instead of PACKAGE.
	* locale/localedef.c: Ditto.
	* locale/locale.c: Ditto.

	* locale/findlocale.c (_nl_find_locale): Little optimization.
	Use new function `strndup'.

	* locale/loadlocale.c: Little optimization.  Use constant value
	from `_nl_category_num_items' instead of byte-order dependend
	value from file.

	* locale/programs/ld-time.c (time_add): Correct string constant.

	* locale/programs/locale-spec.c: New file.
	* locale/programs/locale.c: Call `locale_special' function if
	no other field matches.

	* locale/programs/localedef.c: No need to define `program_name'.
	Use global variable `__progname'.

	* locale/programs/locfile.c (write_locale_data): Always write
	LC_MESSAGES data in LC_MESSAGES/SYS_LC_MESSAGES file.  This is
	necessary since message catalogs are also installed in the
	LC_MESSAGES/ directory.

	* locale/programs/stringtrans.c (ADDC): Correctly use `encode_char'
	function instead of writing single bytes.
	(encode_char): Also handle little endian.

	* locale/setlocale.c (new_composite_name): Little optimization.
	Use return value of `memcpy'.

	* misc/ttyent.h: Pretty print prototypes, add missing parameter
	names, prepend parameter names with __  and use `__const' instead
	of `const'.
	* posix/unistd.h: Ditto.
	* stdlib/stdlib.h: Ditto.
	* string/string.h: Ditto.

	* posix/getconf.c: De-ASNI-fy.  Recognize POSIX.2 constant names.
	Use `error' function instead of doing it by hand.
	* sysdeps/posix/sysconf.c: De-ANSI-fy.
	Handle _SC_COLL_WEIGHTS_MAX.
	* sysdeps/stub/sysconf.c: Handle _SC_CHARCLASS_NAME_MAX,
	_SC_COLL_WEIGHTS_MAX, _SC_EQUIV_CLASS_MAX, _SC_2_LOCALEDEF
	since these do depend on the platform.
	Add POSIX.4 symbols.

	* posix/posix2_lim.h: Add missing definition of
	_POSIX2_COLL_WEIGHTS_MAX.
	Change _POSIX2_EQUIV_CLASS_MAX and _POSIX2_CHARCLASS_NAME_MAX
	to high values since we have no fixed limit.

	* sysdeps/generic/confname.h: Add _SC_PAGE_SIZE as alias for
	_SC_PAGESIZE for buggy systems (= HP UX) out there.

	* wcsmbs/Makefile (routines): Add mbsnrtowcs and wcsnrtombs.
	* wcsmbs/mbsnrtowcs.c: New file.  Non-standard implementation.
	* wcsmbs/wcsnrtombs.c: Ditto.
	* wcsmbs/wchar.h [__USE_GNU]: Add prototypes for mbsnrtowcs and
	wcsnrtombs.

Thu Jul 25 00:25:54  Richard Henderson  <rth@tamu.edu>

	* nss/nss_db/db-XXX.c: Kill trailing ; from lock defn as a matter of
	course.
	* nss/getXXent_r.c: Likewise.
	* nss/nsswitch.c: Likewise.
	* nss/nss_files/files-XXX.c: Likewise.
	* sysdeps/mach/hurd/dirstream.h (struct __dirstream): Likewise.
	* sysdeps/unix/bsd/telldir.c (struct record): Likewise.
	* sysdeps/unix/dirstream.h (struct __dirstream): Likewise.
1996-07-26 04:35:31 +00:00
Roland McGrath 1e16111cf1 Regenerated
Sat Jul 20 21:55:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	Win32 hacks from <Rob_Tulloh@tivoli.com>.
	* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
	use void * for my_realloc; include <malloc.h> for alloca.
	(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
	* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
	* posix/glob.h: Likewise.

Fri Jul 19 16:56:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
	for `struct stat;' forward decl.
1996-07-26 00:34:28 +00:00
Roland McGrath 4311b2a60c Thu Jul 25 00:53:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/configure.in (LIBC_LINUX_VERSION): New
	macro, now put the needed Linux version just once, here; update to
	needing linux-2.0.3 headers.
	(libc_cv_linuxVER): New macro derived from that.
	(kernel header check): Use those macros and some m4 magic to replace
	hard-coded `201' and `2.0.1' in several places.

	* Makerules ($(libdir)/libc.so): Fix typos in generated comment.

Wed Jul 24 17:02:30 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/localtime.c: Move lock variable declaration to end of
	variable declarations since if is a dummy macro the ; at the
	end terminates the variable section of the function.

	* time/tzset.c: Undefine `tzset' before function declaration.
	Use `weak_function' macro instead of `weak_symbol'.

Wed Jul 24 18:57:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/strtouq.c: Additional weak alias is `strtoull', not
	`strotull'.

Wed Jul 24 18:26:23 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/C-ctype.c: Increment number of fields after change
	from Wed Jun 19 03:24:58 1996.
1996-07-25 22:41:27 +00:00
Roland McGrath c7fd2f4783 Tue Jul 23 18:13:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/Makefile (rpcuserlibs): New variable.
	($(common-objpfx)libc.so): Move deps into that, use it.
	[$(subdir) = elf] ($(objpfx)librtld.so): Depend on
	$(rpcuserlibs:.so=_pic.a).
	* elf/Makefile ($(objpfx)librtld.so): Just depend on libc_pic.a; don't
	use $(LDLIBS-c.so).

Thu Jul 18 21:41:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/generic/stpncpy.c: Fix semantics to make `stpncpy (d, s,
 	n)' equivalent to `strncpy (d, s, n), d += strnlen (d, n)'.
1996-07-23 22:18:45 +00:00
Roland McGrath b24be05f19 Tue Jul 23 02:49:58 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/iso-4217.def: Add India to comment for symbol "INR ".
	Reported by Raja R Harinath  <harinath@cs.umn.edu>.

Sat Jul 20 14:03:45 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Remove bogus
	#undef RESOLVE.

	* time/tzset.c: Include <libc-lock.h>.
	(__tzset_lock): New lock variable.
	(tzset): New function (weak defn), no longer weak alias for __tzset.
	Call __tzset while holding __tzset_lock.
	* time/localtime.c: Include <libc-lock.h>.
	(__localtime_r): Hold __tzset_lock while doing the work.
1996-07-23 21:40:11 +00:00
Roland McGrath e3047adb46 Sun Jul 21 06:48:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/setenv.c (__environ): Change conditional for #define
	from [!HAVE_GNU_LD] to [!_LIBC].
	[_LIBC]: Include <libc-lock.h> and define a lock.
	(LOCK, UNLOCK): New macros, no-ops for [! _LIBC].
	(setenv, unsetenv): Use them.

Sat Jul 20 21:55:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	Win32 hacks from <Rob_Tulloh@tivoli.com>.
	* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
	use void * for my_realloc; include <malloc.h> for alloca.
	(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
	* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
	* posix/glob.h: Likewise.
1996-07-21 11:09:58 +00:00
Roland McGrath 9e0f40723e Sun Jul 21 06:48:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/setenv.c (__environ): Change conditional for #define
	from [!HAVE_GNU_LD] to [!_LIBC].
	[_LIBC]: Include <libc-lock.h> and define a lock.
	(LOCK, UNLOCK): New macros, no-ops for [! _LIBC].
	(setenv, unsetenv): Use them.
1996-07-21 11:09:45 +00:00
Miles Bader c199a24feb Sun Jul 21 01:44:39 1996 Miles Bader <miles@gnu.ai.mit.edu>
* locale/programs/locfile.c (write_locale_data): Deal with missing
	UIO_MAXIOV.

	* sysdeps/mach/hurd/socket.c (socket): Make TYPE an int.
	* sysdeps/mach/hurd/socketpair.c (socketpair): Likewise.
1996-07-21 06:52:29 +00:00
Miles Bader 6f9561ed06 <unistd.h>: New include. 1996-07-21 02:57:09 +00:00
Miles Bader 710bf4f9f8 * sysdeps/mach/hurd/uname.c (uname): Deref UNAME to get nodename. 1996-07-21 02:33:51 +00:00
Miles Bader e894c64677 (uname): Deref UNAME to get nodename. 1996-07-21 02:33:13 +00:00
Roland McGrath ed30638ace Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
Win32 hacks from <Rob_Tulloh@tivoli.com>.
	* posix/glob.c [WIN32]: Don't include <pwd.h>; don't use d_ino;
	use void * for my_realloc; include <malloc.h> for alloca.
	(glob) [WIN32]: Use "c:/users/default" for ~ if no HOME variable.
	* posix/fnmatch.h [WIN32]: Use prototypes even if [!__STDC__].
	* posix/glob.h: Likewise.
1996-07-21 01:55:51 +00:00
Miles Bader 5764121c46 * sysdeps/mach/libc-lock.h (__libc_lock_define): Backslashify
continuation line.
1996-07-21 01:34:17 +00:00
Miles Bader 0e33ca7b05 Sat Jul 20 13:28:52 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/select.c (__select): Don't poll on the last
	call __io_select unless there's only a single descriptor, as each
	descriptor now has its own reply port.
	If there is only a single descriptor, just use its reply port for
	everything and don't bother creating the port set.
1996-07-20 17:34:39 +00:00
Miles Bader cbd96c3385 (__select): Don't poll on the last call __io_select unless there's only a single descriptor, as each descriptor now has its own reply port. If there is only a single descriptor, just use its reply port for everything and don't bother creating the port set. 1996-07-20 17:33:17 +00:00
Roland McGrath f0097fa0df Thu Jul 18 12:33:57 1996 Roland McGrath <roland@baalperazim.frob.com>
* Rules (dummy.o, empty.o): Targets removed.
	(dummy.c, empty.c): New targets replace them.

See ChangeLog.5 for earlier changes.
1996-07-20 12:06:21 +00:00
Roland McGrath 73f7f68ba3 Fri Jul 19 15:45:20 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/C-messages.c (_nl_C_LC_MESSAGES): Add missing Kleene
	operator to yesexpr and noexpr string.
1996-07-20 11:53:52 +00:00
Roland McGrath 22f87e0fa8 Sat Jul 20 07:15:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* crypt/Makefile, crypt/nocrypt.c: Removed.  It is illegal to export
 	from the USA any software that even makes it easy to drop in an
 	encryption module of foreign origin.
	* Makerules (cryptobjdir): Variable removed.
	($(libdir)/libc.so): Remove dep on libcrypt.so$(libcrypt.so-version).
	* Makefile (subdirs): Remove crypt.

Fri Jul 19 15:10:37 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sunrpc/xdr_mem.c (xdrmem_putlong): Don't cast LP to int32 (the
 	old code would have failed on a big-endian 64-bit architecture).
	* sunrpc/xdr_stdio.c (xdrstdio_putlong): Ditto.

	* sunrpc/xdr.c (xdr_int): Handle XDR_FREE case.
	(xdr_u_long): Use switch instead of chain of if-statements.
  	Remove gratitous parentheses around return expressions.
	(xdr_enum): Open code case where INT_MAX<LONG_MAX.

	* sunrpc/svc.c (svc_getreqset): Increment SOCK by 32, not NFDBITS.

	* sunrpc/portmap.c (reg_service): Declare ANS and PORT as long,
 	not int.

Fri Jul 19 16:56:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* dlfcn.h, db.h: New wrapper headers.

	* posix/glob.h [!_AMIGA && !VMS]: Check this instead of just [!_AMIGA]
	for `struct stat;' forward decl.

Fri Jul 19 22:25:19 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/iso-4217.def: Add some more standardized currency
	symbols.
1996-07-20 11:26:09 +00:00
Roland McGrath cf725107f3 Fri Jul 19 13:18:02 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/report-wait.c (describe_number): Use unsigned long int for J.

	(subdir): Fix name.
1996-07-19 17:18:51 +00:00
Roland McGrath 87e4c1ba63 Thu Jul 18 11:42:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* crypt/Makefile (lib-noranlib): Depend on
	$(objpfx)libcrypt.so$(libcrypt.so-version).

	* sysdeps/stub/ustat.c: Ditto.
	* sysdeps/unix/sysv/linux/alpha/start.S: Move to ...
	* sysdeps/alpha/elf/start.S: here.
1996-07-18 15:46:04 +00:00
Roland McGrath 49b9862700 Thu Jul 18 04:33:21 1996 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/errnos.awk: Move EWOULDBLOCK check before errno==0
	check.  mib's clueless hacking broke it.

Thu Jul 18 04:27:21 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Makerules ($(libdir)/libc.so): Add missing / after $(cryptobjdir).

Wed Jul 17 10:54:20 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/start.S: Move to ...
	* sysdeps/alpha/elf/start.S: here.

	* misc/sys/ustat.h: New file.
	* misc/ustat.h: Ditto.
	* sysdeps/generic/ustatbits.h: Ditto.
	* libc-orig/sysdeps/stub/ustat.c: Ditto.
	* sysdeps/unix/sysv/linux/ustatbits.h: Ditto.
	* misc/Makefile (headers): Mention ustat.h, sys/ustat.h, and
 	ustatbits.h.
	(routines): Mention ustat.

	* sysdeps/unix/sysv/linux/syscalls.list: Mention klogctl in
 	alphabetically correct place.  Mention ustat.

	* sysdeps/unix/alpha/sysdep.S: Make errno a bss symbol, not a
	common symbol (makes errno accessible from gdb).

	* login/pututline_r.c (pututline_r): Test ut_id in repositioning
	test, not ut_type.

	* login/logwtmp.c (logwtmp): Reimplemented.  Must ensure that a
 	record always gets appended at end of file (wtmp is a log file,
 	after all).  Set ut_type to DEAD_PROCESS if name is empty.

	* login/getutid_r.c (getutid_r): Handle search for UT_TYPE in
	separate loop from search for UT_ID.  Fix code so it is in
	sync with Unix man page.

	* login/getutline_r.c (getutline_r): Stop searching only if
 	ut_line matches and type is either USER_PROCESS or LOGIN_PROCESS.

Tue Jul 16 15:06:18 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/netinet/in.h: Base on <linux/in.h> to
 	avoid duplicate declarations.

Sun Jul 14 19:08:55 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* manual/maint.texi (Supported Configurations): Add alpha-gnu-linux
	and alpha-gnu-linuxecoff targets.

Fri Jul 12 16:58:44 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/netinet/in.h: Declare bindresvport().

Sat Jun 22 23:30:07 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* resolv/res_send.c (res_send): Declare FROMLEN as size_t instead
	of int.

	* resolv/res_comp.c (res_hnok): Use empty statement in place
	of NULL (which generates a "useless expression" warning in
	gcc).
1996-07-18 08:43:26 +00:00
Roland McGrath d7bca0d30b Wed Jul 17 23:56:35 1996 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/mach/hurd/Makefile ($(common-objpfx)errnos.d): Replace ../
	with $(..) in output.
1996-07-18 04:18:05 +00:00
Roland McGrath f18edac3a3 Wed Jul 17 21:53:45 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/Makefile (dl-routines): Add dl-cache.
	* elf/dl-cache.c: New file.
	* elf/dl-load.c (_dl_map_object): Check cache before default path.
1996-07-17 23:09:43 +00:00
Roland McGrath 3867ee645c Wed Jul 17 20:41:30 1996 Ulrich Drepper <drepper@cygnus.com>
* stdio-common/vfscanf.c: Major change.  Now read character
	from stream only if needed.  Before it was read after the
	previous character was used.
	Bug reported by Martin Goik <goma0002@FH-Karlsruhe.DE>

	* stdio-common/tstscanf.c: Change test program so that return
	value is != 0 if one test failed.

	* sysdeps/m68k/Makefile (crypt): Variable removed.
	* sysdeps/sparc/Makefile: Likewise.
1996-07-17 19:32:22 +00:00
Roland McGrath ec2ac6d530 Wed Jul 17 17:08:48 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* version.h (VERSION): Update to 1.93.

	* Makerules ($(libdir)/libc.so): Depend on
	$(common-objpfx)libcrypt.so$(libcrypt.so-version).

	* crypt/nocrypt.c: New file.
	* Makefile (subdirs): Add crypt.
	* crypt/Makefile: New file.

	* Makerules (soversions.mk): Move this target, include of it, and
	include of version.mk to ...
	* Makeconfig: ... here.
	(soversions.mk): Depend on Makeconfig instead of Makerules.

	* shlib-versions (*-*-*): Set libcrypt=0.

Wed Jul 17 02:43:28 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* shlib-versions (*-*-gnu*): Set libc=0.0

Tue Jul 16 01:52:42 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h: Follow Jul 14 change in
	sysdeps/i386/dl-machine.h.

Tue Jul 16 00:14:07 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/inet/syscalls.list (connect, send): Add underscores
	to the strong name, not the file name.

	* csu/initfini.c: More magic.  Detect if .end is produced and put it
	in the output iff the compiler does.
1996-07-17 19:01:35 +00:00
Roland McGrath 4de1d5977c Wed Jul 17 17:08:48 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (soversions.mk): Move this target, include of it, and
	include of version.mk to ...
	* Makeconfig: ... here.
	(soversions.mk): Depend on Makeconfig instead of Makerules.
1996-07-17 18:59:42 +00:00
Miles Bader 8a5776e6fe Merge linewrap changes
Wed Jul 17 11:29:26 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (lwupdate): Fix boundary condition where a
 	word extends right up to rmargin.

	* stdio/linewrap.c (lwupdate): When we've done a word wrap and
	output the wrap margin, set point_col to wmargin.
	Use negative point_col to deal with a wmargin of 0.
	(line_wrap_point): Return 0 for a negative point_col.
	(line_wrap_stream): Make wmargin ssize_t.
	* stdio/linewrap.h (struct line_wrap_data): Make wmargin &
 	point_col ssize_t.
	(line_wrap_stream): Make wmargin ssize_t.
	(line_wrap_point): Return 0 for a negative point_col.

Tue Jul 16 00:18:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (__line_wrap_update): Add hackery from flshfp
 	to fiddle __put_limit in conjunction with __linebuf_active.
1996-07-17 18:46:54 +00:00
Miles Bader e964b97666 (lwupdate): Fix boundary condition where a word extends right up to rmargin. When we've done a word wrap and output the wrap margin, set point_col to wmargin. Use negative point_col to deal with a wmargin of 0. (line_wrap_point): Return 0 for a negative point_col. 1996-07-17 18:37:00 +00:00
Roland McGrath 96e1bff251 Updated from ../gpl2lgpl.sed 1996-07-17 18:00:33 +00:00
Roland McGrath 184b7b466a * elf/dl-lookup.c (_dl_lookup_symbol): Avoid sizeof dynamic auto array
because that is broken on alpha.
1996-07-17 03:34:06 +00:00
Roland McGrath f36f8dcf1c Tue Jul 16 16:43:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/mmap.c: Use same inheritance arg in second vm_map
	call as in first.

	* Makerules (make-link): Install the new link with atomic mv -f in
	case ln itself requires the library being installed.
1996-07-16 21:19:13 +00:00
Roland McGrath ec42724d69 Tue Jul 16 00:31:31 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h: Mirror Roland's changes to
	i386/dl-machine.h of 960713.

	* sysdeps/generic/dl-sysdep.c:  Include <sys/mman.h>.
	(_dl_sysdep_read_whole_file): Fix result variable declaration.

Tue Jul 16 00:53:57 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/uname.c: Call __gethostname to fill in the
	`nodename' member.

Mon Jul 15 17:23:53 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/vfprintf.c (vfprintf): Call parse_one_spec
	with pointer to local variable instead of NULL.

1996-07-15  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime): Don't pass empty macro argument to `add'.

Sat Jul 13 09:53:39 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Remove names
	that are already added by other means.

	* sysdeps/unix/sysv/linux/syscalls.list: Add more EXTRA's in the
	caller column to get those syscalls added automagically.

	* elf/rtld.c (dl_main) [ELF_MACHINE_DEBUG_SETUP]: Use this macro
	instead of setting the DT_DEBUG pointer.

	* csu/initfini.c (_init, _fini): Generate .end directives after
	standalone prologues and filter them out from epilogues.
1996-07-16 06:38:54 +00:00
Roland McGrath ed36809a9c Sat Jul 13 09:53:39 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list: Add more EXTRA's in the
	caller column to get those syscalls added automagically.
1996-07-16 06:10:19 +00:00
Karl Heuer 3270607468 Fix previous change. Use sed's y command instead. 1996-07-16 04:47:46 +00:00
Karl Heuer 749702b2d4 Use portable tr syntax. 1996-07-16 03:53:55 +00:00
Linda A. Walsh 08e722939f * config.guess (HP 9000/811): Recognize this as a PA1.1 machine. 1996-07-15 17:20:52 +00:00
Miles Bader 05a6a9d64b Mon Jul 15 12:24:54 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/logout.c (logout): Initialize DATA to a state that will
	make setutent_r happy.
1996-07-15 16:30:04 +00:00
Miles Bader 405e5e339e (logout): Initialize DATA to a state that will make setutent_r happy. 1996-07-15 16:25:44 +00:00
Roland McGrath 391763e755 * Makeconfig (rtld-installed-name): Set to ld.so.1.
* sysdeps/unix/sysv/linux/Makefile (rtld-installed-name): Variable
	removed.

	* manual/Makefile (glibc-targets): Remove subdir_ from elts.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): New fn.
1996-07-15 00:11:11 +00:00
Roland McGrath 2d3bbb8c67 Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): New fn.
1996-07-15 00:05:56 +00:00
Torbjorn Granlund 939d5646d1 Generalize C90 alternative to all x90 machines. 1996-07-14 18:09:15 +00:00
Roland McGrath a78b0f1827 * MakeTAGS (extract): Pass --add-comments=TRANS.
* sysdeps/gnu/errlist.awk: Write comments into the output with the
	descriptive paragraphs from the manual preceded by TRANS.
1996-07-14 17:48:00 +00:00
Roland McGrath b1dbbaa48c * elf/rtld.c (RESOLVE): Use the dl's load address, not a constant zero!
(_dl_start): Move RESOLVE defn inside this function and #include
	"dynamic-link.h" a second time there.
	[RTLD_START]: Move use of this after _dl_start function.
1996-07-14 13:20:46 +00:00
Roland McGrath f51d1dfd35 * elf/dl-reloc.c: Include "dynamic-link.h" at file scope.
* elf/rtld.c: Include <string.h>.

	* elf/dynamic-link.h (ELF_DYNAMIC_DO_REL, ELF_DYNAMIC_DO_RELA,
	ELF_DYNAMIC_RELOCATE): No longer take RESOLVE argument.
	Conditionalize defns on [RESOLVE].
	* elf/do-rel.h (elf_dynamic_do_rel): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	Instead use RESOLVE macro with same args.
	(elf_machine_rel): Conditionalize defn on [RESOLVE].
	* elf/dl-reloc.c (RESOLVE): New macro, define before including
	"dynamic-link.h".  It replaces `resolve' local function.
	* elf/dl-runtime.c: Likewise.
	* elf/rtld.c: Likewise.
1996-07-14 11:39:25 +00:00
Roland McGrath c928de7902 * elf/dl-deps.c (_dl_map_object_deps): Start TAILP at last preload.
* elf/dl-open.c (_dl_open): Force an indirect call for
	_dl_relocate_object so there is no chance a PLT fixup will be done
	and clobber _dl_global_scope before our call happens.

	* sysdeps/i386/fpu/__math.h (tan): Correct output constraint from =u
	to =t; must operate on top of fp reg stack, not second from top.
	Correct input constraint to 0 from t; must be explicit when input and
	output are the same register.
	(floor): Use __volatile instead of volatile.
	(ceil): Likewise.

	* manual/Makefile ($(objpfx)stamp%-$(subdir)): Separate rule from
	other targets.
1996-07-14 10:04:21 +00:00
Roland McGrath 2064087b5f Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.

Sat Jul 13 23:50:17 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* manual/Makefile (lib): New phony target.  Depend on stamp files.
	($(objpfx)stamp%-$(subdir)): New rule to create them when necessary.

1996-07-13  Paul Eggert  <eggert@twinsun.com>

	* time/strftime.c (strftime): Use space padding for %e, %k, %l,
	to match Emacs format-time-string specification.
	(DO_NUMBER_SPACEPAD): Renamed from DO_NUMBER_NOPAD.

Sat Jul 13 20:17:38 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/dl-deps.c (_dl_map_object_deps): Take new args PRELOADS and
	NPRELOADS, vector of `struct link_map *'s; add them to the searchlist
	between MAP and its deps.
	* elf/link.h: Fix decl.
	* elf/rtld.c (dl_main): If not secure, parse LD_PRELOAD for
	colon-separated list of names, map those and pass vector of ptrs as
	PRELOADS list to _dl_map_object_deps.
	* elf/dl-runtime.c (_dl_object_relocation_scope): Pass new args to
	_dl_map_object_deps with empty preload list.
	* elf/dl-open.c (_dl_open): Likewise.

	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill): Function
	removed.
	(__mmap): Pass MACH_PORT_NULL for memobj port when (flags & MAP_ANON).
	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill):
	Conditionalize defn on [! MAP_ANON].
	* elf/dl-minimal.c (malloc): Conditionalize use of _dl_zerofd
	on [! MAP_ANON].
	* elf/rtld.c (dl_main): Likewise.
	* elf/dl-load.c (_dl_zerofd): Conditionalize defn on [! MAP_ANON].
	(_dl_map_object_from_fd): Conditionalize initialization of _dl_zerofd.

	* elf/dl-fini.c (_dl_fini): Skip finalizer for executable itself.

Sat Jul 13 02:47:53 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* stdlib/random.c (__random): Declare as int32_t to be in sync
	with declaration.

	* socket/Makefile (headers): Add socketbits.h.

	* misc/mntent.c (endmntent): Allow for NULL stream.  SunOS does
	it that way.

	* grp/initgroups.c (initgroups): Add groups that user is a member
 	of, not the ones he is _not_ a member of.

	* nss/nsswitch.c (known_compare): Make known_compare() a static
 	instead of a local function.  The latter are difficult to debug
 	and slow to execute on certain platforms.

	* sysdeps/posix/ttyname_r.c (ttyname_r): Use sizeof (dev) - 1 in
 	place of sizeof (dev).  The size of a literal string includes the
 	NUL byte.

	* sysdeps/unix/getlogin.c (getlogin): Initialize ut_fd with -1.

Thu Jul 11 16:59:10 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* misc/mntent.c (addmntent): Seek to end of file before writing
 	entry.  Return 1 on error, not -1.

Tue Jul  9 19:08:05 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/syscalls.list: Mark bdflush as EXTRA
	syscall.

Fri Jul  5 18:44:55 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c (port_to_cpu_addr): Size
 	shift amount for Jensen must be 5 not 4.

Sat Jul 13 20:04:28 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* socket/sys/socket.h (struct osockaddr): New type.

Sat Jul 13 03:50:53 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/Makefile (routines): Add qefgcvt and qefgcvt_r.
	* misc/efgcvt.c, misc/efgcvt_r.c: Change code so that the `double'
	and `long double' versions can be generated.
	* misc/qefgcvt.c, misc/qefgcvt_r.c: New files.  Define macros
	so that included efgcvt{,_r}.c file generate `long double'
	versions.
	* stdlib/stdlib.h: Add prototypes for q[efg]cvt() and q[ef]cvt_r()
	functions.

	* manual/startup.texi: Document new getsubopt function.
	* manual/examples/subopt.c: New example program for documenting
	getsubopt function.

Fri Jul 12 23:58:37 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/Makefile (routines): Add getsubopt.
	* stdlib/stdlib.h: Add prototype for getsubopt.
	* stdlib/getsubopt.c: New file.  Implement getsubopt function
	to handle suboption parsing.
1996-07-14 06:04:09 +00:00
Roland McGrath 842907c6f8 * inet/getnetent_r.c: Define NEED_H_ERRNO.
* inet/getnetbynm_r.c: Likewise.
	* inet/getnetent.c: Likewise.
	* inet/getnetbyad_r.c: Likewise.
	* inet/getnetbyad.c: Likewise.
	* inet/getnetbynm.c: Likewise.

	* sysdeps/generic/pselect.c: Include <sys/time.h>.

	* misc/sys/select.h: Include <time.h> instead of <sys/time.h> for
	`struct timespec'.
1996-07-12 02:01:17 +00:00
Roland McGrath e6c9a67a0b * math/Makefile (calls): Add s_frexp, s_ldexp.
(routines): Remove them and &f from here.

	* sys/socket.h: New file, wrapper for socket/sys/socket.h.

Thu Jul 11 00:22:40 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-ieee754/s_frexpl.c: New file.  `long double'
	implementation of frexp() function.
	* sysdeps/libm-ieee754/s_ldexpl.c: New file.  `long double'
	implementation of ldexp() function.

	* sysdeps/libm-i387/s_isnanl.c (isnanl): Mask explicit one
	out before or'ing.
1996-07-12 00:43:28 +00:00
Roland McGrath adc6ff7f81 Thu Jul 11 20:09:55 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/nss_files/files-service.c (getservbyname): Take second arg PROTO
	and check it.

	* nss/nss_files/files-XXX.c: Comment fix.

Fri Jul 12 01:28:35 1996  Ulrich Drepper  <drepper@cygnus.com>

	* nss/getXXent_r.c (GETFUNC_NAME_STRING): Define with name
	of reentrant function.
	(setup): Pass additional argument with function name we are
	looking for.
	(SETFUNC_NAME, ENDFUNC_NAME, GETFUNC_NAME): Call setup with
	new argument {SET,END,GET}FUNC_NAME_STRING.

	* nss/getXXent.c (GETFUNC_NAME): RESULT must be static because
	we return a pointer.

Thu Jul 11 18:20:44 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* nss/nss_files/files-parse.c: Add comment about things to #define.

	* nss/nss_files/files-hosts.c (NEED_H_ERRNO): Define it.

	* nss/nss_files/files-parse.c (STRING_FIELD): Don't flag NUL before
	terminator char as an error.

	* nss/getXXbyYY_r.c (REENTRANT_NAME): Set *H_ERRNOP, not h_errno.

Thu Jul 11 03:21:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c (write_out): Move code to determine new
	best size out of inner loop.

Wed Jul 10 05:24:40 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* misc/mntent.c: Include <sys/types.h>.
	(endmntent): Return 1 one success, 0 on failure.
	(getmntent): Chop newline and ignore empty lines.

Mon Jul  8 21:18:40 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (RESOLVE): New macro, defined
	differently based on [RTLD_BOOTSTRAP].
	(elf_machine_rela): Use it instead of the fn ptr arg directly.
1996-07-12 00:20:03 +00:00
Roland McGrath ddc6fb0c8e Thu Jul 12 01:28:35 1996 Ulrich Drepper <drepper@cygnus.com>
* nss/getXXent_r.c (GETFUNC_NAME_STRING): Define with name
	of reentrant function.
	(setup): Pass additional argument with function name we are
	looking for.
	(SETFUNC_NAME, ENDFUNC_NAME, GETFUNC_NAME): Call setup with
	new argument {SET,END,GET}FUNC_NAME_STRING.
1996-07-11 23:42:52 +00:00
David MacKenzie 6f6f2bbe52 Add MIT copyright notice. From gordoni@cygnus.com. 1996-07-11 21:02:19 +00:00
Roland McGrath 63d9ce12c1 Mon Jul 8 21:18:40 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (RESOLVE): New macro, defined
	differently based on [RTLD_BOOTSTRAP].
	(elf_machine_rela): Use it instead of the fn ptr arg directly.
1996-07-10 14:42:15 +00:00
Roland McGrath 07a4742f9e * posix/glob.h (__glob_opendir_hook, __glob_readdir_hook,
__glob_closedir_hook): Remove decls.

	* sysdeps/generic/machine-gmon.h: Declare mcount_internal.

	* sysdeps/unix/inet/syscalls.list: Define __ names with weak aliases
 	for send and connect syscalls.

	* socket/sys/socket.h: New file, taken from non-sysdep parts of
	linux/sys/socket.h; break sysdeps parts out into socketbits.h.
	Declare __ names for send and connect.
	* sysdeps/generic/socketbits.h: New file.
	* sysdeps/unix/sysv/linux/socketbits.h: New file.
	* sysdeps/unix/sysv/linux/sys/socket.h: File removed.
	* sysdeps/generic/sys/socket.h: File removed.

	* sysdeps/mach/hurd/connect.c: Define __ name and weak alias.
	* sysdeps/mach/hurd/send.c: Likewise.
1996-07-09 23:17:59 +00:00
Roland McGrath c150923988 Tue Jul 9 09:37:55 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/libc-lock.h: New file.
	* sysdeps/unix/readdir.c: Do locking.
	* sysdeps/unix/seekdir.c: Likewise.
	* sysdeps/unix/rewinddir.c:  Likewise.
	* sysdeps/unix/closedir.c: Likewise.
	* sysdeps/unix/bsd/telldir.c: Likewise.
	* sysdeps/mach/hurd/seekdir.c: Likewise.
	* sysdeps/mach/hurd/readdir.c: Likewise.
	* sysdeps/mach/hurd/closedir.c: Likewise.
	* sysdeps/mach/hurd/opendir.c: Initialize the lock.
	* sysdeps/unix/opendir.c: Likewise.
	* sysdeps/mach/hurd/dirstream.h: Include <libc-lock.h>.
	(struct __dirstream): Add lock member using __libc_lock_define.
	* sysdeps/unix/dirstream.h: Likewise.

	* sysdeps/stub/libc-lock.h (__libc_lock_fini): New macro.

	* stdlib/mbstowcs.c: Pass address of pointer to mbsrtowcs.

	* stdlib/wcstombs.c: Use wcsrtombs instead of mbsrtowcs.

Thu Jul  4 01:34:04 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/stringtrans.c: Fix typo in copyright.

	* stdio-common/printf-prs.c: Add casts to prevent
        signed<->unsigned warnings.

	* stdio-common/printf-parse.h: Initialize state variable before
	calling mbrlen.
	* stdio-common/printf-prs.c: Don't initialize state variable here.
	* stdio-common/vfprintf.c: Don't initialize state variable.
	(vfprintf): While determining length of multibyte string don't
	try to be clever in determining characters to use for first
	call.

	Add real implementation of multibyte<->wide char conversion
	functions.  The functions always convert between the fixed wide
	char format (ISO 10646 in UCS4) and the UTF8 representation of
	this character set.  Conversion between the currently used
	8bit character set and ISO 10646 will not take place.  This is
	what iconv() is for.
	* wcsmbs/wchar.h (mbstate_t): Define as structure to replace
	dummy definition.
	Add optimized version of `mbrlen' function.
	* wcsmbs/btowc.c (btowc): Restrict range of legal characters
	to 0...0x7f.
	* wcsmbs/wctob.c (wctob): Restrict range of legal characters
	to 0..0x7f.
	* wcsmbs/mbrlen.c: Make mbrlen a weak alias of __mbrlen.
	This is needed in the wchar.h header.
	* wcsmbs/mbrtowc.c: Replace dummy implementation.  Convert UTF8
	encoded character to UCS4.
	* wcsmbs/mbsinit.c: Replace dummy implementation.  Test COUNT
	element of `mbstate_t' for initial state.
	* wcsmbs/mbsrtowcs.c: Replace dummy implementation.  Convert UTF8
	encoded string to UCS4 string.
	* wcsmbs/wcrtomb.c: Replace dummy implementation.  Convert UCS4
	character to UTF8 encoded form.
	* wcsmbs/wcsrtombs.c: Replace dummy implementation.  Convert UCS4
	encoded string to UTF8 encoded form.
1996-07-09 14:49:13 +00:00
Roland McGrath 089b2b8ad8 * sysdeps/unix/sysv/linux/configure.in: Use version number in cache
variable name, so new a libc with new requirements won't fail to
 	notice an insufficient Linux version.
1996-07-09 12:22:26 +00:00
Roland McGrath 99c5795100 * sysdeps/unix/sysv/linux/direntry.h: New file from David Mosberger.
* sysdeps/unix/sysv/linux/configure.in: Check for Linux 2.0.1 headers,
	instead of 2.0 headers.
1996-07-09 12:18:13 +00:00
Roland McGrath 20121a6ac2 * sysdeps/mach/hurd/Makefile (stamp-errnos): Uncomment CVS commit cmds.
* sysdeps/gnu/errlist.awk: Undo mib's bogus changes.  The
	sysdeps/mach/hurd/errnos.awk bug fix was the only correct change.
1996-07-09 11:21:20 +00:00
Roland McGrath 3dbe15814d Tue Jul 9 06:19:29 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/machine-gmon.h [NO_UNDERSCORES]: Declare _mcount
	before using it in lhs of weak_alias.

	* nss/getXXent_r.c (setup): New function, broken out of SETFUNC_NAME.
	Call __nss_lookup when not setting STARTP.
	(SETFUNC_NAME, ENDFUNC_NAME, REENTRANT_GETNAME): Call it to set up for
	function-calling loop.
1996-07-09 11:09:08 +00:00
Roland McGrath d33f2ad4ab error is 0. The "placeholder" entries recently added to
* sysdeps/stub/setdomain.c (setdomainname): Declare NAME parm
1996-07-09 09:39:41 +00:00
Thomas Bushnell, BSG 565764017b Regenerated from ../sysdeps/gnu/errlist.awk ../manual/errno.texi 1996-07-09 06:13:23 +00:00
Thomas Bushnell, BSG 18c75117c2 *** empty log message ***
Tue Jul  9 00:14:52 1996  Michael I. Bushnell p/BSG  <mib@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/ioctls.h (MDMBUF, ECHO, TOSTOP, FLUSHO,
 	PENDIN, NOFLSH): Undefine these at start if they are already
 	defined to avoid collision with termbits.h.
	* sysdeps/generic/termbits.h (ECHO, TOSTOP, NOFLSH): Likewise.
	(MDMBUF, FLUSHO, PENDIN) [__USE_BSD]: Likewise.


Mon Jul  8 13:10:50 1996  Michael I. Bushnell p/BSG  <mib@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/errnos.awk: Skip entries where the
 	error is 0.  The "placeholder" entries recently added to 
	errno.texi convert to zero since `???/' is at the front of them.
	* sysdeps/gnu/errlist.awk (errnoh): Likewise.

	* sysdeps/stub/setdomain.c (setdomainname): Declare NAME parm 
	__const to conform with unistd.h.

	* posix/regex.c (re_comp, re_exec): Use weak_function as
	keyword in function defns instead of weak_symbol (NAME) after
	the defn.

	* stdlib/stdlib.h (random): Declare return type to be int32_t.
1996-07-09 05:02:06 +00:00
Thomas Bushnell, BSG f8fc0dd649 * stdlib/stdlib.h (random): Declare return type to be int32_t. 1996-07-09 02:47:42 +00:00
Roland McGrath 999493cb4a Mon Jul 8 13:37:40 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/math.h (_Mfloat_, _Mlong_double_): New macros, defined iff not
	already defined to float, long double.  Use those macros for _Mdouble_
	defns when including mathcalls.h.
	* math/Makefile [$(long-double-fcts) != yes] (CPPFLAGS): Append
	-D_Mlong_double_=double.

	Add more -lm functions to -lc because ldexp uses them.
	* math/Makefile (calls): Add s_finite, s_copysign, s_scalbn, s_modf.
	(routines): Remove s_modf, add s_frexpf, s_ldexpf; all but frexp and
	ldexp have both f and l code, and those have f though not l code.

 	memcpy for possibly overlapping strings.
1996-07-08 17:45:03 +00:00
Roland McGrath f5cb4a5cba Mon Jul 8 02:14:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/math.h (_Mfloat_, _Mlong_double_): New macros, defined iff not
	already defined to float, long double.  Use those macros for _Mdouble_
	defns when including mathcalls.h.
	* math/Makefile [$(long-double-fcts) != yes] (CPPFLAGS): Append
	-D_Mlong_double_=double.
	Add more -lm functions to -lc because ldexp uses them.
	* math/Makefile (calls): Add s_finite, s_copysign, s_scalbn, s_modf.
	(routines): Remove s_modf, add s_frexpf, s_ldexpf; all but frexp and
	ldexp have both f and l code, and those have f though not l code.
1996-07-08 17:35:27 +00:00
Thomas Bushnell, BSG 53163ad0cb *** empty log message ***
Mon Jul  8 13:10:50 1996  Michael I. Bushnell p/BSG  <mib@psilocin.gnu.ai.mit.edu>

	* string/argz-delete.c (argz_delete): Use memmove instead of
 	memcpy for possbly overlapping strings.
1996-07-08 17:13:20 +00:00
Thomas Bushnell, BSG 00e125db5a string/argz-delete.c (argz_delete): Use memmove instead of memcpy for possbly overlapping strings. 1996-07-08 17:12:04 +00:00
Miles Bader 3ee8457d47 Regenerated: autoconf sysdeps/generic/configure.in 1996-07-08 15:26:36 +00:00
Miles Bader 17f92c2dfc Regenerated: autoconf sysdeps/unix/common/configure.in 1996-07-08 15:26:18 +00:00
Roland McGrath 7702f9b5a9 * stdlib/strtod.c: Likewise. 1996-07-08 10:21:07 +00:00
Roland McGrath af5b3bc33b Mon Jul 8 02:14:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* libc-symbols.h [GCC >= 2.7] (strong_alias, weak_alias): Use extern
	storage class.  GCC gives an error for non-extern data defns with the
	alias attribute.

Mon Jul  8 00:11:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* libc-symbols.h (weak_function): New macro.
	For GCC 2.7+ define as __attribute__ ((weak)).
	* elf/dl-minimal.c: Use weak_function as keyword in function defns
 	instead of weak_symbol (NAME) after the defn.
	* stdlib/strtol.c: Likewise.
	* sysdeps/mach/hurd/dl-sysdep.c: Likewise.

	* sysdeps/alpha/dl-machine.h (elf_machine_rela) [RTLD_BOOTSTRAP]:
	If this is defined, don't declare _dl_rtld_map as weak, and
	don't check for MAP pointing to it.  RESOLVE is always null in this
	case, so test with #ifdef instead of if.

	* libc-symbols.h (symbol_set_declare): Use weak_extern instead of
	weak_symbol.
	* csu/initfini.c (_init): Likewise.
	* locale/setlocale.c (DEFINE_CATEGORY): Likewise.
	* misc/efgcvt_r.c: Likewise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.

	* libc-symbols.h [ASSEMBLER] (weak_symbol): Macro removed.
	It was not used in any assembler code.
	(weak_symbol_asm): Renamed to weak_extern_asm.
	(weak_extern): New macro replaces weak_symbol for weak extern refs;
	define to weak_extern_asm for [!ASSEMBLER].

	* libc-symbols.h [! ASSEMBLER] [HAVE_WEAK_SYMBOLS] (weak_symbol_asm,
	weak_alias_asm): New macros, renamed from weak_symbol/weak_alias;
	define those now as aliases.
	Change conditional to use __attribute__ syntax for GCC 2.7+, not 2.8+
	[GCC >= 2.7] [HAVE_WEAK_SYMBOLS] (weak_symbol): Do weak_symbol_asm
	after GCC weak attribute decl.
1996-07-08 06:18:25 +00:00
Roland McGrath 0676b5fdca Mon Jul 8 00:11:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* libc-symbols.h (symbol_set_declare): Use weak_extern instead of
	weak_symbol.
	* csu/initfini.c (_init): Likewise.
	* locale/setlocale.c (DEFINE_CATEGORY): Likewise.
	* misc/efgcvt_r.c: Likewise.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
1996-07-08 06:17:09 +00:00
Thomas Bushnell, BSG 467ab24791 *** empty log message ***
Mon Jul  8 01:37:34 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* string/argz-insert.c (__argz_insert): (__argz_insert): Use
	memmove instead of memcpy for possible overlapping strings.


	POINT_COL. Add POINT_OFFS field.
1996-07-08 05:52:04 +00:00
Thomas Bushnell, BSG 18e8dd4dbf (__argz_insert): Use memmove instead of memcpy for possible overlapping strings. 1996-07-08 05:37:55 +00:00
Roland McGrath 28160ffb1c * sysdeps/gnu/errlist.awk (BEGIN): Initialize associative array ALIAS,
map EWOULDBLOCK->EAGAIN, EDEADLOCK->EDEADLK.
	(element printer): Check for elt in ALIAS, instead of special case
	for EWOULDBLOCK.
1996-07-07 23:55:24 +00:00
Roland McGrath faf85e08bc * io/Makefile (headers): Add sys/vfs.h.
* io/sys/vfs.h: New file.
1996-07-07 23:23:51 +00:00
Roland McGrath e851d072c2 * stdio/linewrap.c (lwupdate): New function, mostly was
__line_wrap_update.  Use POINT_COL field instead of POINT.
	* stdio/linewrap.h (struct line_wrap_data): Rename POINT field to
	POINT_COL.  Add POINT_OFFS field.
1996-07-07 22:49:48 +00:00
Roland McGrath edb8e1d98c Sun Jul 7 18:42:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Don't unlock the
	critical section lock before unlinking dying active resources.
	The unlock just before return is right (i.e. old code unlocked twice).

	* stdio/linewrap.c (lwupdate): Update D->point_offs when done.
1996-07-07 22:46:26 +00:00
Roland McGrath e5adb313f5 Sun Jul 7 18:42:06 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Don't unlock the
	critical section lock before unlinking dying active resources.
	The unlock just before return is right (i.e. old code unlocked twice).
1996-07-07 22:45:05 +00:00
Doug Evans 850fe75ee9 Recognize rtems as an o/s. 1996-07-07 17:26:50 +00:00
Miles Bader 99ed3e3909 Sun Jun 2 22:28:43 1996 Miles Bader <miles@gnu.ai.mit.edu>
* linewrap.c (lwupdate): Update D->point_offs when done.
	Use memmove instead of memcpy where overlap is possible (not
 	necessary using current implementation of memcpy, but...).
	(__line_wrap_update): Don't update D->point_offs (lwupdate does it).

Fri May 31 11:48:46 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* linewrap.c (lwupdate): New function, mostly was __line_wrap_update.
	Use POINT_COL field instead of POINT.
	(__line_wrap_output): Use lwupdate.
	(__line_wrap_update): New function.
	(ensure_unwrapped, ensure_wrapped): New functions.
	(line_wrap_set_lmargin, line_wrap_set_rmargin,
	line_wrap_set_wmargin, line_wrap_point): Use __line_wrap_update.

	* linewrap.h (struct line_wrap_data): Rename POINT field to POINT_COL.
	Add POINT_OFFS field.
	(__line_wrap_update): New decl.
	(line_wrap_set_lmargin, line_wrap_set_rmargin,
	line_wrap_set_wmargin, line_wrap_point): Use __line_wrap_update.
1996-07-07 16:54:03 +00:00
Miles Bader dd411cc7bc (lwupdate): New function, mostly was __line_wrap_update. Use POINT_COL field instead of POINT. Update D->point_offs when done. Use memmove instead of memcpy where overlap is possible (not necessary using current implementation of memcpy, but...). (__line_wrap_output): Use lwupdate. (__line_wrap_update): New function. (line_wrap_set_lmargin, line_wrap_set_rmargin, line_wrap_set_wmargin, line_wrap_point): Use __line_wrap_update. (ensure_unwrapped, ensure_wrapped): New functions. 1996-07-07 16:49:06 +00:00
Roland McGrath 4c3e8a9e89 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> 1996-07-06 11:19:21 +00:00
Roland McGrath 66219c0794 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> 1996-07-06 11:01:20 +00:00
Roland McGrath a0da2d51da Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (routines): Move s_ldexp, s_frexp, s_modf here from
	calls, since the f and l versions are not all there yet.
1996-07-06 10:54:55 +00:00
Miles Bader 2549e7587d Fri Jul 5 17:34:47 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/logout.c (logout): Do nothing if getutline_r returns ESRCH.

	* login/pututline_r.c (pututline_r): Since we assign RESULT from
	lseek now, check that it's >= 0, not == 0.

Wed Jul  3 13:28:04 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* login/login.c (login): Make a copy of *UT, fill in various
	fields that we supply (ut_line, ut_type, ut_pid), and use the copy
	in place of UT.

	* login/getutline_r.c (getutline_r): When we return ESRCH, mark
	UTMP_DATA->ubuf invalid (by setting UTMP_DATA->loc_utmp to 0).
1996-07-06 03:57:56 +00:00
Miles Bader 36abf0d831 (pututline_r): Since we assign RESULT from lseek now, check that it's >= 0, not == 0. 1996-07-06 00:03:07 +00:00
Roland McGrath 61c7fd70ca Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (calls): Add s_ldexp, s_frexp, s_modf.
	These functions are traditionally duplicated in libc and libm.
	Go with the flow.
1996-07-05 23:55:36 +00:00
Roland McGrath 7f4e960822 * hurd/hurdsig.c (_hurd_internal_post_signal): In case of handled
signal during critical section doing interruptible RPC, if
	_hurdsig_abort_rpcs wants to change thread state, do thread_set_state
	before thread_resume.  If in critical section, pass 0 for SIGNO to
	_hurdsig_abort_rpcs so rpc is interrupted regardless of SA_RESTART.

	* extra-lib.mk: Fix typo in $(extra-libs-others) conditional.
1996-07-05 23:51:10 +00:00
Miles Bader eb6c848027 (getutline_r): When we return ESRCH, mark UTMP_DATA->ubuf invalid (by setting UTMP_DATA->loc_utmp to 0). 1996-07-05 23:48:41 +00:00
Roland McGrath e33b438a84 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): In case of handled
	signal during critical section doing interruptible RPC, if
	_hurdsig_abort_rpcs wants to change thread state, do thread_set_state
	before thread_resume.  If in critical section, pass 0 for SIGNO to
	_hurdsig_abort_rpcs so rpc is interrupted regardless of SA_RESTART.
1996-07-05 23:47:08 +00:00
Roland McGrath 39d690795a * sysdeps/unix/sysv/linux/sys/user.h: New file.
* sysdeps/unix/sysv/linux/Dist: Add it.
	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Add sys/user.h.
1996-07-05 20:02:58 +00:00
Roland McGrath dbe31b9a73 * nss/nss_files/files-parse.c (parse_list): Set EOL from LINE if it
points within DATA->linebuffer; otherwise use all of DATA->linebuffer
	itself, no need to skip past a NUL.

	* nss/nsswitch.h (known_function): Comment fix.
	* nss/nsswitch.c (nss_lookup_function): Rewritten using __tsearch
	directly.  Do the lookup and insertion with a single call, and fill in
	the tree node afterwards if new.
	(known_compare, nss_find_entry, nss_insert_entry): Functions removed.

	* misc/sys/select.h: #define __need_timespec before <sys/time.h> incl.
	(struct timeval): Add bodiless decl for scope.

	* time/time.h (struct timespec): Rename members from `ts_*' to `tv_*'.
  	Move struct timespec defn outside [_TIME_H] so it can be got with
 	#define __need_timespec.

	* time/sys/time.h (TIMEVAL_TO_TIMESPEC): Use `tv_*' instead of `ts_*'
	for `struct timespec' member names.
	(TIMESPEC_TO_TIMEVAL): Likewise.

	* nss/Makefile (extra-libs-others): New variable.

	* extra-lib.mk: Don't test for $($(lib)-no-lib-dep).  Instead match
	$(lib) in $(extra-libs-others).
	* sunrpc/Makefile (extra-libs-others): New variable.
	(librpcsvc-no-lib-dep): Variable removed.

Thu Jul  4 05:21:59 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* login/utmp.h: Fix typos.

	* misc/syslog.c (vsyslog): Use __send instead of send and
 	__connect instead of connect to avoid name-space collisions (e.g.,
 	with psgetty).
1996-07-05 19:18:13 +00:00
Roland McGrath f5348425d0 Fri Jul 5 12:22:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/rtld.c: Define RTLD_BOOTSTRAP before #include "dynamic-link.h".
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Remove weak decl for
	_dl_rtld_map.
	(RESOLVE): New macro, defined differently based on [RTLD_BOOTSTRAP].
	(elf_machine_rel): Use it instead of testing fn ptr arg at runtime.
	(elf_machine_rel: case R_386_32) [! RTLD_BOOTSTRAP]: Declare
	_dl_rtld_map weak only here.

	* posix/unistd.h [__USE_BSD]: Declare getdomainname, setdomainname.
1996-07-05 17:05:14 +00:00
Roland McGrath 503054c0dd Wed Jul 3 16:29:41 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/getXXbyYY_r.c (REENTRANT_NAME): Cast FCT in __nss_next call.

	* sysdeps/generic/sbrk.c: Always call __brk (0) to update __curbrk.

	* malloc/malloc-size.c (malloc_usable_size): Renamed from
	malloc_object_allocation_size.
	* malloc/malloc.h: Fix decl.

	* sys/select.h: New file, wrapper header.

	* posix/sys/types.h [__USE_BSD]: Include <sys/select.h>; remove
	fd_set, associated macros, and select decl.

	* sysdeps/posix/isfdtype.c: New file.

Tue Jul  2 23:45:14 1996  Ulrich Drepper  <drepper@cygnus.com>

	The latest Japanese proposal for POSIX locales renames the
	CHARMAP keyword in locale definition files to CHARCONV.
	* locale/programs/ld-ctype.c, locale/programs/locales.h: Rename
        function ctype_is_charmap to ctype_is_charconv.
	* locale/programs/locfile-kw.gperf: Replace charmap keyword with
        charconv.
	* locale/programs/locfile-token.h: Add definition of token
        charconv.
	* locale/programs/locfile.c: Recognize charconv keyword.  Rename
        lables according to this.

	* locale/weight.h (get_weight): Cast constants to prevent
        warnings.

	* stdlib/strtod.c, stdlib/strtol.c, string/strcoll.c,
	string/strxfrm.c: Add some more casts to prevent signed<->unsigned
	warnings.

	New stuff described in P1003.1g.
	* misc/Makefile (headers): Add sys/select.h.
	(routines): Add pselect.
	* misc/sys/select.h: New file.  Declare select functions and
	needed data types and macros.
	* sysdeps/generic/pselect.c: New file.  Add generic implementation
	of pselect() function which uses select().

	* posix/getconf.c: Recognize new variables from P1003.1g.
	* posix/posix1_lim.h: Define _POSIX_FD_SETSIZE, _POSIX_QLIMIT,
	_POSIX_HIWAT, and _POSIX_UIO_MAXIOV.
	* posix/unistd.h: Add description of the P1003.1g variables.
	* sysdeps/generic/confname.h: Define _SC_* values for new
	variables.
	* sysdeps/posix/fpathconf.c (fpathconf): Add handling of
	_PC_SOCK_MAXBUF.
	* sysdeps/stub/fpathconf.c (fpathconf): Ditto.
	* sysdeps/posix/sysconf.c (sysconf): Add handling of new
	P1003.1g variables.
	* sysdeps/stub/sysconf.c (sysconf): Ditto.
	* sysdeps/unix/sysv/linux/posix_opt.h: Define _POSIX_POLL and
	_POSIX_SELECT since Linux has this.

	* socket/Makefile (routines): Add isfdtype.
	* sysdeps/generic/sys/socket.h: Add prototype for isfdtype.
	* sysdeps/stub/isfdtype.c: New file.  Stub implementation of
	isfdtype.

	* wcsmbs/wcrtomb.c (wcrtomb): Fix typo.
1996-07-04 00:07:18 +00:00
Roland McGrath 175b633d81 * elf/Makefile (LDFLAGS-dl.so): New variable.
(libdl.so): Depend on eval.so.
	(distribute): Add eval.c.
	* elf/eval.c: New file.
1996-07-03 19:07:09 +00:00
Roland McGrath 8a594e3cb7 Wed Jul 3 11:26:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c (strftime: do_number): Adjust P and I after sprintf
	in case it wrote fewer than MAXDIGITS chars.

	* stdio/fwrite.c (fwrite: fill_buffer): Separate flushing for last
	newline from flushing full buffer in loop, fix test so no fflush is
	done when last byte written exactly fills the buffer.

	* nss/Makefile ($(services:%=$(objpfx)libnss_%.so)): Depend on libc.so.

	* sysdeps/mach/hurd/Makefile (LDLIBS-c.so): Variable removed.
	(libc.so): Instead, give this deps on lib{mach,hurd}user.so.

	* elf/dl-debug.c (_dl_debug_initialize): Use LDBASE arg instead of
	extracting _dl_rtld_map.l_addr.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Declare _dl_rtld_map as
	weak.
	* sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise.

	* shlib-versions (*-*-*): Set libnss_db=1.

	* elf/rtld.c (dl_main): Set _dl_rtld_map's DT_DEBUG location too.
1996-07-03 18:51:10 +00:00
Roland McGrath f0585c83b2 Wed Jul 3 11:26:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* shlib-versions (*-*-*): Set libnss_db=1.
1996-07-03 18:50:39 +00:00
Miles Bader 74e1a5ff22 (login): Only Frob OLD->ut_type if getutline_r actually found any entry. 1996-07-03 05:22:21 +00:00
Roland McGrath d746b89c44 Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Set _dl_rtld_map's DT_DEBUG location too.
1996-07-02 22:18:48 +00:00
Roland McGrath 66da789f8d * rpm/template (%build): Use @prefix@ instead of always /usr.
Set up configparms only if @prefix@ is in fact /usr.
	* rpm/Makefile ($(config)): Substitute $(prefix) for @prefix@.
1996-07-02 21:57:31 +00:00
Roland McGrath f49bc43fc0 * elf/Makefile: Add missing endif. 1996-07-02 21:53:43 +00:00
Roland McGrath 54955962d2 * nss/nss_files/files-ethers.c (ntohost): Fix db key. 1996-07-02 19:42:29 +00:00
Roland McGrath 96bda0ea44 * nss/nss_files/files-network.c: Pass empty for new DB_LOOKUP args.
(DATABASE): Define this instead of DATAFILE.
	* nss/nss_files/files-hosts.c: Likewise.
	(hostbyname): Use LOOKUP_NAME macro.

	* nss/nss_db/db-XXX.c: New file.
	* nss/Makefile (services): Add db.
	(libnss_db-inhibit-o): New variable.
	(libnss_db-routines): New variable.
	(distribute): Append db-XXX.c.
	(libnss_db.so): Depend on libdb.so and libnss_files.so.
	($(libnss_db-routines:%=$(objpfx)%.c)): New static pattern rule.

	* nss/nss_files/files-XXX.c (DB_LOOKUP): Add KEYSIZE and KEYPATTERN
	args, ignored.
	(DATAFILE): New macro.
	* nss/nss_files/files-parse.c (GENERIC): If undefined, define to
	"files-XXX.c".
	* nss/nss_files/files-rpc.c: Include GENERIC instead of "files-XXX.c".
	Pass db key args to DB_LOOKUP.
	(DATAFILE): Macro removed.
	(DATABASE): New macro replaces it, lacks "/etc/" prefix.
	* nss/nss_files/files-service.c: Likewise.
	* nss/nss_files/files-pwd.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-grp.c: Likewise.
	* nss/nss_files/files-ethers.c: Likewise.

	* elf/linux-compat.c: File removed.
	* elf/Makefile (distribute): Remove linux-compat.c.
	(ld-linux.so.1): Remove target and associated variables.

	* sunrpc/xdr.c: Remove malloc decl.
	* sunrpc/portmap.c: Likewise.

	* sunrpc/svc_tcp.c (abort): Don't declare.  Instead define as macro
	casting abort to fn returning bool_t.

	* nss/nss_files/files-parse.c [EXTERN_PARSER]: Do an extern decl of
	the parser function.
	[EXTERN_PARSER] (LINE_PARSER): Define to empty.
	* nss/nss_files/files-pwd.c (EXTERN_PARSER): Define it.
	* nss/nss_files/files-grp.c: Likewise.

	* Makeconfig (BUILD_CC): If undefined, define to $(CC).

	* sunrpc/rpc/types.h: Include stdlib.h instead of declaring malloc.

	* Makeconfig (built-program-cmd): Use $(rtld-installed-name) in place
	of ld.so so lookups for that soname find it.

	* nss/Makefile (libnss_dns.so): Depend on libresolv.so.
	(resobjdir, LDLIBS-nss_dns.so): Variables removed.
1996-07-02 19:35:40 +00:00
Roland McGrath ffee131630 Tue Jul 2 10:44:37 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* pwd/fgetpwent.c: Don't include ../nss/nss_files/files-parse.c to
	define parse_line function.
	(parse_line): #define to _nss_files_parse_pwent and
	add extern decl for that.

	* nss/nss_files/files-XXX.c (internal_getent): Return
	NSS_STATUS_TRYAGAIN for ERANGE error.

	* sysdeps/i386/strtok.S (LreturnNULL): Save current state ptr instead
	of null, so next round returns null again instead of bombing.  Fix
	from drepper.

	* nss/nss_files/files-parse.c (LINE_PARSER): Take new first arg EOLSET.
	Remove ; after `ENTDATA_DECL (data)'.
	Truncate line at strpbrk (line, EOLSET "\n").
	(ENTDATA_DECL): Put ; at end.
	(MIDLINE_COMMENTS): Macro removed.
	* nss/nss_files/files-ethers.c: Pass new argument.
	* nss/nss_files/files-hosts.c: Likewise.
	* nss/nss_files/files-network.c: Likewise.
	* nss/nss_files/files-parse.c: Likewise.
	* nss/nss_files/files-proto.c: Likewise.
	* nss/nss_files/files-rpc.c: Likewise.
	* nss/nss_files/files-service.c: Likewise.
	* grp/fgetgrent.c: Likewise.
	* pwd/fgetpwent.c: Likewise.
	* nss/nss_files/files-pwd.c: Get parse_line with extern decl, since
	fgetpwent.c already defines it.
	* nss/nss_files/files-grp.c: Likewise.

	* elf/dl-load.c (_dl_map_object): Use any object with matching l_name
	as well as any matching with l_libname.  Fix DT_SONAME lookup to use
	string table properly.

	* elf/rtld.c (dl_main): Set _dl_rtld_map.l_name from _dl_argv[0] when
	invoked directly, and l_libname from that if PT_INTERP missing.
	Set l_name from l_libname only if not set from argv.

	* time/europe, time/northamerica: Updated from ADO 96i.

	* stdio-common/tst-ungetc.c: Include unistd.h.
1996-07-02 17:43:35 +00:00
Roland McGrath eb48c9632e Mon Jul 1 15:44:34 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* inet/Makefile (routines): Change getnetbypt to getnetbyad.

Mon Jul  1 12:29:50 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* nss/Makefile (databases): Change host to hosts.
	* nss/host-lookup.c: Renamed to nss/hosts-lookup.c.

	* nss/nsswitch.c (nss_parse_service_list): Use const for NAME.

	* nss/nss_files/files-parse.c (parse_list): Correct alignment fixup.

	* string/string.h (strndupa): Pass missing arg to strnlen.

	* inet/getnetbypt_r.c: Renamed to ...
	* inet/getnetbyad_r.c: this; fixed function name.
	* inet/getnetbypt.c: Renamed to ...
	* inet/getnetbyad.c: this; fixed function name.

Sat Jun 29 01:08:35 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* grp/getgrgid_r.c (LOOKUP_TYPE): Define to struct group, not
	struct passwd.

Fri Jun 28 16:53:01 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* resolv/res_hconf.c (strndup): Remove function.

	* nss/nsswitch.c (nss_lookup_function): Declare loadbase and ref
	using ElfW() instead of Elf32_*.

	* sysdeps/unix/sysv/linux/alpha/init-first.h,
 	sysdeps/unix/sysv/linux/m68k/init-first.h,
 	sysdeps/unix/sysv/linux/i386/init-first.h: New files.
	* sysdeps/unix/sysv/linux/init-first.c: Use platform-dependent
 	init-first.h to make abstract machine dependent parts of
	initialization.

	* sysdeps/unix/alpha/sysdep.h: Undo PIC-optimization of syscall
	error handling.  It's safer that way.

	* sysdeps/unix/alpha/sysdep.S: Make ldgp part of the prologue.
	Fix by Richard Henderson.

	* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt): Fix
 	typo/extraneous whitespace.

	* sunrpc/xdr.c (xdr_int, xdr_u_int): Use <limits.h> to test
	determine what integer sizes we're dealing with.

	* hurd/hurdsig.c (_hurd_internal_post_signal): In pending signal
	check for signal zero, repair logical sense of test by
	parenthesizing correctly.

Thu Jun 27 04:04:27 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* configure.in (config_machine): Make ELF the default even for
	Linux/Alpha unless a configuration of the form *-*-linux*ecoff
	is specified.

	* nss/nss_files/files-hosts.c (ENTDATA): Define it.
	* nss/nss_files/files-parse.c (struct parser_data): Define entdata
	member only #ifdef ENTDATA.
	(ENTDATA_DECL): New macro.
	(LINE_PARSER): Use it for entdata decl.
	(parse_list): Find the space for LIST from DATA->linebuffer instead of
	from the input LINE, which might not be writable buffer space.
	(LINE_PARSER): Use `parser_stclass' in place of `static inline'.
	[ENTDATA] (parser_stclass): #define to `static inline'.
	[!ENDATA] (parser_stclass): #define to empty.
	[!ENTDATA] (parse_line): #define to _nss_files_parse_ENTNAME; the
	function is exported to -lnss_files users.

	* string/strndup.c: Add missing arg.

	* string/strndup.c (strndup): Always terminate the string.
1996-07-01 23:04:49 +00:00
Roland McGrath 21206990e4 Add *.mo 1996-07-01 23:03:12 +00:00
Miles Bader 25f329f7f5 * hurd/report-wait.c (describe_number): Make I unsigned long. 1996-07-01 22:37:26 +00:00
Miles Bader f61f67b1a4 (describe_number): Make I unsigned long. 1996-07-01 22:35:18 +00:00
Roland McGrath 3776d592f1 Mon Jul 1 12:29:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/Makefile (databases): Change host to hosts.
	* nss/host-lookup.c: Renamed to nss/hosts-lookup.c.
1996-07-01 22:16:41 +00:00
Roland McGrath 7cbc698400 Mon Jul 1 12:29:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* inet/Makefile (routines): Change getnetbypt to getnetbyad.
	* inet/getnetbypt_r.c: Renamed to ...
	* inet/getnetbyad_r.c: this; fixed function name.
	* inet/getnetbypt.c: Renamed to ...
	* inet/getnetbyad.c: this; fixed function name.
1996-07-01 22:16:08 +00:00
Miles Bader 6ce16797cd Mon Jul 1 13:32:42 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/login.c (login): Only Frob OLD->ut_type if getutline_r
	actually found any entry.

	* login/pututline_r.c (pututline_r): If not located after any
	entry don't use UTMP_DATA->ubuf, and seek to the end before adding.
	Lock the file before stating.
1996-07-01 19:33:30 +00:00
Miles Bader e81bd562d5 (pututline_r): If not located after any entry don't use UTMP_DATA->ubuf, and seek to the end before adding. Lock the file before stating. 1996-07-01 19:19:08 +00:00
Roland McGrath 4bbb963eb4 Fri Jun 28 15:46:02 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): In pending signal
	check for signal zero, repair logical sense of test by
	parenthesizing correctly.
1996-07-01 18:10:03 +00:00
Roland McGrath d7126ae623 Fri Jun 28 15:46:02 1996 Michael I. Bushnell, p/BSG <mib@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): In
 	check-for-pending signals code, release _hurd_siglock before
 	jumping to deliver_pending.

	* hurd/hurdsig.c (_hurd_internal_post_signal): In pending signal
	check for signal zero, repair logical sense of test by
	parethisizing correctly.
1996-07-01 18:00:14 +00:00
Roland McGrath 635eb0b5f5 Sat Jun 29 00:02:11 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* string/strndup.c (strndup): Properly terminate the new
	string; add missing second argument to strnlen.
	* string/string.h (strndupa): Likewise.
1996-07-01 16:32:03 +00:00
Miles Bader 2baf7c31ad Fri Jun 28 23:25:35 1996 Miles Bader <miles@gnu.ai.mit.edu>
* login/login.c (login): Initialize DATA so that setutent_r will
 	actually do something.
1996-06-29 03:40:40 +00:00
Miles Bader 3e72eb7096 (login): Initialize DATA so that setutent_r will actually do something. 1996-06-29 03:37:49 +00:00
Thomas Bushnell, BSG 6a60a93757 (_hurd_internal_post_signal): In check-for-pending signals code, release _hurd_siglock before jumping to deliver_pending. 1996-06-28 20:29:45 +00:00
Thomas Bushnell, BSG 1a6a8198a6 (_hurd_internal_post_signal): In pending signal check for signal zero, repair logical sense of test by parethisizing correctly. 1996-06-28 19:44:50 +00:00
Richard Kenner 6032698991 (mips:*:*:UMIPS): Fix typo in last change. 1996-06-28 17:28:58 +00:00
Roland McGrath de6b062321 Fri Jun 28 07:27:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/strndup.c (strndup): Always terminate the string.
	* string/string.h (strndupa): Likewise.

Thu Jun 27 14:22:31 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdio/Makefile (routines): Add vscanf.
	* stdio-common/Makefile (routines): Remove vscanf.
	* stdio-common/vscanf.c: Move to ...
	* stdio/vscanf.c: here.

	* rpm/Makefile (headers, install-lib, install-lib.so,
	versioned, install-bin, install-sbin, install-data,
	install-others): Add $(-VARIABLE).
1996-06-28 11:42:05 +00:00
Roland McGrath 6dbe283756 Fri Jun 28 02:41:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/Makefile (databases): New variable.
	(routines, libnss_files-routines): Use it.
	(subdir-dirs): Compute from $(services).

	* sysdeps/unix/sysv/linux/syscalls.list (create_module, delete_module,
	init_module, klogctl): Use EXTRA in the "caller" column so these get
	added to unix-extra-syscalls and thus compiled in misc.

	* string/Makefile (routines): Add strndup.
	* string/strndup.c: New file.
	* string/string.h: Declare strndup.
	(strndupa): New macro.

	* string/string.h: Declare __strdup.
	* string/strdup.c: Deansideclized.  Define __ name and weak alias.

	* string/string.h: Don't define memccpy as macro for [__OPTIMIZE__].

Thu Jun 27 23:43:22 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_machine_rela):  The Alpha's
	address-of operation and plt format conspire to require all
	dynamic relocs to be resolved to actual symbols not plt entries.

Thu Jun 27 02:49:28 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/gencat.c: Add casts to avoid signed<->unsigned warnings.

	* grp/initgroups.c (initgroups): De-ansi-fy.
	Move declaration of NGROUPS and GROUPS outside #if so that
	the code compiles for NGROUPS_MAX != 0.

	* inet/Makefile (headers): Add netinet/ether.h and netinet/if_ether.h.
	(routines): Add ether_aton, ether_aton_r, ether_hton, ether_line,
	ether_ntoa, ether_ntoa_r, and ether_ntoh.
	* inet/ether_aton.c, inet/ether_aton_r.c, inet/ether_hton.c,
	inet/ether_line.c, inet/ether_ntoa.c, inet/ether_ntoa_r.c,
	inet/ether_ntoh.c: New files.  Implementation of functions to
	handle Ethernet address to host mapping.
	* inet/netinet/ether.h: New file.  Declare ether_* functions.
	* netinet/ether.h: Wrapper around inet/netinet/ether.h for glibc
	compilation.
	* nss/ethers-lookup.c: New file.  Lookup function for ethers database.
	* nss/Makefile (routines): Add ethers-lookup.
	(libnss_files-routines): Add files-ethers.

	* nss/getXXent_r.c: Don't define set*ent and end*ent function
	with _r suffix.

	* nss/nss_files/files-XXX.c (internal_endent): Don't reset
	KEEP_STREAM every time called.
	(_nss_files_end): Reset KEEP_STREAM here instead.
	(internal_getent): If STREAM == NULL try to open instead of
	signalling error.
	Use cast to prevent warning.
	Terminate read line in case the buffer is too small.

	* nss/nss_files/files-ethers.c: New file.  Implementation of
	Ethernet adress<->hostname lookup through files interface.

	* stdlib/mbstowcs.c: Define based on mbsrtowcs().
	* stdlib/mbtowc.c: Define based on mbrtowc().
	* stdlib/wcstombs.c: Define based on wcsrtombs().
	* stdlib/wctomb.c: Define based on wcrtomb().

	* sunrpc/xdr.c (xdr_u_int): Avoid bogus call to
	unexpected_sizes_in_xdr_u_int.

	* sysdeps/generic/netinet/if_ether.h: New file.  Generic declaration
	of `struct ether_addr'.
	* sysdeps/unix/sysv/linux/netinet/if_ether.h: New file.  Linux specific
	declaration of `struct ether_addr'.

	* wcsmbs/mbrtowc.c: Handle case where argument PS is NULL.
	* wcsmbs/mbsrtowcs.c: Ditto.
	* wcsmbs/wcrtomb.c: Ditto.
	* wcsmbs/wcsrtombs.c: Ditto.

	* wcsmbs/mbsinit.c: Prepare for PS being NULL.
1996-06-28 08:56:59 +00:00
Roland McGrath 47ce6a308c Thu Jun 27 23:43:22 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_machine_rela):  The Alpha's
	address-of operation and plt format conspire to require all
	dynamic relocs to be resolved to actual symbols not plt entries.
1996-06-28 06:39:22 +00:00
Miles Bader a5d96b254c * hurd/get-host.c <fcntl.h>: New include.
* hurd/set-host.c <fcntl.h>: New include.
	(_hurd_set_host_config): Include NEW in args to dir_link.
	Return NWROTE, not NREAD.
1996-06-26 21:07:21 +00:00
Miles Bader f34e0ae3b0 Wed Jun 26 13:19:35 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): Don't deallocate
	DOTID & DOTDEVID until we're finished with them (we need to keep
	them at least until we've fetched the next level of id ports, so
	that mach will be able to use the same name if they're the same).
	Add inner_errlose: label, which deallocates DOTID & DOTDEVID and
	jumps to errlose, for those places where such cleanup is needed.
1996-06-26 17:46:38 +00:00
Miles Bader aeb0816f97 (_hurd_canonicalize_directory_name_internal): Don't deallocate DOTID & DOTDEVID until we're finished with them (we need to keep them at least until we've fetched the next level of id ports, so that mach will be able to use the same name if they're the same). Add inner_errlose: label, which deallocates DOTID & DOTDEVID and jumps to errlose, for those places where such cleanup is needed. 1996-06-26 17:44:44 +00:00
Roland McGrath bba7bb78f3 Wed Jun 26 01:58:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* nss/nss_files/files-parse.c (parse_list): Count null in EOL calc.

	Move DB code into separate -ldb library.
	* db/Makefile (extra-libs): New variable, list libdb.
	(routines): Renamed to libdb-routines.
	* shlib-versions: Add libdb=2.

	* nss/network-lookup.c (DEFAULT_CONFIG): New macro.
	* nss/host-lookup.c (DEFAULT_CONFIG): New macro.

	* nss/nsswitch.c (nss_parse_service_list): Use __strncasecmp instead
	of strncasecmp.  Extend syntax to grok [!foo=bar].

	* sysdeps/generic/strncase.c: Define __strncasecmp with strncasecmp as
	weak alias.
	* string/string.h: Declare __strncasecmp.

	* nss/nsswitch.c (nss_parse_file): Call __getline, not getline.
	(service_alias): Variable removed.
	(nss_parse_service_list): New function, broken out of nss_getline.
	Remove alias conversion; we will just use symlinks.
	(__nss_database_lookup): Take new string arg DEFCONFIG.
	If no entry exists, make one with service list parsed from that.
	* nss/nsswitch.h: Update protocol for __nss_database_lookup.
	* nss/XXX-lookup.c (DEFAULT_CONFIG): New macro, set to 0 if undefined.
	(DB_LOOKUP_FCT): Pass it to _nss_database_lookup.

	* grp/initgroups.c: Rewritten using getgrent.  Handle unlimited group
	list size.

	* sunrpc/xdr.c (xdr_int): #if 0 out unresolved references in dead code.

Wed Jun 26 01:56:50 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/locale.c (long_options): Short form of
	--version option is `-V'.
	(main): Recognize `-V' as option, not `-v'.
	Call `usage' instead of printing error message for illegal
	option.
	(usage): Document `-V'.
1996-06-26 15:46:01 +00:00
Roland McGrath be64fe6d86 Wed Jun 26 01:58:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sunrpc/xdr.c (xdr_int): #if 0 out unresolved references in dead code.
1996-06-26 06:13:37 +00:00
Miles Bader 23586dcc72 Tue Jun 25 17:22:55 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): Initialize PARENT to
	THISDIR, and don't ever deallocate PARENT unless it's != THISDIR.
1996-06-25 21:50:49 +00:00
Miles Bader 315289fbb8 (_hurd_canonicalize_directory_name_internal): Initialize PARENT to THISDIR, and don't ever deallocate PARENT unless it != THISDIR. 1996-06-25 21:48:49 +00:00
Roland McGrath 622586fbe0 Tue Jun 25 10:58:23 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* inet/getrpcent.c: Fix macros.
	* inet/getrpcent_r.c: Fix macros.

	* elf/dlsym.c (dlsym): Search the global scope if HANDLE is null.

	* elf/dl-load.c (_dl_map_object_from_fd): Initialize L.
1996-06-25 18:22:06 +00:00
Roland McGrath a4242e25dc Tue Jun 25 09:55:47 1996 David Mosberger-Tang <davidm@AZStarNet.com>
* catgets/gencat.c (write_out): Use %Zu to print variables of type
 	size_t.
	* resolv/res_debug.c (__p_rr): Print size_t variable as %lu and
	cast it to (unsigned long) to make it work both on 32 and 64
	bit architectures.

Sat Jun 22 13:05:25 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/Makefile (distribute): Add `programs/' prefix to all
	files in that directory.

	* Makerules (distinfo-vars): Assign subdir directly so that `ifdef
	subdir' works.

	* MakeTAGS (sources, headers): Make them simply expanded variables
	so that all-dist is expanded before it is changed.
1996-06-25 13:56:54 +00:00
Roland McGrath 5325738ce4 * Make-dist (dist): Don't depend on crypt tar file. Remove that rule. 1996-06-25 13:49:53 +00:00
Roland McGrath 748050b386 * Makefile (subdirs): Remove crypt.
* crypt: Directory removed.  It will be made an independent library
	distribution.

	* Makefile (distribute): Add rpm/{Makefile,teplate,rpmrc}.
1996-06-25 13:46:05 +00:00
Roland McGrath ad8da79bd5 * inet/getrpcent_r.c (DATABASE_NAME): New macro. 1996-06-25 13:40:47 +00:00
Roland McGrath dcea62dd4e * inet/getrpcbynumber.c (BUFLEN): New macro.
* configure.in (--no-whole-archive check): Remove backslashes in cmd.
1996-06-25 12:13:01 +00:00
Roland McGrath 3d3ac840ea * Makefile (headers): Add libc-lock.h.
* sysdeps/stub/libc-lock.h: New file.

	* inet/getrpcbynumber.c: Remove _r typo.

	* elf/dl-load.c (_dl_map_object): Fix typo in last change.
1996-06-25 11:59:42 +00:00
Roland McGrath 282d87435c * resolv/Makefile (distribute): Remove res_hconf.h; add mapv4v6addr.h
and mapv4v6hostent.h.
	(routines): Move res* and gethnamaddr into libresolv-routines.
	(libresolv-routines): New variable, put them there.
	(extra-libs): New variable, list libresolv.
	(CPPFLAGS): Add -D for get*by* to res_get*by*.
1996-06-25 10:52:53 +00:00
Roland McGrath c66273aae5 * nss/nss_files/files-parse.c (parse_list): Reset ELT for elements
after the first!

	* nss/nsswitch.c (__nss_database_lookup): If nsswitch.conf is missing
	or doesn't mention DATABASE, use an internal default equivalent to
	"DATABASE: compat [NOTFOUND=return] dns [NOTFOUND=return] files".
	(nss_lookup_function): Call nss_new_service as needed.
	(nss_parse_file): Don't bother calling nss_new_service here.

	* grp/fgetgrent.c (LINE_PARSER): Pass zero SWALLOW arg for fields.
	* pwd/fgetpwent.c: Likewise.
1996-06-25 10:20:09 +00:00
Roland McGrath 5f0e6fc702 Tue Jun 25 02:59:11 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* malloc/malloc.h: Declare malloc_object_allocated_size, malloc_walk.
	* malloc/Makefile (dist-routines): Add malloc-size, malloc-walk.
	* malloc/malloc-size.c: New file.
	* malloc/malloc-walk.c: New file.

	* malloc/malloc-find.c (malloc_find_object_address): Return null if
	PTR is outside the heap.

	* elf/dl-load.c (_dl_map_object): If the requested name matches the
 	soname of a loaded object, use that object.

Mon Jun 24 19:57:01 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Makefile (subdirs): Add nss.

	* inet/Makefile (routines): Add getrpcent, getrpcbyname,
	getrpcbynumber, getrpcent_r, getrpcbyname_r, getrpcbynumber_r.
	* inet/getrpcbynumber_r.c: New file.
	* inet/getrpcbynumber.c: New file.
	* inet/getrpcbyname.c: New file.
	* inet/getrpcbyname_r.c: New file.
	* inet/getrpcent_r.c: New file.
	* inet/getrpcent.c: New file.
	* nss/rpc-lookup.c: New file.
	* nss/nss_files/files-rpc.c: New file.
	* nss/Makefile (routines): Add rpc-lookup.
	(libnss_files-routines): Add files-rpc.
	* sunrpc/Makefile (routines): Remove getrpcent.
	* sunrpc/getrpcent.c: File removed.

	* nss/getXXent_r.c (REENTRANT_GETNAME): Clear NO_MORE when NIP is
	non-null on entry.

	* Makeconfig (rpath-link): Add $(nssobjdir).
	(nssobjdir): New variable.

	* Makerules: Move shared library building before objects rules, so
	versions are known before extra-lib.mk gets included.
	* extra-lib.mk (lib-noranlib): Depend on the shared object too.

	* pwd/getpwuid.c: Rewritten using nss.
	* pwd/getpwnam.c: Likewise.
	* pwd/getpwent.c: Likewise.
	* grp/getgrnam.c: Likewise.
	* grp/getgrgid.c: Likewise.
	* grp/getgrent.c: Likewise.
	* pwd/Makefile (routines): Add getpwent_r, getpwnam_r, getpwuid_r.
	* pwd/getpwent_r.c: New file.
	* pwd/getpwnam_r.c: New file.
	* pwd/getpwuid_r.c: New file.
	* grp/Makefile (routines): Add getgrent_r, getgrgid_r, getgrnam_r.
	* grp/getgrnam_r.c: New file.
	* grp/getgrgid_r.c: New file.
	* grp/getgrent_r.c: New file.
	* grp/Makefile (routines): Remove grpopen, grpread.
	* pwd/Makefile (routines): Remove pwdopen, pwdread.
	* grp/grpopen.c, grp/grpread.c, pwd/pwdopen.c, pwd/pwdread.c: Removed.

	* pwd/fgetpwent.c: Rewritten using files-parse.c.
	* grp/fgetgrent.c: Likewise.

	* nss/Makefile (routines): Add grp-lookup and pwd-lookup.
	* nss/pwd-lookup.c, nss/grp-lookup.c: New files.
	* nss/nss_files/files-grp.c: New file.
	* nss/nss_files/files-pwd.c: New file.

	* nss/Makefile (subdir-dirs): New variable; use it in vpath.

	* nss/nss_files/files-parse.c: New file.
	* nss/nss_files/files-XXX.c: New file.
	* nss/nss_files/files-hosts.c, nss/nss_files/files-proto.c,
	nss/nss_files/files-service.c, nss/nss_files/files-network.c:
	Rewritten using them.

	* nss/Makefile (libnss_files-routines): Remove files-host.
	Add files-hosts, files-grp, files-pwd.

	* nss/nss_dns/dns-network.c: Don't include <pthread.h>.

Mon Jun 24 22:39:12 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (ELF_MACHINE_RUNTIME_TRAMPOLINE):
	A .plt entry now loads the .rela.plt offset directly rather
	than making us calculate it.

Sun Jun 23 15:24:05 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/Makefile ($(installed-localtime-file) rule): Do
	$(make-target-directory) first.

	* resolv.h: Fix wrapper for resolv/resolv.h.

	* configure.in (ld --no-whole-archive check): Use AC_TRY_COMMAND.
	Compile dummy file and pass -nostdlib -nostartfiles so as not to
	require installed libraries.

	* shlib-versions (*-*-*): Set libresolv=2, libnss_files=1,
	libnss_dns=1.

Sun Jun 23 19:42:05 1996  Ulrich Drepper  <drepper@cygnus.com>

	* resolv/netdb.h (_PATH_NSSWITCH_CONF): New macro.

	* inet/herrno.c: New file.

	* resolv/res_init.c: Remove res_hconf calls.

	* nss/Makefile, nss/XXX-lookup.c, nss/file-lookup.c,
	nss/getXXbyYY.c, nss/getXXbyYY_r.c, nss/getXXent.c,
	nss/getXXent_r.c, nss/host-lookup.c, nss/network-lookup.c,
	nss/nsswitch.c, nss/nsswitch.h, nss/proto-lookup.c,
	nss/service-lookup.c: New files.  Implementation of name
	service switch, following the approach in Solaris.
	Interface specification and general structure inspired by Peter
	Eriksson <pen@lysator.liu.se>.
	* nss/nss_files/files-host.c, nss/nss_files/files-network.c,
	nss/nss_files/files-proto.c, nss/nss_files/files-service.c:
	Implementation of libnss_files.so module for file based databases
	in NSS service.
	* nss/nss_dns/dns-host.c, nss/nss_dns/dns-network.c: Implementation
        if libnss_dns.so module for DNS name lookup in NSS service.

	* inet/getproto.c, inet/getprtent.c, inet/getprtname.c,
	inet/getservent.c, inet/getsrvbynm.c, inet/getsrvbypt.c:
	Changed to serve as interface to NSS.
	* inet/gethstbyad.c, inet/gethstbyad_r.c, inet/gethstbynm.c,
	inet/gethstbynm2.c, inet/gethstbynm2_r.c, inet/gethstbynm_r.c,
	inet/gethstent.c, inet/gethstent_r.c, inet/getnetbynm.c,
	inet/getnetbynm_r.c, inet/getnetbypt.c, inet/getnetbypt_r.c,
	inet/getnetent.c, inet/getnetent_r.c, inet/getproto_r.c,
	inet/getprtent_r.c, inet/getprtname_r.c, inet/getservent_r.c,
	inet/getsrvbynm_r.c, inet/getsrvbypt_r.c: New files.  Implement
	interfaces to NSS, including reentrant functions.

	* resolv/getnetbyaddr.c, resolv/getnetbyname.c, resolv/getnetent.c,
	resolv/sethostent.c: Removed:  Obsoleted by NSS.

	* resolv/mapv4v6addr.h, resolv/mapv4v6hostent.h: Extracted from
	gethnamaddr.c.  These private functions are now used in more
	than one file.

	* resolv/inet_pton.c, resolv/gethnamaddr.c: Updated to bind-4.9.4-T5B.

Sat Jun 22 16:49:47 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* rpm/Makefile ($(config)): Make sure the word list in the for
	loop is syntactically non-empty.
1996-06-25 08:56:57 +00:00
Roland McGrath 7f8116797f Sat Jun 22 21:29:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Version 1.92 test release.

Sat Jun 22 23:30:07 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/syscalls.list (ksyslog_ctl): Rename
	to klogctl to match prototype in sys/klog.h.

	* sysdeps/posix/libc_fatal.c: Add include of <string.h>.
	* sysdeps/unix/sysv/linux/gethostid.c: Ditto.

	* sysdeps/posix/getcwd.c (__canonicalize_directory_name_internal):
	Remove.  Code is now part of __getcwd again.  The old function
	never really worked for anything but THISDIR==".".

	* sysdeps/alpha/Makefile (CFLAGS-rtld.c): Add -mbuild-constants
	only when building ELF version of library.

	* libio/libioP.h (_IO_vscanf): Add prototype.

	* posix/unistd.h (syscall): Change sysno arg and return value
	to int long.

	* version.h (VERSION): Updated to 1.92.
1996-06-23 01:31:00 +00:00
Roland McGrath 072ebcefb2 * version.h (VERSION): Version 1.92 test release.
* misc/Makefile (headers): Add ar.h.
	* misc/ar.h: New file.

	* config.make.in (BUILD_CC): New variable.
	* configure.in: Check for BUILD_CC if $host != $build.

	* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].

	* Makerules [! objects] (subdir_lib): Depend on the stamp$o files.
	(stamp$o files): New targets, create them empty, no deps.

	Update from bind-4.9.4-T3B.
1996-06-22 22:06:08 +00:00
Roland McGrath 40a4b79f21 Regenerated
Sat Jun 22 10:44:09 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.c: Include <alloca.h> only [HAVE_ALLOCA_H], not [sparc].

Fri Jun 21 00:27:51 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
 	only for ?s, not for *s.  Fix from Chet Ramey.

Wed May 22 17:22:14 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.c [VMS]: Don't include <pwd.h>.
	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.

	* posix/glob.h [_AMIGA]: Remove `struct stat;' forward decl.
1996-06-22 21:14:17 +00:00
Roland McGrath 78b5ba3eb7 Sat Jun 22 10:44:09 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* rpm/template (Source): New field.
	(%prep, %build, %install): New sections.
	(%files): Add %doc FAQ NEWS NOTES README.
	* rpm/rpmrc (builddir): Removed.
1996-06-22 15:00:08 +00:00
Roland McGrath 0d3726c3fb * elf/dl-load.c (_dl_map_object_from_fd): Fix mapping and l_phdr
guessing to not assume p_vaddr of first load cmd is zero.
1996-06-21 21:37:08 +00:00
Roland McGrath 4f54cdb1dd * sysdeps/sparc/elf/start.S: New file.
* sysdeps/sparc/dl-machine.h: New file.

	* posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr
 	only for ?s, not for *s.  Fix from Chet Ramey.

	Fixes thanks to Raja R Harinath <harinath@cs.umn.edu>:
	* sysdeps/unix/sysv/utmpbits.h: Define _HAVE_UT_{TYPE,ID,TV,HOST}.
	Use __{BEGIN,END}_DECLS.
	(_PATH_WTMP, _PATH_UTMP, _PATH_LASTLOG): New macros.
	* login/utmp.h (UTMP_FILE, UTMP_FILENAME, WTMP_FILE, WTMP_FILENAME):
	New macros, moved here from sysdeps/gnu/utmpbits.h.
	* sysdeps/generic/utmpbits.h (_HAVE_UT_HOST): Define it.
	* sysdeps/gnu/utmpbits.h (_HAVE_UT_HOST): Likewise.
	* login/logout.c: Use ut_host only #if _HAVE_UT_HOST.
	Use sizeof instead of UT_*SIZE.
	* login/logwtmp.c: Likewise.

	* misc/tsearch.c (tdelete): Define as weak alias to __tdelete.

	* version.c (banner): Add trailing newline.
1996-06-21 21:01:27 +00:00
Roland McGrath 51fbd1f60a Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* login/utmp.h: Declare login_tty.

Thu Jun 20 21:19:07 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt):
	Changed to a 12-byte PLT entry to remove dependency on $gp.
	Take a new got_addr parameter.
	(elf_machine_rela): Pass the new parameter.
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): Do arithmetic for 12-byte PLT.
	(RTLD_START): Do normal linkage with program entry.

	__hurd_file_name_lookup, __hurd_file_name_split): Add & use LOOKUP
	argument.
	__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry:
1996-06-21 04:33:09 +00:00
Roland McGrath 7b5092a79d Thu Jun 20 21:19:07 1996 Richard Henderson <rth@tamu.edu>
* sysdeps/alpha/dl-machine.h (elf_alpha_fix_plt):
	Changed to a 12-byte PLT entry to remove dependency on $gp.
	Take a new got_addr parameter.
	(elf_machine_rela): Pass the new parameter.
	(ELF_MACHINE_RUNTIME_TRAMPOLINE): Do arithmetic for 12-byte PLT.
	(RTLD_START): Do normal linkage with program entry.
1996-06-21 04:30:50 +00:00
Miles Bader 51ec5cb28a Thu Jun 20 12:18:21 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/brk.c (_hurd_brk): Initialize to 0.

	* hurd/getuids.c (getuids): New weak link to __getuids.
1996-06-20 21:32:45 +00:00
Miles Bader ae6095ca6f (___brk_addr): Now a variable, initialized to 0, instead of a weak link to _hurd_brk. 1996-06-20 17:34:37 +00:00
Michael Meissner ff2ac34c1f Add support for PowerPC Linux 1996-06-20 16:20:05 +00:00
Miles Bader ca591d426e (getuids): New weak link to __getuids. 1996-06-20 16:18:45 +00:00
Miles Bader bf0f472003 *** empty log message ***
Wed Jun 19 10:21:24 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry,
	__hurd_file_name_lookup, __hurd_file_name_split): Add & use LOOKUP argument. 
	Rename nested function lookup to lookup_op.
	(__file_name_lookup, __file_name_lookup_under):
	Pass 0 for lookup arg to __hurd_file_name_lookup.
	(__file_name_split): Likewise for __hurd_file_name_split.
	* hurd/path-lookup.c (hurd_file_name_path_lookup): Add LOOKUP argument.
	Rename nested function lookup to scan_lookup.
	(file_name_path_lookup): Pass 0 for lookup arg to
	hurd_file_name_path_lookup.
	* hurd/hurd/lookup.h (__hurd_file_name_lookup, hurd_file_name_lookup,
	__hurd_file_name_lookup_retry, hurd_file_name_lookup_retry: 
	__hurd_file_name_split, hurd_file_name_split, hurd_file_name_lookup):
	Add LOOKUP argument.
	* sysdeps/mach/hurd/access.c (__access): Pass 0 lookup arg to
	__hurd_file_name_lookup.
1996-06-19 22:38:55 +00:00
Miles Bader 92ea4fece7 (__hurd_file_name_lookup_retry, __hurd_file_name_lookup, __hurd_file_name_split): Add & use LOOKUP argument. Rename nested function lookup to lookup_op. (__file_name_lookup, __file_name_lookup_under): Pass 0 for lookup arg to __hurd_file_name_lookup. (__file_name_split): Likewise for __hurd_file_name_split. 1996-06-19 20:11:26 +00:00
Roland McGrath 959c367445 Regenerated: autoconf configure.in 1996-06-19 15:06:55 +00:00
Roland McGrath e50ec9f91d Mon Jun 17 19:09:49 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* Make-dist (+sysdeps): Move wildcard inside loop to avoid consing
	up a huge list just to discard most of it.

	* configure.in (sysnames): Avoid fgrep by using the case shell
	builtin.

	* Makeconfig (config.status): Fix dependency on Implies files.
1996-06-19 14:52:21 +00:00
Roland McGrath a1470b6f83 Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.

	* locale/programs/locale.c: Include string.h.

	* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
 	(xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
 	appropriate sign-extension is performed on machines with
 	sizeof(long) > 4.

	* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
 	sizeof(int)<sizeof(long), we need to go through a temporary
 	variable.

	* locale/programs/ld-numeric.c: Include <alloca.h>

	* libio/stdio.h (__libc_fatal): Add prototype.

	* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
 	in efect.

	* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
 	volatile to avoid "might get clobbered by longjmp" warning.

	* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
 	unless _LOOSE_KERNEL_NAMES is in effect (which, with high
 	probability is a sure loser).
	* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.

	* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
	* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.

	* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
	to be Linux FSSTND compliant.

Mon Jun 10 17:50:31 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.

	* sysdeps/unix/sysv/linux/alpha/sysdep.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/llseek.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
 	__syscall_error to avoid intruding application name space.

	* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
	to SYS_get?id so that syscall stubs in sysdeps/unix define
	these syscalls in terms of getxpid/getxuid/getxgid.

	* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
 	sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
 	sysdeps/unix/execve.S, sysdeps/unix/fork.S,
 	sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.

	* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
 	(PSEUDO_END): Rename END() to PSEUDO_END().

	* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
 	to PSEUDO_END to improve branch-prediction.  Include .frame
 	directive to make syscalls debugabble.
	(PSEUDO_END): New macro.

	* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
 	latter is illegal under DEC Unix.

	* sysdeps/unix/alpha/sysdep.S: Renamed from
	sysdeps/unix/sysv/linux/alpha/sysdep.S.  This file works for OSF/1
 	as well.
	* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
 	EWOULDBLOCK -> EAGAIN mapping was unnecessary since
 	EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).

	* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
 	address register in the .frame directive.

	* sysdeps/alpha/copysign.c: Remove.

	* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
 	avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.

	* errno.h: Move __END_DECLS to correct place to make file
 	compilable under c++.

	* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro.  Define
	d_ino only if <direntry.h> hasn't defined d_fileno.

	* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
	arguments to weakext to make .weakext detection work on ECOFF systems.

	* FAQ: Add Linux/Alpha to list of supported platforms.  Mention
	that _validuser() has been replaced by __ivaliduser().

Thu Jun  6 21:39:38 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
 	as unsigned long, not as int (to avoid incorrect int->long
 	promotion).
1996-06-19 06:54:12 +00:00
Roland McGrath 6990326c21 Wed Jun 19 01:27:57 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* math/Makefile (distribute): Add ieee-math.c.

Wed Jun 19 03:24:58 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/codeset_name.c: New file.  Provide function for information
 	about currently used character set.
	* locale/Makefile (routines): Add codeset_name.
	* locale/langinfo.h (_NL_CTYPE_CODESET_NAME): Add new constant.
	* locale/localeinfo.h: Change magic number because of incompatible
	change.
	* locale/C-ctype.c: Add initializer for new field `codeset_name'.
	* locale/programs/ld-ctype.c: Implement handling of `codeset_name'.

	* locale/programs/locfile.c: Don't depend in pre-2.0 Linux specific
 	name `MAX_IOVEC'.  Instead use standard name `UIO_MAXIOV'.

	* locale/setlocale.c (setlocale): Initialize local variables to
	prevent warnings.
1996-06-19 05:38:55 +00:00
Roland McGrath bd1be8ec88 * Version 1.91 test release. 1996-06-18 22:27:43 +00:00
Roland McGrath 36dbcbc98d * Makerules ($(common-objpfx)distinfo-$(subdir)): Change target from
distinfo to this.
	(distinfo): Make phony target depending on that.
	(TAGS, po/%.pot, dist): Change deps.
	(common-clean): Remove that file.
	* rpm/Makefile (distinfo): Change names.
1996-06-18 22:23:37 +00:00
Roland McGrath 96383fc79d Tue Jun 18 17:56:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* rpm/Makefile (clean): New target.

	* stdlib/test-canon.c: New test program contributed by David Mosberger.
	* stdlib/Makefile (tests): Add test-canon.
	* stdlib/canonicalize.c: Rewritten by David Mosberger.

	* mach/Machrules (%_server.c %_server.h rule): Remove gratuitous
	mention of $< in mig cmd.  Thanks to Shantanu Goel.
1996-06-18 22:01:43 +00:00
Roland McGrath 394f4f179e Tue Jun 18 17:56:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/test-canon.c: New test program contributed by David Mosberger.
	* stdlib/Makefile (tests): Add test-canon.
	* stdlib/canonicalize.c: Rewritten by David Mosberger.
1996-06-18 22:01:27 +00:00
Ian 1c719dd82c Recognize -openvms. 1996-06-18 18:23:57 +00:00
Roland McGrath 8882a2dad5 Sun Jun 16 03:22:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Make-dist (subdir): Make empty value really empty.
1996-06-18 02:41:29 +00:00
Roland McGrath 2cc7dc4d7f Mon Jun 17 17:53:21 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/brk.c (___brk_addr): Define as weak alias for
	_hurd_brk.

	* libio/stdio.h [__USE_SVID]: Declare tempnam.

Fri Jun 14 19:28:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/syscalls.list: Add swapon with two
	parameters.

Wed Jun 12 20:40:51 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/dl-machine.h (RTLD_START): Fix access to
	_dl_default_scope.

	* sysdeps/stub/elfclass.h: New file.
1996-06-17 22:41:47 +00:00
Roland McGrath 61ee476c44 * Make-dist (subdir): Make empty value really empty. 1996-06-16 10:14:04 +00:00
Roland McGrath 4c904bd459 * version.h (VERSION): Update to 1.91. 1996-06-16 10:06:22 +00:00
Roland McGrath 26da047f37 * hurd/hurdinit.c (map0): Remove [!PIC] conditional.
* shlib-versions (*-*-*): Add libutil=1.

	* rpm/Makefile (install-lib): Add libc.a et al.
	(install-others): Only add libc.so if $(build-shared) is yes.

	* math/Makefile (install-lib): New variable, list libieee.a.
	(non-lib.a): Likewise.
	(extra-objs): Likewise, and ieee-math.o.
	($(objpfx)libieee.a): New target, link to ieee-math.o.
	* math/ieee-math.c: New file.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=math]: Remove setfpucw
	and libieee.a stuff.
	* sysdeps/unix/sysv/linux/ieee-fpucw.c: File removed.
	* sysdeps/unix/sysv/linux/i386/ieee_fpu.c: File removed.
1996-06-16 09:31:23 +00:00
Roland McGrath 3433189e8a Sun Jun 16 03:22:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/Makefile (sysdep_headers): Make append of termio.h
	and rule for it conditional on termio.h not already being in
	sysdep_headers.

	* rpm/Makefile (install-others) [libc.so-version]: Get libc.so from
	$(libdir), only the versioned named from $(slibdir).
	(instfiles): New variable.
	(glibc-$(version).$(config).rpm): New target.  Run rpm -bb.
	* rpm/rpmrc: New file.  A third of the options controlling rpm can
	only be given here (another third is on the command line, and a third
	cannot be specified in any way shape or form).
1996-06-16 08:46:47 +00:00
Roland McGrath 6a44147171 Sun Jun 16 02:44:22 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* rpm/template: New file.
	* rpm/Makefile: New file.

	* Makeconfig (sysdep-configures): Remove empty variable.

	* Makerules (distinfo-vars): Write defns for $(install-lib.so) and
	$(versioned).

	* manual/Makefile (subdir_%): Add new rule with no deps, secondary to
	to rule w/dep on %, with no-op commands.

	* Makerules (subdir_distinfo): New phony target; depend on distinfo.
	* Makefile (rpm/%): New rule.
	(+subdir_targets): Add subdir_distinfo.

	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Don't add
 	fpu_control.h here.
1996-06-16 06:52:32 +00:00
Roland McGrath a3b5844025 Sun Jun 16 00:40:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/Makefile ($(installed-localtime-file)): If target exists, do
	nothing but print a message; if not, make it an absolute symlink.

	* time/tzset.c (__tzset): After stripping leading :, call
	__tzfile_read on TZ even if it's empty or null.
	* time/tzfile.c (__tzfile_read): Use "Universal" if passed "".
1996-06-16 04:52:54 +00:00
Roland McGrath 5fbef18864 * hurd/Makefile (routines): Add get-host, set-host.
(distribute): Add hurdhost.h.
	* hurd/hurdhost.h: New file.
	* sysdeps/mach/hurd/gethostname.c: Use _hurd_get_host_config.
	* sysdeps/mach/hurd/gethostid.c: Likewise.
	* sysdeps/mach/hurd/sethostname.c: Use _hurd_set_host_config.
	* sysdeps/mach/hurd/sethostid.c: Likewise.
	* hurd/get-host.c: New file.
	* hurd/set-host.c: New file.

	* math/Makefile (headers): Add fpu_control.h.
	(aux): New variable, list fpu_control and setfpucw.
	* sysdeps/generic/fpu_control.c: New file.
	* sysdeps/stub/fpu_control.h: New file.
	* sysdeps/unix/sysv/linux/m68k/fpu_control.h: Moved to ...
	* sysdeps/m68k/fpu_control.h: here.
	* sysdeps/unix/sysv/linux/i386/fpu_control.h: Moved to ...
	* sysdeps/i386/fpu_control.h: here.
	* sysdeps/unix/sysv/linux/alpha/fpu_control.h: Moved to ...
	* sysdeps/alpha/fpu/fpu_control.h: here.  Fixed copyright.
	* sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Remove
	setfpucw, fpu_control.
	* sysdeps/unix/sysv/linux/alpha/fpu_control.c: File removed.
	* sysdeps/unix/sysv/linux/setfpucw.c: Moved to ...
	* sysdeps/generic/setfpucw.c: here.
	(__fpu_control): Variable removed.
	(__setfpucw): Use SET even if zero.
1996-06-16 03:49:40 +00:00
Roland McGrath f9496a7b54 * elf/dl-deps.c (_dl_map_object_deps): Set MAP's mark bit before loop.
Set mark bits of deps as opened, instead of as scanned.

	* elf/rtld.c (dl_main): Remove _dl_rtld_map from chain unconditionally.
	Then if it has a nonzero l_opencount, add it back in search order.

	* elf/dl-load.c (_dl_map_object): Don't use _dl_loaded's DT_RPATH if
 	it ain't got one!
1996-06-16 02:18:58 +00:00
Roland McGrath a23db8e4af Sat Jun 15 18:13:43 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Dist: Add sys/klog.h.

	* elf/dl-open.c (_dl_open): Remove PARENT argument, pass null.
	* elf/link.h: Update prototype.
	* elf/dl-load.c (_dl_map_object): If dependents' DT_RPATHs don't find
	NAME, try the DT_RPATH of the executable itself if dynamic.
	* elf/dlopen.c (dlopen): Don't pass first arg to _dl_open.

	* elf/dl-load.c (_dl_map_object): Exit DT_RPATH checking loop when an
	open succeeds.

	* Makerules (build-shlib): Give -L opts for each elt of $(rpath-link).

	* sysdeps/mach/hurd/Makefile (sysdep-LDFLAGS): Variable removed.
	(rpath-link): Append to this instead.
1996-06-16 01:27:54 +00:00
Roland McGrath f332db0256 Fri Jun 14 01:51:47 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* version.c (banner): New static const variable, complete version
	banner text.
	(__libc_print_version): Use it, and use __write instead of printf.

	* configure.in (sysnames): Don't cache the value, because it
 	depends only on libc sources.  Merge uniquifying third pass into
	Implies/parent expansion second pass.  Report each unique name as
	it is added in partial report string, terminated when finished.

	* Makeconfig (sysdep_dir): Move defn before config.status rule that
	expands it.
	(sysdep-configures): Variable removed.
	(config.status): Use its contents directly, tighten up a bit, and
	include Implies files.

	* elf/dl-open.c (_dl_open) [PIC]: Set PARENT to _dl_loaded if null.

	* elf/Makefile ($(objpfx)$(rtld-installed-name)): Make a symlink.

	* sysdeps/mach/hurd/dl-sysdep.c (_dl_sysdep_open_zero_fill):
	Add comment.

	* elf/rtld.c (dl_main): Close _dl_zerofd after mapping deps.

	* sysdeps/generic/machine-gmon.h [NO_UNDERSCORES]: Define mcount as
	weak alias for _mcount.
	* sysdeps/alpha/_mcount.S (mcount): Define as weak alias.
1996-06-14 12:05:04 +00:00
Roland McGrath 9f70e81bca Thu Jun 13 00:02:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/machine-gmon.h [NO_UNDERSCORES]: Define mcount as
	weak alias for _mcount.
	* sysdeps/alpha/_mcount.S (mcount): Define as weak alias.
1996-06-13 22:49:37 +00:00
Miles Bader 5c5ae36fd8 *** empty log message ***
Thu Jun 13 14:29:56 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdsig.c (_hurd_internal_post_signal): Rename `deliver:'
	label to `deliver_pending:' to match goto.
1996-06-13 20:50:55 +00:00
Miles Bader 6172aaa35c (_hurd_internal_post_signal): Rename deliver:' label to deliver_pending:' to match goto. 1996-06-13 20:44:10 +00:00
Roland McGrath 8ab1a68d05 Thu Jun 13 00:02:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): If no value and *REF is
	null, consider it a strong reference and give the error.
1996-06-13 06:50:11 +00:00
Roland McGrath 4d6acc61fa Thu Jun 13 00:02:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): If no value and *REF is
	null, consider it a strong reference and give the error.

Wed Jun 12 15:52:46 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/dl-open.c (_dl_open): Correctly terminate relocating loop
 	after relocating NEW when it's the only new object.

	* elf/dl-init.c (_dl_init_next): When out of initializers, set
 	_r_debug.r_state to RT_CONSISTENT and call _dl_debug_state just
 	before return.

	* elf/rtld.c (dl_main): Move _dl_debug_initialize call after
 	relocation.  Call it unconditionally and only fill in DT_DEBUG
 	if it's present.  Then call _dl_debug_state with r_state RT_ADD
 	before running initializers.

	* elf/dl-open.c (_dl_open): Call _dl_debug_initialize and then call
 	_dl_debug_state with r_state RT_ADD before running initializers
	* elf/dl-close.c (_dl_close): Call _dl_debug_state with r_state
 	RT_DELETE before running finalizers and with RT_CONSISTENT just
 	before return.

	* elf/Makefile (dl-routines): Add dl-debug.
	* elf/dl-debug.c: New file.
	* elf/rtld.c (_dl_r_debug): Rename to _r_debug and move to dl-debug.c.
	(_dl_r_debug_state): Rename to _dl_debug_state and likewise move.
	(dl_main): Use _dl_debug_initialize.
	* elf/link.h: Fix name to _dl_debug_state in decl.
	(_dl_debug_initialize): Declare new function from dl-debug.c.
	(_r_debug): Declare it.

	* Makerules (distinfo-vars): Add install-{lib,data,bin,sbin,others}.
	In distinfo set $(subdir)-VAR and then set VAR to $($(subdir)-VAR).

	* Makeconfig (rpath-link): New variable; add $(elfobjdir).
	(default-rpath): Use it.
	(built-program-cmd): Use it in LD_LIBRARY_PATH.

	* Makeconfig (sysdep-configures): Prepend $(sysdep_dir) to names tried.

	* sysdeps/unix/Dist: Add make-syscalls.sh.

	* misc/Makefile (headers): Add sys/swap.h.
	* posix/unistd.h: Remove decls for swapon, swapoff.
	* sysdeps/generic/sys/swap.h: New file.
	* sysdeps/unix/sysv/linux/sys/swap.h: New file.

	* sysdeps/unix/sysv/linux/gnu/types.h: Remove temporary hack #define
	of __kernel_fsid_t.  It is correctly defines in <linux/types.h> now.
1996-06-13 04:06:45 +00:00
Roland McGrath 4d5da9a654 * sysdeps/alpha/dl-machine.h: New file. 1996-06-12 04:51:48 +00:00
Roland McGrath 463e148b75 Tue Jun 11 23:23:30 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (LDFLAGS-c.so): Use __libc_main instead of
	__libc_print_version as entry point for shared object.
	* version.c [HAVE_ELF] (__libc_main): New function.

	* elf/dl-load.c (_dl_map_object_from_fd): Relocate l_entry with the
	load address.
1996-06-12 04:00:32 +00:00
Roland McGrath 8d6468d0c8 Tue Jun 11 19:13:04 1996 Richard Henderson <rth@tamu.edu>
* elf/dl-close.c: Include <string.h> for memcpy.
	* elf/dl-lookup.c: Same.

	* elf/elf.h: Add Elfxx_Symndx for symbol indices.
	* elf/dl-lookup.c (_dl_lookup_symbol): Use it.
	(_dl_setup_hash): Use it.
	* elf/link.h (struct link_map): Use it.

	* elf/rtld.c (_dl_start): Don't rely on pointer-to-first-arg hack
	for getting the argc/argv/envp block.  Instead, make it the argument.
	sysdeps/i386/dl-machine.h (RTLD_START): Do that.
	sysdeps/m68k/dl-machine.h (RTLD_START): Same.

	* shlib-versions: Add version numbers for alpha-linux.  To avoid
	user confusion, make them the same as i386-linux.

	* sysdeps/alpha/Makefile [subdir elf]: Add -mno-fp-regs to
	sysdep-CFLAGS so that _dl_runtime_resolve doesn't have to save them.
	Add -mbuild-constants to CFLAGS-rtld.c to that we can bootstrap
	without using literal data.

	* sysdeps/generic/dl-sysdep.c: Include <string.h> for memcpy.
	Finish Elf32 -> ElfW migration.
1996-06-12 01:54:21 +00:00
Roland McGrath 6e86a7c21b * Makerules (elfobjdir): Use $(objdir) if set, even in elf subdir.
* elf/Makefile (routines): Remove init-first.
	* csu/Makefile (routines): New variable; put it here instead.

	* config.make.in (CFLAGS): New variable.

	* io/sys/stat.h (S_ISLNK, S_ISSOCK): Make conditional on __USE_BSD,
	not __USE_GNU.
	* string/string.h (strncasecmp): Likewise.
1996-06-12 01:34:32 +00:00
Roland McGrath a89d30d444 * elf/Makefile (lib-noranlib): Move rule adding deps for ld.so et al
to after `include ../Rules', so $(rtld-installed-name) is defined.
1996-06-11 21:41:42 +00:00
Roland McGrath d8c7ef98c1 * string/basename.c (basename): Cast FILENAME to char * for return.
* Makerules ($(libdir)/libc.so): Put $(rtld-installed) name between
	libc.so and libc.a in the deps.
1996-06-11 21:33:17 +00:00
Roland McGrath 852fc4b91e * elf/Makefile ($(objpfx)$(rtld-installed-name)): New target to make
link to ld.so if that is not the installed name.
	(lib-noranlib): Depend on the installed name in the build directory
	instead of on ld.so.

	* Makeconfig (link-libc): Include $(elfobjdir)/$(rtld-installed-name)
	between libc.so and libc.a, because with libc.so's DT_NEEDED for ld.so
	ld searches libc.a before ld.so (is that an ld bug?).
	Add $(elfobjdir) to -rpath-link.

	* Makerules (elfobjdir): Define as . when $(subdir) is elf.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): In R_386_32 case when
	relocating _dl_rtld_map, subtract SYM's value from final reloc value,
	but don't change *RELOC_ADDR before calling *RESOLVE, because it might
	call the function we are relocating!
1996-06-11 21:07:00 +00:00
Roland McGrath 6ba3531662 Tue Jun 11 15:09:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/basename.c: New file.
	* string/Makefile (routines): Add basename.
1996-06-11 19:18:38 +00:00
Roland McGrath ba79d61b44 * Makerules ($(common-objpfx)libc.so): Depend on $(elfobjdir)/ld.so.
* elf/dl-close.c: New file.
	* elf/link.h: Declare _dl_close.
	* elf/Makefile (routines): Add dl-close.
	* elf/dlclose.c (dlclose): Use _dl_close.

	* elf/Makefile ($(objpfx)librtld.so): Remove libelf from deps.

	* elf/dl-runtime.c (_dl_global_scope): New variable.
	(_dl_object_relocation_scope): New function.
	(fixup): Use it.
	* elf/rtld.c (dl_main): Use it.
	* elf/dl-open.c (_dl_open): Use it.  If (MODE & RTLD_GLOBAL), set the
	l_global bit and append the new map to _dl_global_scope.
	* elf/link.h: Declare _dl_global_scope, _dl_global_scope_alloc,
	and _dl_object_relocation_scope.

	* elf/link.h (struct link_map): Add l_loader member.
	Remove _dl_map_object_from_fd decl.
	* elf/dl-load.c (_dl_map_object): Pass LOADER to ...
	(_dl_map_object_from_fd): Take new arg LOADER and set l_loader member.
	(_dl_map_object): Try DT_RPATH from all loaders up the chain.

	* elf/dl-object.c (_dl_loaded): Variable removed.
	(_dl_default_scope): New variable replaces it.
	* elf/link.h (_dl_loaded): Remove variable decl; instead define as
	macro for _dl_default_scope[2].
	(_dl_default_scope): Declare it.
	* sysdeps/i386/dl-machine.h (RTLD_START): Use _dl_default_scope[2]
	instead of _dl_loaded.
	* sysdeps/m68k/dl-machine.h (RTLD_START): Likewise.
	* elf/rtld.c (dl_main): Use _dl_default_scope for symbol lookups.

	* elf/dl-reloc.c (_dl_relocate_object): Remove check for _dl_rtld_map.
	* elf/rtld.c (dl_main): Pass 0 for LAZY flag when re-relocating self.

	* elf/link.h (struct link_map.l_type): Remove lt_interpreter.
 	(struct link_map): Add new flag member l_global.

	* elf/dl-reloc.c (_dl_relocate_object): Check for _dl_rtld_map
	directly instead of looking for lt_interpreter.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
	* elf/rtld.c (_dl_start): Don't bother setting BOOTSTRAP_MAP.l_type.
	(dl_main): Set _dl_rtld_map.l_type to lt_library.

	* elf/dl-deps.c (_dl_map_object_deps): Propagate MAP->l_type to
	dependencies loaded, downgrading lt_executable -> lt_library.

	* elf/dl-load.c (_dl_map_object_from_fd): Take new arg TYPE and set
	l_type from that, translating lt_library->lt_executable based on the
	file's ELF type.
	(_dl_map_object): Likewise.
	* elf/link.h: Update prototypes.
	* elf/dl-open.c: Pass type lt_loaded.
	* elf/rtld.c: Pass type lt_library.

	* elf/dl-load.c (_dl_map_object_from_fd): Handle null return from
	_dl_new_object.
	(_dl_map_object_from_fd: lose): Unchain and free L if it's not null.
	Free REALNAME, and just use NAME in error message.
	* elf/dl-object.c (_dl_new_object): If malloc fails, return null
	instead of calling _dl_signal_error.

	* elf/dl-load.c (_dl_map_object_from_fd): Close FD before signalling
	error for _dl_zerofd setup failure.

	* elf/dl-object.c (_dl_startup_loaded): Variable removed.
	* elf/link.h: Remove its decl.

	* elf/dl-reloc.c (_dl_relocate_object): Take new SCOPE arg and pass it
	through to _dl_lookup_symbol.
	* elf/link.h (_dl_relocate_object): Update comment and prototype.
	* elf/rtld.c (dl_main): Pass scope vector to _dl_relocate_object.

	* elf/dl-lookup.c (_dl_lookup_symbol): Arg SYMBOL_SCOPE is now a
	null-terminated vector of pointers, no longer a vector of exactly two.
	* elf/link.h (_dl_lookup_symbol): Update comment and prototype.

	* elf/dl-runtime.c (fixup): Set up scope for symbol lookup properly as
	done in _dl_relocate_object.

	* elf/dlopen.c: Pass "" to _dl_open when FILE is null.
1996-06-10 20:19:39 +00:00
Roland McGrath 567c63af19 * elf/link.h: Include elfclass.h to define __ELF_NATIVE_CLASS.
(ElfW, ELFW): Use it.
	* elf/Makefile (headers): Add elfclass.h.
	* sysdeps/wordsize-32/elfclass.h: New file.
	* sysdeps/wordsize-64/elfclass.h: New file.
	* sysdeps/alpha/Implies: Add wordsize-64.
	* sysdeps/i386/Implies: Add wordsize-32.
	* sysdeps/m68k/Implies: Add wordsize-32.
	* sysdeps/mips/Implies: Add wordsize-32.
	* sysdeps/sparc/Implies: Add wordsize-32.
1996-06-10 13:03:12 +00:00
Roland McGrath 266180eb98 Mon Jun 10 06:14:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/dl-sysdep.c (__open): Define this instead of open.
	(__close, __mmap): Likewise define with __ names now.

Mon Jun 10 05:13:18 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/dl-support.c: New file.
	* elf/Makefile (CFLAGS-dl-support.c): New variable.
	(routines, elide-routines.so): Add dl-support.

	* elf/dl-minimal.c (_dl_pagesize): Remove common defn.
	* elf/dl-load.c (_dl_pagesize): Define it here.
	(_dl_map_object_from_fd): Initialize it if zero.
	* elf/link.h (_dl_pagesize): Remove const.

Sun Jun  9 04:04:26 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/Makefile (routines): Add dl-symbol.
	* elf/dl-lookup.c (_dl_symbol_value): Moved to ...
	* elf/dl-symbol.c: New file.

	* elf/elf.h (Elf32_Xword, Elf32_Sxword): New types.
	(Elf32_Section, Elf64_Section): New types, 16 bits.
	(Elf32_Sym, Elf64_Sym): Use it.

	* elf/dl-deps.c (_dl_open): Moved to ...
	* elf/dl-open.c: New file.
	* Makefile (routines): Add dl-open.

	* elf/Makefile (dl-routines): New variable.
	(routines): Add $(dl-routines).
	(elide-routines.so): New variable, set to $(dl-routines).
	(libdl-inhibit-o): Variable removed; build all flavors of -ldl.
	(rtld-routines): All but rtld, dl-sysdep, and dl-minimal moved to
 	$(dl-routines).

	* elf/dl-lookup.c (_dl_lookup_symbol): Remove magic symbol grokage.

	* elf/dladdr.c: Use ELFW(ST_BIND) in place of ELF32_ST_BIND.

	* elf/dl-load.c (open_path): Use __ names for open and close.  Avoid
	using strdup.
	(_dl_map_object): Likewise.
	(_dl_map_object_from_fd): Use __ names for mmap, munmap, and mprotect.
	* elf/dl-minimal.c (malloc): Likewise.
	* elf/dl-reloc.c (_dl_relocate_object): Likewise.

	* elf/dl-minimal.c (_dl_pagesize): New variable.
	(malloc): Use that instead of a static variable.
	* elf/dl-reloc.c (_dl_relocate_object): Use _dl_pagesize instead of
	calling getpagesize.
	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
	* elf/link.h: Declare _dl_pagesize.

	* elf/rtld.c (dl_r_debug): Renamed to _dl_r_debug.

	* elf/link.h (struct link_map): Use Half for l_phnum instead of Word.
  	* elf/rtld.c (dl_main): Use Half for phdr count arg.
	(_dl_sysdep_start): Update prototype of DL_MAIN function ptr arg.

	* elf/dl-load.c (_dl_map_object_from_fd): Use explicit Elf32_Word to
 	extract 4-byte magic number, not ElfW(Word).  Match EI_CLASS against
 	native wordsize, either 32 or 64.

	* elf/elf.h (Elf64_Byte, Elf64_Section): Typedefs removed.  In C a
 	char is always a byte, no need for a typedef.  Section indices are
	16-bit quantities in elf64, which already have a typedef Elf64_Half.

	Remove partial -lelf implementation.  There is now a
	separately-distributed `libelf' package that implements it.
	* elf/dl-lookup.c: Don't #include <libelf.h> any more.
	(_dl_elf_hash): New function, moved from
	libelf.h:elf_hash.
	(_dl_lookup_symbol): Use it instead of elf_hash.
	* elf/libelf.h: File removed.
	* elf/elf_hash.c: File removed.
	* elf/Makefile (headers): Remove libelf.h.
	(extra-libs): Remove libelf.
	(libelf-routines): Variable removed.

	* elf/Makefile (libdl.so): Remove commands from this target.  The
 	implicit rule commands are correct, this explicit rule just serves to
 	add some dependencies.

	* elf/dl-lookup.c (_dl_lookup_symbol): Use ELFW(ST_TYPE) in place of
 	ELF32_ST_TYPE.  Likewise ST_BIND.
	* elf/do-rel.h (elf_dynamic_do_rel): Likewise R_SYM.

	* elf/link.h (ElfW): New macro for wordsize-independent ElfXX_* type
	naming.
	(ELFW): New macro, likewise for ELFXX_* macro naming.
	(_ElfW, _ElfW_1): New macros, subroutines of ElfW and ELF.

Sat Jun  8 20:52:38 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/link.h, elf/do-rel.h, elf/dynamic-link.h, elf/dl-deps.c,
 	elf/dl-init.c, elf/dl-load.c, elf/dl-lookup.c, elf/dl-reloc.c,
 	elf/dl-runtime.c, elf/dladdr.c, elf/dlclose.c, elf/dlsym.c,
 	elf/linux-compat.c, elf/rtld.c: Change all uses of `Elf32_XXX' to
 	`ElfW(XXX)' for wordsize-independence.

Sat Jun  8 20:50:42 1996  Richard Henderson  <rth@tamu.edu>

	* elf/elf.h: Move Elf64_* types in parity with Elf32 counterparts.
	(Elf64_auxv_t): New type.
	(EM_ALPHA, R_ALPHA_*): New macros for elf64-alpha format.
1996-06-10 10:18:47 +00:00
Roland McGrath 564210fe2f Mon Jun 10 02:22:24 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/configure.in: New file, start with configure.
	Add check for installed <linux/version.h> being v2.0 or later.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_open_zero_fill): Call __open
	instead of open.
	(_dl_sysdep_fatal): Call __write instead of write.
	(_dl_sysdep_message): Likewise.

Sun Jun  9 20:40:00 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_acosl.c: New file.

	* Makerules (o-objects): New variable.  Use it in place of
	$(objects:.o=$o); it filters out $(elide-routines$o).
	Use o-iterator for ar and ranlib rules so they use the per-type object
	list.

	* sysdeps/unix/bsd/ultrix4/sys/mman.h: Likewise.
1996-06-10 09:41:16 +00:00
Roland McGrath 6d9756c910 * elf/dl-load.c (_dl_map_object_from_fd): Close FD before return.
* sysdeps/mach/mprotect.c: Define with __ name and weak alias.
	* sysdeps/stub/mprotect.c: Likewise.
	* sysdeps/unix/mman/syscalls.list (mprotect): Likewise.
	* sysdeps/generic/sys/mman.h: Declare __mprotect.
	* sysdeps/unix/sysv/irix4/sys/mman.h: Likewise.
	* sysdeps/unix/sysv/linux/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/sun/sunos4/sys/mman.h: Likewise.
	* sysdeps/unix/bsd/osf/sys/mman.h: Likewise.
1996-06-09 22:02:59 +00:00
Roland McGrath 9dd2fc5d87 * Make-dist ($(tardir).tar): Use sed to check for file names longer
than 14 chars, instead of doschk which checks for other things we
	don't care about.
1996-06-09 07:55:33 +00:00
Roland McGrath 780b91d932 * Version 1.90 test release. 1996-06-09 06:59:45 +00:00
Roland McGrath dcfb26a705 Sun Jun 9 01:11:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (make-target-directory): Use ./mkinstalldirs so we do not
	assume . is in PATH.

Sat Jun  8 22:05:03 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* math/Makefile (distribute): Comment out addition of
	$(long-m-routines) sources until they are all written.

	* math/Makefile (distribute): Append long double source names to this
	instead of using elided-routines.

Sat Jun  8 15:15:07 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* mach/mach_shortcuts.c: Obsolete file removed.
	* mach/mach_syscalls.h: Likewise.

	* hurd/Makefile (distribute): Consolidate defns into one.

	* time/Makefile (tzfiles): Add solar87 solar88 solar89.
1996-06-09 05:25:25 +00:00
Roland McGrath 5481bb895e Sat Jun 8 15:15:07 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/Makefile (tzfiles): Add solar87 solar88 solar89.
1996-06-08 15:21:40 +00:00
Per Bothner e3ca0de5cb * config.guess (i?86-ncr-sysv*): Emit minor release numbers. Recognize the NCR 4850 machine and NCR Pentium-based platforms. 1996-06-08 01:25:20 +00:00
Miles Bader 9646d93462 *** empty log message ***
* sysdeps/mach/hurd/getpriority.c (getpriority): Use new interface
	to __proc_getprocinfo.
1996-06-07 21:50:31 +00:00
Miles Bader 061c6526bf (getpriority): Use new interface to __proc_getprocinfo. 1996-06-07 21:49:06 +00:00
Roland McGrath bf668fc8f0 Fri Jun 7 16:48:13 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/Dist: New file, list sys/perm.h and
	sys/vm86.h.

	Removed old math code no longer used since the fdlibm integration.
	* sysdeps/stub/acos.c: File removed.
	* sysdeps/stub/asin.c: File removed.
	* sysdeps/stub/atan2.c: File removed.
	* sysdeps/stub/cosh.c: File removed.
	* sysdeps/stub/exp.c: File removed.
	* sysdeps/stub/fmod.c: File removed.
	* sysdeps/stub/frexp.c: File removed.
	* sysdeps/stub/log.c: File removed.
	* sysdeps/stub/log10.c: File removed.
	* sysdeps/stub/sinh.c: File removed.
	* sysdeps/stub/tan.c: File removed.
	* sysdeps/stub/tanh.c: File removed.
	* sysdeps/generic/acos.c: File removed.
	* sysdeps/generic/acosh.c: File removed.
	* sysdeps/generic/asin.c: File removed.
	* sysdeps/generic/asinh.c: File removed.
	* sysdeps/generic/atan.c: File removed.
	* sysdeps/generic/atan2.c: File removed.
	* sysdeps/generic/atanh.c: File removed.
	* sysdeps/generic/cabs.c: File removed.
	* sysdeps/generic/ceil.c: File removed.
	* sysdeps/generic/copysign.c: File removed.
	* sysdeps/generic/cosh.c: File removed.
	* sysdeps/generic/exp.c: File removed.
	* sysdeps/generic/expm1.c: File removed.
	* sysdeps/generic/fabs.c: File removed.
	* sysdeps/generic/floor.c: File removed.
	* sysdeps/generic/fmod.c: File removed.
	* sysdeps/generic/frexp.c: File removed.
	* sysdeps/generic/hypot.c: File removed.
	* sysdeps/generic/infnan.c: File removed.
	* sysdeps/generic/isnan.c: File removed.
	* sysdeps/generic/ldexp.c: File removed.
	* sysdeps/generic/log.c: File removed.
	* sysdeps/generic/log10.c: File removed.
	* sysdeps/generic/log1p.c: File removed.
	* sysdeps/generic/modf.c: File removed.
	* sysdeps/generic/pow.c: File removed.
	* sysdeps/generic/rint.c: File removed.
	* sysdeps/generic/sinh.c: File removed.
	* sysdeps/generic/tan.c: File removed.
	* sysdeps/generic/tanh.c: File removed.
	* sysdeps/ieee754/cabs.c: File removed.
	* sysdeps/ieee754/copysign.c: File removed.
	* sysdeps/ieee754/frexp.c: File removed.
	* sysdeps/ieee754/hypot.c: File removed.
	* sysdeps/ieee754/infnan.c: File removed.
	* sysdeps/ieee754/ldexp.c: File removed.
	* sysdeps/ieee754/log10.c: File removed.

	* posix/Makefile (headers): Add schedbits.h.

	* math/Makefile (elided-routines): Add long double routines.

Fri Jun  7 09:11:17 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/Dist: Add sys/sysinfo.h, sys/mount.h,
	sys/kdaemon.h, sys/io.h, sys/mount.h, sysctl.c.

	* gmon/Makefile (distribute): Add profil-counter.h.

	* sysdeps/unix/sysv/linux/alpha/Dist: New file.

	* sysdeps/unix/Dist: Add s-proto.S.

	* sysdeps/unix/common/mk-local_lim.c: Obsolete file removed.

	* Make-dist (+sysdep-tsrcs): Get all syscalls.list files too.

	* csu/Makefile (distribute): Add start.c.

	* elf/Makefile (distribute): Add dl-machine.h.

	* sysdeps/alpha/Dist: Add _mcount.S.

	* sysdeps/alpha/Makefile (sysdep_routines): Append instead of
	resetting; don't add bb_init_func.

	* string/Makefile (routines): Add strerror_r.
	* string/string.h (strerror_r): Use int for BUFLEN arg.

	* Makefile (distribute): Add shlib-versions.

	* po/Makefile (distribute): Add SYS_libc.pot.

	* misc/Makefile (routines): Add lsearch.

	* manual/lang.texi (Consistency Checking): Merge in assert_perror defn
	and other changes inadvertently made to the obsolete assert.texi.
	* manual/assert.texi: File removed.

	* mach/mach_syscalls.c: Obsolete file removed.
	* mach/mach_syscalls.h: Likewise.
	* mach/mach_traps.S: Likewise.
	* mach/msg_destroy.c: Likewise.
	* mach/vm_page_size.c: Likewise.

	* locale/Makefile (distribute): Add weight.h, charset.h.

	* Makefile (distribute): Add version.h.

	* hurd/Makefile (headers): Add hurd/ioctl.h.
	(distribute): Add intr-rpc.d, intr-rpc.h, faultexc.defs.

	* csu/Makefile (distribute): Add gmon-start.c.

	* Makefile (distribute): Add config.h.in.

	sysdeps/m68k/fpu/e_atanhl.c, sysdeps/m68k/fpu/e_coshl.c: New files.
1996-06-07 21:18:34 +00:00
Roland McGrath 6f3e22dc48 Tue Jun 4 22:03:02 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/__math.h: Define long double versions of
	the inline functions.
	* sysdeps/m68k/fpu/e_asinl.c, sysdeps/m68k/fpu/e_atanl.c,
	sysdeps/m68k/fpu/e_acosl.c, sysdeps/m68k/fpu/e_expl.c,
	sysdeps/m68k/fpu/e_fmodl.c, sysdeps/m68k/fpu/e_log10l.c,
	sysdeps/m68k/fpu/e_logl.c, sysdeps/m68k/fpu/e_powl.c,
	sysdeps/m68k/fpu/e_remainderl.c, sysdeps/m68k/fpu/e_scalbl.c,
	sysdeps/m68k/fpu/e_sinhl.c, sysdeps/m68k/fpu/e_sqrtl.c,
	sysdeps/m68k/fpu/k_cosl.c, sysdeps/m68k/fpu/k_sinl.c,
	sysdeps/m68k/fpu/k_tanl.c, sysdeps/m68k/fpu/s_atanl.c,
	sysdeps/m68k/fpu/s_ceill.c, sysdeps/m68k/fpu/s_cosl.c,
	sysdeps/m68k/fpu/s_expm1l.c, sysdeps/m68k/fpu/s_fabsl.c,
	sysdeps/m68k/fpu/s_finitel.c, sysdeps/m68k/fpu/s_floorl.c,
	sysdeps/m68k/fpu/s_frexpl.c, sysdeps/m68k/fpu/s_ilogbl.c,
	sysdeps/m68k/fpu/s_isinfl.c, sysdeps/m68k/fpu/s_isnanl.c,
	sysdeps/m68k/fpu/s_ldexpl.c, sysdeps/m68k/fpu/s_log1pl.c,
	sysdeps/m68k/fpu/s_logbl.c, sysdeps/m68k/fpu/s_modfl.c,
	sysdeps/m68k/fpu/s_rintl.c, sysdeps/m68k/fpu/s_scalbnl.c,
	sysdeps/m68k/fpu/s_significandl.c, sysdeps/m68k/fpu/s_sinl.c,
	sysdeps/m68k/fpu/e_atanhl.c, sysdeps/m68k/fpu/e_coshl.c: New files.
1996-06-07 21:00:20 +00:00
Miles Bader 268eb64290 *** empty log message ***
Fri Jun  7 11:02:22 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* login/login.c (tty_name): New function.
	(login): Use it.
	(PATH_MAX): MACRO removed.
	<stdlib.h>: New include.
1996-06-07 20:38:21 +00:00
Roland McGrath 9f447fb32c Fri Jun 7 09:11:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/mach_syscalls.c: Obsolete file removed.
	* mach/mach_syscalls.h: Likewise.
	* mach/mach_traps.S: Likewise.
	* mach/msg_destroy.c: Likewise.
	* mach/vm_page_size.c: Likewise.
1996-06-07 20:37:41 +00:00
Roland McGrath bd5fa7727c Fri Jun 7 09:11:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Dist: Add sys/sysinfo.h, sys/mount.h,
	sys/kdaemon.h, sys/io.h, sys/mount.h, sysctl.c.
1996-06-07 20:36:16 +00:00
Miles Bader 500590c767 (tty_name): New function. (login): Use it. (PATH_MAX): MACRO removed. <stdlib.h>: New include. 1996-06-07 20:32:20 +00:00
Roland McGrath 64a921419d obsolete 1996-06-07 13:21:41 +00:00
Roland McGrath 1c2f546be8 Wed Jun 5 22:06:21 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Fix type of reloc
	argument.
	[case R_68K_32]: Check for resolve being null.
	(RTLD_START): Add missing label.
1996-06-07 13:07:15 +00:00
Roland McGrath 1be6ec3033 Fri Jun 7 1996 05:29:32 Ulrich Drepper <drepper@cygnus.com>
* misc/lsearch.c: New file.  Implementation of lfind and
	lsearch functions.

	* misc/search.h: Add prototype for functions from tsearch
	family with __ prefix.
	Correct prototype for lsearch: BASE parameter must not be
	const.

	* misc/tsearch.c: prepend all global function names with __
	and make normal names weak aliases.

Fri Jun  7 00:15:24 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Make-dist (sysdep_dirs): Skip CVS dirs.
1996-06-07 04:36:10 +00:00
Roland McGrath c035afc960 * malloc/Makefile (distribute): Change malloc/gmalloc-head.c to
gmalloc-head.c.
	(malloc/gmalloc.c): Depend on malloc/gmalloc-head.c.
	(malloc/Makefile): Do $(make-target-directory) first.
	* malloc/gmalloc-head.c: New file.

	* po/Makefile (linguas.mo): Don't commit .mo files to cvs.
1996-06-06 23:55:17 +00:00
Roland McGrath 4d02a5b18a Thu Jun 6 16:12:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurd_internal_post_signal): For SIGNO==0 pending
	check, deliver a pending blocked signal if its action might be to
	ignore.
	* sysdeps/mach/hurd/sigaction.c: If new action is SIG_IGN or SIG_DFL
	and SIG is pending, wake up signal thread to check us.

	* hurd/hurdsig.c (_hurd_internal_post_signal): Don't mark a signal
	pending while blocked or stopped when the action is to ignore it.

	* hurd/hurdsig.c (_hurd_internal_post_signal: resume): Only set
	SS_SUSPENDED when the thread is really suspended.

	* elf/rtld.c (dl_main): Don't dereference _dl_rtld_map.l_next if null.
1996-06-06 20:49:22 +00:00
Roland McGrath e60062b769 Thu Jun 6 12:56:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (headers): Move append of $(sysdep_headers) after include
	of sysdep makefiles.

	* sysdeps/mach/hurd/errlist.c: File removed.
1996-06-06 17:02:44 +00:00
Roland McGrath 3ed8c0596e Thu Jun 6 12:56:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/errlist.c: File removed.
1996-06-06 17:02:26 +00:00
Miles Bader 02eec64431 *** empty log message ***
Thu Jun  6 07:32:14 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* resolv/gethnamaddr.c (struct hstorage): Make NAME field a pointer.
	(_gethtbyname2): Remove ALIAS variable.
	Initialize NAME field of SELF and TARGET to 0.
	Add SELF_NAME_SIZE static variable.
	Add loop to call gethostname until the space we allocated is enough.
	Use malloced strings instead of fixed size buffers.
	<stdlib.h>, <unistd.h>: New includes.
	* sysdeps/generic/sys/socket.h (PF_INET6, AF_INET6): New macros.

	* sysdeps/mach/hurd/errlist.c (_sys_errlist): Add EILSEQ.
	(_sys_nerr): Initialize to 107.
	Update _HURD_ERRNOS consistency check.

	* stdlib/canonicalize.c (canonicalize): Use pathconf for PATH_MAX,
	not sysconf.

	* login/login.c [!PATH_MAX] (PATH_MAX): Define to be 1024 if not
	already defined.

	* sysdeps/mach/hurd/setitimer.c (timer_thread): Supply SIGCODE
	argument to __msg_sig_post_request.

	* hurd/hurdmalloc.c: Changes to bring in line with the hurd
	libthreads/malloc.c:
	(more_memory): Use assert_perror instead of MACH_CALL.
	"cthread_internals.h": Include removed.
	(realloc): Use LOG2_MIN_SIZE.
	(LOG2_MIN_SIZE): New macro.
	(realloc): Don't bother allocating a new block if the
 	new size request fits in the old one and doesn't waste any space.
  	Only free the old block if we successfully got a new one.
	[MCHECK] (struct header): New type.
	(union header): Only define if !MCHECK.
	(HEADER_SIZE, HEADER_NEXT, HEADER_FREE, HEADER_CHECK): New macros.
	[MCHECK] (MIN_SIZE): Add correct definition for this case.
	(more_memory, malloc, free, realloc): Use above macros, and add
	appropiate checks & frobs in MCHECK case.
1996-06-06 15:29:59 +00:00
Miles Bader e550852065 (PF_INET6, AF_INET6): New macros. 1996-06-06 15:10:29 +00:00
Roland McGrath 92f3773b4c Thu Jun 6 02:00:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (distinfo-vars): Don't write constant line to frob sources.
	* Make-dist (sources): Append $(elided-routines) and $(extra-libs)
	routines.
1996-06-06 06:05:11 +00:00
Roland McGrath 8f30ca23f7 Tue Jun 4 22:03:02 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/m68k/fpu/__math.h: Define long double versions of
	the inline functions.

	* sysdeps/m68k/fpu/e_asinl.c, sysdeps/m68k/fpu/e_atanl.c,
	sysdeps/m68k/fpu/e_acosl.c, sysdeps/m68k/fpu/e_expl.c,
	sysdeps/m68k/fpu/e_fmodl.c, sysdeps/m68k/fpu/e_log10l.c,
	sysdeps/m68k/fpu/e_logl.c, sysdeps/m68k/fpu/e_powl.c,
	sysdeps/m68k/fpu/e_remainderl.c, sysdeps/m68k/fpu/e_scalbl.c,
	sysdeps/m68k/fpu/e_sinhl.c, sysdeps/m68k/fpu/e_sqrtl.c,
	sysdeps/m68k/fpu/k_cosl.c, sysdeps/m68k/fpu/k_sinl.c,
	sysdeps/m68k/fpu/k_tanl.c, sysdeps/m68k/fpu/s_atanl.c,
	sysdeps/m68k/fpu/s_ceill.c, sysdeps/m68k/fpu/s_cosl.c,
	sysdeps/m68k/fpu/s_expm1l.c, sysdeps/m68k/fpu/s_fabsl.c,
	sysdeps/m68k/fpu/s_finitel.c, sysdeps/m68k/fpu/s_floorl.c,
	sysdeps/m68k/fpu/s_frexpl.c, sysdeps/m68k/fpu/s_ilogbl.c,
	sysdeps/m68k/fpu/s_isinfl.c, sysdeps/m68k/fpu/s_isnanl.c,
	sysdeps/m68k/fpu/s_ldexpl.c, sysdeps/m68k/fpu/s_log1pl.c,
	sysdeps/m68k/fpu/s_logbl.c, sysdeps/m68k/fpu/s_modfl.c,
	sysdeps/m68k/fpu/s_rintl.c, sysdeps/m68k/fpu/s_scalbnl.c,
	sysdeps/m68k/fpu/s_significandl.c, sysdeps/m68k/fpu/s_sinl.c,
	sysdeps/m68k/fpu/s_tanhl.c, sysdeps/m68k/fpu/s_tanl.c: New files.

	* sysdeps/m68k/fpu/e_acos.c, sysdeps/m68k/fpu/e_fmod.c,
 	sysdeps/m68k/fpu/k_cos.c, sysdeps/m68k/fpu/k_sin.c,
 	sysdeps/m68k/fpu/k_tan.c, sysdeps/m68k/fpu/s_atan.c,
 	sysdeps/m68k/fpu/s_frexp.c, sysdeps/m68k/fpu/s_ilogb.c,
 	sysdeps/m68k/fpu/s_isinf.c, sysdeps/m68k/fpu/s_ldexp.c,
 	sysdeps/m68k/fpu/s_modf.c: Define generic functions using FUNC and
 	float_type with appropriate defaults.

	* sysdeps/m68k/fpu/e_acosf.c, sysdeps/m68k/fpu/e_fmodf.c,
	sysdeps/m68k/fpu/k_cosf.c, sysdeps/m68k/fpu/k_sinf.c,
	sysdeps/m68k/fpu/k_tanf.c, sysdeps/m68k/fpu/s_atanf.c,
	sysdeps/m68k/fpu/s_frexpf.c, sysdeps/m68k/fpu/s_ilogbf.c,
	sysdeps/m68k/fpu/s_isinff.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_modff.c: Include the corresponding double
	versions with appropriate definitions to get float functions,
	instead of defining them directly.

	* sysdeps/m68k/fpu/acos.c: File removed.
	* sysdeps/m68k/fpu/asin.c: File removed.
	* sysdeps/m68k/fpu/atan.c: File removed.
	* sysdeps/m68k/fpu/atan2.c: File removed.
	* sysdeps/m68k/fpu/atanh.c: File removed.
	* sysdeps/m68k/fpu/ceil.c: File removed.
	* sysdeps/m68k/fpu/cos.c: File removed.
	* sysdeps/m68k/fpu/cosh.c: File removed.
	* sysdeps/m68k/fpu/drem.c: File removed.
	* sysdeps/m68k/fpu/exp.c: File removed.
	* sysdeps/m68k/fpu/expm1.c: File removed.
	* sysdeps/m68k/fpu/fabs.c: File removed.
	* sysdeps/m68k/fpu/fl.h: File removed.
	* sysdeps/m68k/fpu/floor.c: File removed.
	* sysdeps/m68k/fpu/fmod.c: File removed.
	* sysdeps/m68k/fpu/frexp.c: File removed.
	* sysdeps/m68k/fpu/isinf.c: File removed.
	* sysdeps/m68k/fpu/isinfl.c: File removed.
	* sysdeps/m68k/fpu/isnan.c: File removed.
	* sysdeps/m68k/fpu/isnanl.c: File removed.
	* sysdeps/m68k/fpu/ldexp.c: File removed.
	* sysdeps/m68k/fpu/log.c: File removed.
	* sysdeps/m68k/fpu/log10.c: File removed.
	* sysdeps/m68k/fpu/log1p.c: File removed.
	* sysdeps/m68k/fpu/logb.c: File removed.
	* sysdeps/m68k/fpu/pow.c: File removed.
	* sysdeps/m68k/fpu/rint.c: File removed.
	* sysdeps/m68k/fpu/sin.c: File removed.
	* sysdeps/m68k/fpu/sinh.c: File removed.
	* sysdeps/m68k/fpu/sqrt.c: File removed.
	* sysdeps/m68k/fpu/tan.c: File removed.
	* sysdeps/m68k/fpu/tanh.c: File removed.

	* sysdeps/unix/sysv/linux/syscalls.list: Add select (the syscall name
	is _newselect).
	* sysdeps/unix/sysv/linux/select.S: File removed.

	* sysdeps/unix/sysv/linux/m68k/select.S: File removed; obsolete with
	current kernels, generic linux version is fine.
1996-06-06 05:23:42 +00:00
Roland McGrath f127cd28b5 Thu Jun 6 00:02:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* locale/Makefile: Add vpath for %.gperf to programs.

	* Make-dist (+tsrcs): Variable removed.
	(dist): Process $^ here instead of using $(+tsrcs).

	* sysdeps/unix/sysv/linux/Makefile (install-others): Don't set.
	($(includedir)/sys/syscall.h): Target removed.
	(sysdep_headers): Add syscall-list.h.
	($(objpfx)syscall-%.[dh]): New rule to build syscall-list.[dh].
	(generated): Add those.
	* sysdeps/unix/sysv/linux/syscall.h: Include <syscall-list.h>.

	* misc/sys/syscall.h: New file.
	* misc/Makefile (headers): Add sys/syscall.h.

	* sysdeps/unix/sysv/linux/i386/Makefile: Likewise.
1996-06-06 04:54:33 +00:00
Roland McGrath dfe1754a55 * time/tzfile.h, time/private.h, time/zdump.c, time/zic.c,
time/africa, time/asia, time/australasia, time/europe,
 	time/northamerica, time/southamerica: Updated from ADO 96h.

	* Make-dist (all-headers): Filter $(sysdep_headers) out of $(headers).
	(try-sysdeps, +sysdep-names): Check sysdeps/libm-ieee754 too.

	* Makerules (distinfo-vars): Add sysdep_headers.
	* sysdeps/unix/sysv/linux/Makefile (sysdep_headers): Append to
	this instead of $(headers).
	* sysdeps/unix/sysv/linux/alpha/Makefile: Likewise.

	* Make-dist [subdirs-dirs]: Don't prefix $(subdir-dirs) with
	$(subdir); we are already there.

	* sysdeps/unix/sysv/sysv4/solaris2/sparc/Dist: Removed.
1996-06-05 23:25:04 +00:00
Roland McGrath 92702b9197 Wed Jun 5 15:57:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules: Undo last change.
	(mach-generated): List .uh and .__h files only for $(user-interfaces),
	not for each .h in $(interface-headers); server-interfaces have no .uh
	or .__h files.


	* mach/Makefile (mach/mach_interface.defs): Renamed from
	mach_interface.defs.
Wed Jun  5 15:10:58 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Make-dist [subdir-dirs]: Set vpath for %, not just %.c.

	* locale/Makefile (subdir-dirs): New variable.

Wed Jun  5 00:01:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
1996-06-05 20:08:20 +00:00
Roland McGrath 63b129ed59 Wed Jun 5 15:57:28 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules: Undo last change.
	(mach-generated): List .uh and .__h files only for $(user-interfaces),
	not for each .h in $(interface-headers); server-interfaces have no .uh
	or .__h files.
1996-06-05 20:07:42 +00:00
Miles Bader c2bf8a5a23 (mach/mach_interface.defs): Renamed from mach_interface.defs. (mach/memory_object_user.defs): New variable. 1996-06-05 19:52:56 +00:00
Miles Bader b13aa0b866 *** empty log message ***
Wed Jun  5 15:42:51 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* mach/Machrules (%_server.uh, %_server.__h): New rules, so that the
	corrsponding .defs file with without the `_server' will be used.
	
	* mach/Makefile (mach/mach_interface.defs): Renamed from mach_interface.defs.
	(mach/memory_object_user.defs): New variable.
1996-06-05 19:51:36 +00:00
Roland McGrath df7c0d2312 Wed Jun 5 15:10:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Make-dist [subdir-dirs]: Set vpath for %, not just %.c.
1996-06-05 19:22:44 +00:00
Roland McGrath aa592a63f9 * Makerules (distinfo-vars): Add sysdep_routines.
* mach/Machrules (include-%.defs): New canned sequence.
	Change all uses of `#include <$*.defs>' in cmds to use it.
	* mach/Makefile (mach_interface.defs): New variable, set to mach.defs.

	* sysdeps/i386/dl-machine.h (elf_machine_rel): Handle RESOLVE being
	null in all cases but R_386_COPY.
	(elf_machine_rel):

	* sysdeps/unix/bsd/ultrix4/mips/Dist: Updated.
	* sysdeps/unix/bsd/ultrix4/Dist: Removed.
	* sysdeps/unix/sysv/sysv4/Dist: Updated.
	* sysdeps/unix/sysv/sco3.2.4/Dist: Removed.
	* sysdeps/unix/sysv/irix4/Dist: Updated.
	* sysdeps/unix/sysv/linux/i386/Dist: Removed.
	* sysdeps/unix/sysv/Dist: Updated.
	* sysdeps/unix/bsd/sun/sunos4/Dist: Removed.
	* sysdeps/unix/bsd/sony/newsos4/Dist: Removed.
	* sysdeps/gnu/Dist: New file.
	* sysdeps/alpha/Dist: Updated.
	* sysdeps/mach/hurd/Dist: Updated.

	* Make-dist [subdir-dirs]: Set a vpath for %.c.

	* Make-dist (README): Fix typo in cvs cmd.
1996-06-05 19:07:37 +00:00
Roland McGrath 198046e105 Regenerated: autoconf sysdeps/mach/hurd/configure.in 1996-06-05 05:09:56 +00:00
Per Bothner caa9e37aab * config.guess: Combine mips-mips-riscos cases, and use cpp to distinguish sysv/svr4/bsd variants. 1996-06-05 04:12:46 +00:00
Roland McGrath 1c384dcd5f Wed Jun 5 00:01:19 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): Fix typos in last change.
	Comment out ref to nonexistent _dl_close.
1996-06-05 04:03:34 +00:00
Roland McGrath 58e071515a * math/Makefile (libm-support, libm-calls): New variables.
(libm-routines): Construct this from those.
	(calls): New variable.
	(routines): Construct this from it.

	* resolv/res_debug.c: Add missing #include <ctype.h>.

	* sysdeps/unix/getlogin.c: Must pass struct utmp ptr to getutline_r.
	* sysdeps/unix/getlogin_r.c: Likewise.

	* sysdeps/libm-ieee754/w_hypotl.c: Fix typo.

	* sysdeps/libm-ieee754/w_cabsl.c: __cabsl_complex -> __cabs_complexl

	* math/Makefile (long-m-routines): Define recursive variable as
	$(long-m-$(long-double-fcts)).
	(long-m-yes): Put list of routines here.
	(long-c-routines, long-c-yes): Likewise.

	* sysdeps/unix/sysv/linux/schedbits.h: File removed.

	* sysdeps/i386/Makefile (long-double-fcts): New variable, set to yes.
	* sysdeps/m68k/Makefile: Likewise.

	* math/Makefile [$(long-double-fcts)!=yes] (CPPFLAGS): Append
 	-DNO_LONG_DOUBLE.
1996-06-05 03:29:45 +00:00
Roland McGrath ee188d555b Tue Jun 4 21:01:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getlogin_r.c: New file.

Wed Jun  5 02:11:30 1996  Ulrich Drepper  <drepper@cygnus.com>

	* io/Makefile (routines): Add ttyname_r.

	* resolv/res_debug.c, resolv/resolv.h: Update from bind-4.3.4-T4A.

	* sysdeps/libm-i387/e_asinl.S, sysdeps/libm-i387/e_atan2l.S,
	sysdeps/libm-i387/e_expl.S, sysdeps/libm-i387/e_fmodl.S,
	sysdeps/libm-i387/e_log10l.S, sysdeps/libm-i387/e_logl.S,
	sysdeps/libm-i387/e_remainderl.S, sysdeps/libm-i387/e_scalbl.S,
	sysdeps/libm-i387/e_sqrtl.S, sysdeps/libm-i387/s_atanl.S,
	sysdeps/libm-i387/s_cosl.S, sysdeps/libm-i387/s_ilogbl.S,
	sysdeps/libm-i387/s_log1pl.S, sysdeps/libm-i387/s_logbl.S,
	sysdeps/libm-i387/s_scalbnl.S, sysdeps/libm-i387/s_sinl.S,
	sysdeps/libm-i387/s_tanl.S: New files.  i387 assembler versions
	of `long double' math functions.

	* sysdeps/libm-ieee754/k_standard.c: Add handling for errors
	in long double functions.

	* sysdeps/libm-ieee754/s_ilogbl.c, sysdeps/libm-ieee754/s_logbl.c,
	sysdeps/libm-ieee754/s_modfl.c:  New files.  Generic versions
	of `long double' math functions.

	* sysdeps/libm-ieee754/s_isinf.c [NO_LONG_DOUBLE]: Add string
        alias for __isinfl.

	* sysdeps/libm-ieee754/w_acoshl.c, sysdeps/libm-ieee754/w_acosl.c,
	sysdeps/libm-ieee754/w_asinl.c, sysdeps/libm-ieee754/w_atan2l.c,
	sysdeps/libm-ieee754/w_atanhl.c, sysdeps/libm-ieee754/w_cabsl.c,
	sysdeps/libm-ieee754/w_coshl.c, sysdeps/libm-ieee754/w_dreml.c,
	sysdeps/libm-ieee754/w_expl.c, sysdeps/libm-ieee754/w_fmodl.c,
	sysdeps/libm-ieee754/w_gammal.c, sysdeps/libm-ieee754/w_gammal_r.c,
	sysdeps/libm-ieee754/w_hypotl.c, sysdeps/libm-ieee754/w_j0l.c,
	sysdeps/libm-ieee754/w_j1l.c, sysdeps/libm-ieee754/w_jnl.c,
	sysdeps/libm-ieee754/w_lgammal.c, sysdeps/libm-ieee754/w_lgammal_r.c,
	sysdeps/libm-ieee754/w_log10l.c, sysdeps/libm-ieee754/w_logl.c,
	sysdeps/libm-ieee754/w_powl.c, sysdeps/libm-ieee754/w_remainderl.c,
	sysdeps/libm-ieee754/w_scalbl.c, sysdeps/libm-ieee754/w_sinhl.c,
	sysdeps/libm-ieee754/w_sqrtl.c: New files.  Wrapper functions
	around long double function implementations.

	* sysdeps/posix/ttyname_r.c (ttyname_r): Use _D_EXACT_NAMLEN
	to determine length of directory entry name.

	* posix/Makefile (routines): Add getlogin_r.
	* posix/unistd.h: Add prototype for getlogin_r.
	* sysdeps/stub/getlogin_r.c: New file.  Reentrant version of
	getlogin function, specified in P1003.1c/D6.  Stub version.
	* sysdeps/unix/getlogin.c (getlogin): Use ttyname_r instead of
	ttyname.  This avoids saving and restoring the old content.
	Also use setutent_r, getutline_r and endutent_r instead of
	accing UTMP file directly.
	* sysdeps/unix/getlogin_r.c: New file.  Reentrant version of
	getlogin function, specified in P1003.1c/D6.

Tue Jun  4 20:10:09 1996  J.T. Conklin  <jtc@cygnus.com>

	* sysdeps/libm-i387/s_finitef.S: Fix mask for exponent.

	* elf/dl-lookup.c (_dl_lookup_symbol): Grok magical undefined symbols
	_GNU_libc_dl_{open,close,symbol} and resolve them to dl functions.

	* elf/rtld.c (rtld_map): Renamed to _dl_rtld_map, made global.
	* elf/link.h: Declare _dl_rtld_map.

	* elf/dl-lookup.c (_dl_symbol_value): New function.
	* elf/link.h: Declare it.

	stdio-common/vfscanf.c: Prepare for reentrant libio.
	Used in reentrant libio.
1996-06-05 01:07:21 +00:00
Roland McGrath f68b86cc7b Tue Jun 4 18:57:57 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dladdr.c: Remove #include <setjmp.h>, we don't use it.

	* shlib-versions: Set libdl=2.

	* elf/dl-deps.c (_dl_map_object_deps): Use a linked list of alloca'd
 	elements and then scan it to fill the single malloc'd array, instead
 	of using realloc to grow the array in the first pass.  _dl_map_object
	may do some mallocs that break our stream of reallocs, and the minimal
	realloc can't handle that.

	* elf/dl-init.c (_dl_init_next): Take argument, link_map whose
 	searchlist describes the piece of the DT_NEEDED graph to be
 	initialized.
	* elf/link.h: Update prototype.
	* sysdeps/i386/dl-machine.h (RTLD_START): Pass _dl_loaded as argument
	to _dl_init_next.
	* sysdeps/m68k/dl-machine.h: Likewise.
	* elf/dl-deps.c (_dl_open): Pass new object as arg to _dl_init_next.

	* elf/link.h (struct link_map): Add `l_reserved' member, soaking up
	extra bits in last byte.
	* elf/dl-deps.c (_dl_map_object_deps): Use that for mark bit to avoid
	putting dup elts in search list.

	* elf/dlclose.c: Use MAP->l_searchlist to find deps to close.

	* elf/dlsym.c: Don't tweak linked list.  Scope array given to
	_dl_lookup_symbol does the right thing.
Tue Jun  4 02:25:44 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>
1996-06-04 23:06:02 +00:00
Roland McGrath 14d898aef6 * elf/Makefile (subdir_lib): Change this target to lib-noranlib.
(lib-noranlib): Depend on on $(extra-objs).

	* errno.h: Move __END_DECLS out of #ifdef's so it matches
	__BEGIN_DECLS.
1996-06-04 20:14:46 +00:00
Roland McGrath a2b934be25 * stdio-common/vfprintf.c [USE_IN_LIBIO] (size_t): Don't define as
macro.  _IO_size_t is just an alias for the real size_t anyway.

	* elf/Makefile (libdl-routines): Add dladdr.
	* elf/dladdr.c: New file.
	* elf/dlfcn.h (Dl_info): New typedef.
	(dladdr): Declare it.
1996-06-04 09:29:39 +00:00
Roland McGrath 55f3aaff8c * sysdeps/libm-i387/s_finite.S: Use setne' instead of setnel'. 1996-06-04 06:56:47 +00:00
Roland McGrath fa00327fbf * sysdeps/libm-i387/s_finite.S: Use %eax instead of %al in setnel insn.
* intl/l10nflist.c: Fix conditional on #include <argz.h>.

	* libio/stdio.h (FOPEN_MAX, FILENAME_MAX, TMP_MAX, L_tmpnam): Macros
	removed.  Instead, include <stdio_lim.h>.

	* libio/_G_config.h: New file.
	* libio/Makefile (headers): Add _G_config.h.

	* MakeTAGS (po/errlist.pot): Extract from sysdeps/gnu/errlist.c.
1996-06-04 06:48:18 +00:00
Roland McGrath bf18dbd7fa * sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Define
this macro too; current Linux kernels test that instead of
	_LINUX_TYPES_DONT_EXPORT.
1996-06-04 05:33:32 +00:00
Roland McGrath efec1d0c47 Tue Jun 4 02:25:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/linux-compat.c (_init): Pass reloc_addr arg to _dl_lookup_symbol.

	* elf/dl-lookup.c (_dl_lookup_symbol): Use l_searchlist.

	* elf/dl-deps.c: New file.
	* elf/Makefile (rtld-routines): Add dl-deps.
	* elf/link.h: Declare _dl_map_object_deps, _dl_open.
	* elf/rtld.c (dl_main): Use _dl_map_object_deps.
	* elf/dlopen.c: Use _dl_open.

	* elf/rtld.c (dl_main): Remove BEFORE_RTLD variable and list
	frobnication based on its value.  Detach RTLD_MAP from the chain if
	its l_opencount is zero after loading deps.

	* elf/dlfcn.h (RTLD_BINDING_MASK): New macro.

	* elf/link.h (struct link_map): Replace l_deps_loaded flag member with
	`struct link_map **l_searchlist' and `unsigned int l_nsearchlist'.
	* elf/dl-lookup.c (_dl_lookup_symbol): Make SYMBOL_SCOPE arg an array
	of two link_map ptrs.  Search the maps in the l_searchlist of each
	elt that is not null.
	* elf/dl-reloc.c (_dl_relocate_object): Pass proper SCOPE array.
	* elf/dl-runtime.c: Likewise.
	* elf/dlsym.c: Likewise.
	* elf/rtld.c (dl_main): Likewise.

	* elf/dl-minimal.c (realloc): Support realloc of the block most
	recently returned by the minimal malloc.

	* intl/localealias.c, intl/dcgettext.c [_LIBC]: Define HAVE_ALLOCA.
1996-06-04 05:18:15 +00:00
Roland McGrath b25ae9c6a4 Tue Jun 4 00:16:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/gnu/errlist.awk: Produce N_("..."), not _N("...").

	* intl: Updated from gettext-0.10.13.
	* intl/localealias.c intl/dcgettext.c [_LIBC]: Define HAVE_ALLOCA.

	* signal/siggetmask.c: New file.  Wrapper around sigblock with
	link_warning about obsolescence.
	* signal/Makefile (routines): Add siggetmask.

	* sysdeps/gnu/errlist.awk: New file, adapted from ...
	* sysdeps/mach/hurd/errlist.awk: File removed, above file replaces it.
	* sysdeps/mach/hurd/Makefile (errlist.c): Target removed.
	* sysdeps/gnu/Makefile: New file.
	(sysdeps/gnu/errlist.c): Make the errlist.c generation rule into this.

	* manual/errno.texi (Error Codes): Add placeholder items for missing
	Linux/i386 errno codes, with perror text but no documentation.
	Some existing perror texts changed.
1996-06-04 01:41:11 +00:00
Roland McGrath 5f2eab4263 Mon Jun 3 21:03:54 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* malloc/mcheck.c (freehook, reallochook): Handle null pointer args.

	* hurd/hurdsig.c (_hurd_internal_post_signal): When setting ACT to
	`ignore, resume the thread if SS_SUSPENDED, regardless of old action.

Sun Jun  2 20:14:30 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* locale/programs/linereader.c (lr_open): Don't pass NULL to
	xstrdup; fix memory leak.
	(lr_close): Fix memory leak.

	* hurd/hurdsig.c (_hurd_internal_post_signal): When turning the action
Mon Jun  3 01:29:53 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* elf/link.h (struct link_map): Replace l_deps_loaded flag member with
	`struct link_map **l_searchlist'.
	* elf/dl-lookup.c (_dl_lookup_symbol): Make SYMBOL_SCOPE arg an array
	of two link_map ptrs.  Search the maps in the l_searchlist of each
	of the two elts that is non-null.
	* elf/dl-reloc.c (_dl_relocate_object): Pass proper SCOPE array.
	* elf/dl-runtime.c: Likewise.
	* elf/dlsym.c: Likewise.
	* elf/rtld.c (dl_main): Likewise.
1996-06-03 22:46:17 +00:00
Roland McGrath 20328c3962 Sun Jun 2 20:14:30 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* locale/programs/linereader.c (lr_open): Don't pass NULL to
	xstrdup; fix memory leak.
	(lr_close): Fix memory leak.
1996-06-03 21:00:49 +00:00
Thomas Bushnell, BSG 9f195df2d7 *** empty log message ***
Mon Jun  3 15:58:22 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* hurdsig.c (_hurd_internal_post_signal): When turning the action
 	for a HANDLE signal to IGNORE because the signal is blocked, clean
 	up any pending suspension left over from a call to resume.
1996-06-03 19:59:45 +00:00
Thomas Bushnell, BSG ec737e4210 (_hurd_internal_post_signal): When turning the action for a HANDLE signal to IGNORE because the signal is blocked, clean up any pending suspension left over from a call to resume. 1996-06-03 19:57:01 +00:00
Karl Heuer b687dfbdca (*:Linux:*:*): Add guess for sparc-unknown-linux. 1996-06-03 12:51:33 +00:00
Roland McGrath 710f7bab59 Mon Jun 3 00:30:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/dl-lookup.c (_dl_lookup_symbol): Take new arg RELOC_ADDR and
	don't allow a defn resolving to that address.
	* elf/link.h: Update prototype and comment.
	* elf/dl-runtime.c (fixup): Define local `resolve' function and pass
	it to elf_machine_relplt.
	* elf/dl-reloc.c (_dl_relocate_object: resolve): Take new arg
	RELOC_ADDR and pass it through to _dl_lookup_symbol.
	* elf/do-rel.h (elf_dynamic_do_rel): Pass RESOLVE to elf_machine_rel
	instead of calling it ourselves and passing its results.
	(elf_dynamic_do_rel): RESOLVE fn takes new arg RELOC_ADDR.
	* elf/rtld.c (dl_main): Pass 0 for RELOC_ADDR to _dl_lookup_symbol.
	* sysdeps/i386/dl-machine.h (elf_machine_rel): Remove SYM_LOADADDR
	arg.  Add RESOLVE function ptr arg.  Call *RESOLVE as necessary.
	* sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise.
	* sysdeps/stub/dl-machine.h: Likewise.

	* csu/initfini.c (_fini): Add extern decl for i_am_not_a_leaf.

	* elf/dlfcn.h (dl_open_mode): Enumerated type removed.
	(RTLD_LAZY, RTLD_NOW): Define these as macros instead.
	(RTLD_GLOBAL): New macro.
	(dlopen): Take arg of type int instead of dl_open_mode.
	* elf/dlopen.c: Likewise.

	* math/math.h (_Mldbl): New macro, either produces L suffix or not.
	(M_*): Use it for these constants.
1996-06-03 04:46:40 +00:00
Roland McGrath 6c03c2cf27 * elf/dl-lookup.c (_dl_lookup_symbol): Arg NOSELF renamed to NOPLT.
Reject SHN_UNDEF defns iff NOPLT is nonzero.
	* elf/link.h (_dl_lookup_symbol): Update prototype and comment.
	* elf/dl-runtime.c (fixup): Pass 1 to _dl_lookup_symbol for NOPLT.
	* elf/dlsym.c (dlsym): Pass 0.
	* elf/rtld.c (dl_main): Likewise.
	* elf/dl-reloc.c (_dl_relocate_object: resolve): Second arg R_OFFSET
	replaced with NOPLT flag.  Pass it through to _dl_lookup_symbol.
	* elf/do-rel.h (elf_dynamic_do_rel): Update prototype of RESOLVE arg.
	Pass `elf_machine_pltrel_p (R->r_type)' result as NOPLT flag value.
	* sysdeps/i386/dl-machine.h (elf_machine_pltrel_p): New macro.
	* sysdeps/m68k/dl-machine.h (elf_machine_pltrel_p): Likewise.
	* sysdeps/stub/dl-machine.h (elf_machine_pltrel_p): Likewise.
1996-06-02 21:35:43 +00:00
Roland McGrath 9004bc202e Sun Jun 2 14:56:49 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* login/pututline_r.c: Fix typo in sizeof for DATA_TMP alloca.

	* sysdeps/generic/gnu/types.h (__clock_t): New type.

	* sysdeps/unix/sysv/linux/gnu/types.h (__clock_t, __fsid_t): Define
	using kernel types.
	* time/time.h (clock_t): Include <gnu/types.h> and define using
	__clock_t.
1996-06-02 19:47:36 +00:00
Roland McGrath 847242451c Wed May 29 00:57:37 1996 David Mosberger-Tang <davidm@azstarnet.com>
* time/Makefile (tests): Add test-tz.

	* time/test-tz.c: New test.

	* time/clocktest.c: Rewrite to test more meaningfully.

	* sysdeps/unix/sysv/linux/syscalls.list: Add bdflush,
 	create_module, delete_module, get_kernel_syms, init_module,
 	klogctl.

	* sysdeps/unix/sysv/linux/sys/param.h (MAXSYMLINKS): Define as 5
	instead of SYMLOOP_MAX, which is nowhere to be found.

	* sysdeps/unix/sysv/linux/sys/msq_buf.h,
 	sysdeps/unix/sysv/linux/sys/sem_buf.h,
 	sysdeps/unix/sysv/linux/sys/shm_buf.h [__USE_MISC]: Add more
 	control ops and datastructures.

	* sysdeps/unix/sysv/linux/sys/io.h: New file declaring low-level
 	I/O related functions.

	* sysdeps/unix/sysv/linux/sys/kdaemon.h: New file declaring kernel
	daemon related functions/operations.

	* sysdeps/unix/sysv/linux/sys/klog.h: New file declaring kernel
	logging related functions/operations.

	* sysdeps/unix/sysv/linux/sys/module.h: New file declaring kernel
	module related functions/operations.

	* sysdeps/unix/sysv/linux/speed.c: Only do "mention this twice" hack
	for non-Alpha based Linux systems.

	* sysdeps/unix/sysv/linux/alpha/speed.c: Remove.

	* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/module.h,
	sys/io.h, sys/klog.h, and sys/kdaemon.h.

	* sysdeps/unix/sysdep.h (END): Define empty END macro for
 	platforms that don't need some sort of end directive at the
	end of functions.

	* sysdeps/unix/make-syscalls.sh: Emit END($strong) at end of
 	syscall wrapper to allow correct generation of debugging
 	information.

	* sysdeps/unix/alpha/sysdep.h (END): Redefine to use .end
 	directive for both ELF and ECOFF.
	(ret): Delete macro.  It was a dangerous macro and unnecessary
 	since the Alpha assemblers recognizes "ret" as a macro themselves.

	* sysdeps/gnu/utmpbits.h (struct utmp): Move ut_tv behind
 	ut_session to guarantee long alignment.  This is important for
 	Linux/Alpha since ut_tv.tv_sec is 32 bits and time_t is 64 bits.
  	This will all get cleaned up as programs start to use ut_tv
 	instead ut_time.

	* sysdeps/alpha/divrem.h: Include <sysdep.h> instead of <*/regdef.h>.

	* sysdeps/alpha/bsd-_setjmp.S (setjmp): Renamed entry point to
	_setjmp.

	* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
 	sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/bsd-setjmp.S,
 	sysdeps/alpha/copysign.S, sysdeps/alpha/divrem.h,
 	sysdeps/alpha/fabs.S, sysdeps/alpha/ffs.S, sysdeps/alpha/htonl.S,
 	sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
 	sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/llseek.S,
 	sysdeps/unix/sysv/linux/alpha/pipe.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/sysdep.S: Use END macro instead of
 	.end directive.

	* csu/initfini.c (_fini): Tell gcc that _fini is not a leaf
 	function by having it contain a dummy function call.

	* configure.in (config_machine): Don't make ELF the default for
 	Linux/Alpha just yet (use --with-elf instead).
	(.init/.fini check): Generate .text to ensure function start and
 	end are in same section.

	* sysdeps/unix/bsd/osf/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/brk.S (__curbrk): Store the entire
 	break value, not just the low 32 bits to accomodate large
 	memories.

Tue May 28 10:46:04 1996  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/alpha/brk.S: Rather than attempt to
	dynamically resolve _end for initializing __curbrk, support the
	brk(0) query idiom.

	* sysdeps/alpha/bb_init_func.S: Don't make `init' an external symbol.

	* sysdeps/alpha/bsd-_setjmp.S: The function is _setjmp not setjmp.

Sun May 26 22:17:38 1996  Richard Henderson  <rth@tamu.edu>

	* stdlib/lcong48_r.c, stdlib/seed48_r.c, stdlib/strtod.c,
	stdlib/strtol.c: Include <string.h> for mem* and str* fns used.

Thu May 23 02:15:56 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/Makefile (headers): Add sys/io.h,
 	sys/klog.h, and sys/kdaemon.h.

	* sysdeps/unix/sysv/linux/sys/io.h: New file.
	* sysdeps/unix/sysv/linux/sys/klog.h: Ditto.
	* sysdeps/unix/sysv/linux/sys/kdaemon.h: Ditto.

	* sysdeps/unix/alpha/sysdep.h (ret): Remove macro.  It is
 	dangerous and unnecessary since both OSF/1 as and gas define "ret"
 	as a pseudo-instruction.

Sat Jun  1 17:18:21 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/tzset.c (__tzset): Clear tz_rules name pointers after freeing
	them.  Bug found by David Mosberger-Tang.

	* sysdeps/posix/tempname.c (__stdio_gen_tempname): Use __ptr_t instead
	of PTR.

	* extra-lib.mk (extra-objs): Use patsubst intead of $(A:=B) syntax
	to work around Make bug when A contains var ref.

Fri May 31 18:27:52 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* string/string.h [__USE_MISC]: Declare basename; OSF/1 puts it here.

	* sysdeps/unix/sysv/linux/syscalls.list (getpgid, setpgid): Define __
	strong names and [gs]etpgid as weak aliases.

	* math/math_private.h (GET_LDOUBLE_EXP): Add missing backslash.
1996-06-02 18:50:07 +00:00
Roland McGrath 76060ec0b8 Thu May 30 11:24:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* po/header.pot: Replace with exact boilerplate pinard dictates.

	* sysdeps/i386/strtok.S (Lillegal_argument): Remove this code to set
	errno and the check that jumped to it.

	* sysdeps/mach/hurd/Makefile (errnos.d): Use $(sed-remove-objpfx).

Thu May 30 03:21:57 1996  Ulrich Drepper  <drepper@cygnus.com>

	* FAQ: Document need of gperf program for developers.

	* elf/elf.h: Fix typos in comments.

	* libio/stdio.h [!__STRICT_ANSI__ || _POSIX_SOURCE]: Add
        prototypes for `ctermid' and `cuserid'.

	* locale/programs/locale.c: Switch to user selected locale
	before printing variables.

	* math/Makefile [$(long-double-fcts)==yes]: Define long-m-routines
        and long-c-routines.  Only if the `long double' data type is
        available we need to compile the functions.
	(libm-routines): Add $(long-m-routines).
	(routines): Remove isinfl, isnanl.  Use new file s_isinfl and
	s_isnanl instead if `long double' is available.

	* math/math.h: Include <mathcalls.h> again to define `long double'
        functions.

	* math/math_private.h: Define data types, prototypes and access
        macros for `long double'.

	* stdlib/stdlib.h: Add prototypes for `strtoll' and `strtoull'.
	[GCC2 && OPTIMIZE]: Define strto{,u}ll as inline function which
	calls __strto{,u}q_internal.

	* stdlib/strfmon.c: Replace PTR by `void *'.

	* stdlib/strtoq.c: Define strtoll as weak alias.
	* stdlib/strtouq.c: Define strtoull as weak alias.

	* string/tester.c: Correct `strsep' test.

	* sysdeps/generic/strsep.c: Make compatible with BSD version.
        Trailing characters of skip set are not skipped.  In this case
        empty tokens are returned.

	* sysdeps/i386/isinfl.c, sysdeps/i386/isnanl.c,
        sysdeps/ieee754/isinf.c, sysdeps/ieee754/isinfl.c,
        sysdeps/ieee754/isnan.c, sysdeps/ieee754/isnanl.c: Removed.  We
        now use the versions part of libm.

	* sysdeps/i386/strsep.S: Removed.  Generic C version is of
	similar speed.
	* sysdeps/i386/strtok.S: Remove support for `strsep'.

	* sysdeps/libm-i387/e_acosl.S, sysdeps/libm-i387/s_ceill.S,
        sysdeps/libm-i387/s_copysignl.S, sysdeps/libm-i387/s_finitel.S,
        sysdeps/libm-i387/s_floorl.S, sysdeps/libm-i387/s_isinfl.c,
        sysdeps/libm-i387/s_isnanl.c, sysdeps/libm-i387/s_nextafterl.c,
        sysdeps/libm-i387/s_rintl.S, sysdeps/libm-i387/s_significandl.S:
        New i387 specific math functions implementing `long double'
        versions.

	* sysdeps/libm-ieee754/s_ceill.c,
        sysdeps/libm-ieee754/s_copysignl.c,
        sysdeps/libm-ieee754/s_fabsl.c, sysdeps/libm-ieee754/s_finitel.c,
        sysdeps/libm-ieee754/s_floorl.c, sysdeps/libm-ieee754/s_isinfl.c,
        sysdeps/libm-ieee754/s_isnanl.c,
        sysdeps/libm-ieee754/s_nextafterl.c,
        sysdeps/libm-ieee754/s_rintl.c, sysdeps/libm-ieee754/s_scalbnl.c,
        sysdeps/libm-ieee754/s_significandl.c: New generic `long double'
        versions of libm functions.

	* sysdeps/libm-i387/e_exp.S: Add a few comments to explain the
        Intel FPU nonsense.

	* sysdeps/libm-i387/s_ceil.S, sysdeps/libm-i387/s_ceilf.S,
        sysdeps/libm-i387/s_floor.S, sysdeps/libm-i387/s_floorf.S: Correct
        handling of local variables.  The old version created a stack
        frame but stored the values outside.

	* sysdeps/libm-ieee754/s_isinf.c, sysdeps/libm-ieee754/s_isnan.c
        [!NO_LONG_DOUBLE]: Define alias with `long double' versions name.

	* login/pututline_r.c: Include sys/stat.h.  Fix typos.

        according to currently used locale for category LC_CTYPE by
	inet_nsap_ntoa.  Now in <arpa/inet.h>.
        _IO_dup2 to contain complete parameter list.
1996-05-30 16:12:42 +00:00
Roland McGrath c3352e6233 Wed May 29 12:53:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* version.h (VERSION): Set to 1.90.

	* Makerules (distinfo-vars): Write extra-libs and *-routines for each
	of its elts.
	* MakeTAGS (sources): Add those sources.

	* MakeTAGS (all-sources): Add $(others:=.c) and $(tests:=.c).

Wed May 29 08:53:08 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/report-wait.c (_S_msg_report_wait): Return `itimer' for the
	itimer thread.

	* hurd/hurdinit.c (_hurd_init): Set _HURDSIG_TRACED before calling
	_hurd_proc_init.

	* string/tester.c (main): Fix strsep tests 6, 7, 20 to expect null
 	token instead of it being implicitly skipped.
1996-05-29 17:50:37 +00:00
Roland McGrath 8d6108c3db Regenerated from source files 1996-05-29 17:04:16 +00:00
zippy 7f8b77039d Copied from /com/share/ftp/gnu/po/maint/glibc 1996-05-29 16:40:45 +00:00
Miles Bader d545ee47a2 (_hurd_init): Set _HURDSIG_TRACED before calling _hurd_proc_init. 1996-05-29 14:05:50 +00:00
Roland McGrath 77aae36646 * sysdeps/i386/fpu/__math.h (logb): Correct contraint from =u to =t.
Must operate on top of fp reg stack, not second from top.
1996-05-29 05:12:55 +00:00
Roland McGrath d06b536dc1 Wed May 29 00:52:20 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* extra-lib.mk (alltypes-$(lib)): Don't append $(objpfx)$(lib).so.
	(others): Instead, make this depend on it.
1996-05-29 05:09:31 +00:00
Roland McGrath 0200214b28 Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6.  A 31-bit ISO 10646
	character in UTF-8 encoding has that many bytes.

	* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
	* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
	* locale/Makefile (routines): Add mb_cur_max.
	* locale/mb_cur_max.c: New file.  This function gets called
	when the macro MB_CUR_MAX is used.
	* locale/C-ctype.c: Initialize new mb_cur_max field.
	* locale/localeinfo.h: Change magic value because of incompatible
        change.
	* locale/programs/ld-ctype.c: Determine value of mb_cur_max
        according to current character set and write it out with the rest.
	* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore.  Get value
        according to currently used locale for catefory LC_CTYPE by
        calling the function __ctype_get_mb_cur_max.

Tue May 28 03:27:46 1996  Ulrich Drepper  <drepper@cygnus.com>

	* FAQ:  Fix some typos.
	Tell that for Linux the kernel header files are necessary.

	* PROJECTS: New file.  List of open jobs for glibc.
	* Makefile (distribute): Add PROJECTS.

	* crypt/GNUmakefile (headers): New variable.  Mention crypt.h.
	* crypt/crypt.h: Header for crypt functions.

	* elf/elf.h: Add some new constants from recent Cygnus ELF
	header files.

	* login/getutid_r.c: Test for correct type.
	Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
	_HAVE_UT_ID resp. are defined.
	Make really compliant with specification.

	* login/getutline_r.c, login/pututline_r.c: Don't depend on
	ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
	defined.
	Make really compliant with specification.

	* login/setutent_r.c: Don't depend on ut_type and ut_id unless
	_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.

	* login/login.c, login/logout.c, login/logwtmp.c: Complete
	rewrite.  Now based on getut*/setut* functions.

	* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
	This prevented using this file in other GNU packages.

	* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
	and _HAVE_UT_TV because struct utmp has these members.

	* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.

	* utmp.h: New file.  Wrapper around login/utmp.h.

	* elf/dl-error.c (struct catch): New type.
	(catch): New static variable, struct catch *.
	(catch_env, signalled_errstring, signalled_objname): Variables removed.
	(_dl_signal_error): If CATCH is non-null, set its errstring and
	objname members and jump to CATCH->env.  If it is null, call
	_dl_sysdep_fatal with a standard message.
	* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
	No longer use _dl_catch_error.
1996-05-29 04:48:04 +00:00
Roland McGrath 215dbbb150 Tue May 28 13:11:19 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (sed-remove-objpfx): Avoid extra space in regexp due to
	continuation line.

	* sysdeps/unix/sysv/linux/i386/socket.S: Fix off-by-one error in
	setting %ecx to 2nd syscall arg: we have pushed nothing, so function
	args are found at 4(%esp), not 8(%esp).
1996-05-28 17:54:52 +00:00
Roland McGrath 13a0be8823 * Makefile ($(includedir)/stubs.h): Add missing backslash. 1996-05-28 00:10:40 +00:00
Roland McGrath 2a4dcf76ca * sysdeps/unix/sysv/linux/i386/brk.c (__curbrk): Initialize it so it
can be aliased.
1996-05-27 20:43:56 +00:00
Roland McGrath 807912915b * sysdeps/unix/sysv/linux/Makefile [$(subdir)=termios] (headers):
Append termio.h.

	* Makefile ($(includedir)/stubs.h): Print a msg if we do nothing.

	* misc/sgtty.h: Add forward decl of struct sgttyb in case it is never
	defined.

	* sysdeps/unix/sysv/linux/termio.h: New file.
	* sysdeps/unix/sysv/linux/Dist: Add it.

	* sysdeps/unix/sysv/linux/ioctl-types.h: New file, wrapper around
	kernel header <asm/termios.h>.

	* misc/Makefile (headers): Add ioctl-types.h.
	* sysdeps/generic/ioctl-types.h: New file.
	* misc/sys/ioctl.h: Include <ioctl-types.h>.
	(struct tchars, struct ltchars, struct sgttyb, struct winsize,
	struct ttysize): Types moved there.
1996-05-27 20:16:19 +00:00
Roland McGrath d36e769230 * Makefile ($(includedir)/stubs.h): Don't touch target if new one is
identical.
1996-05-27 19:19:29 +00:00
Roland McGrath 4e395306e8 Mon May 27 10:10:00 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/Makefile (z.% rule): Generate generic zone%/ rule after
	zone%/right/ and zone%/posix/ rules so they match first.
1996-05-27 14:11:05 +00:00
Roland McGrath 5f160cde27 * features.h [_GNU_SOURCE] (_BSD_SOURCE, _SVID_SOURCE,
_POSIX_SOURCE, _POSIX_C_SOURCE): Define these.
1996-05-27 02:18:37 +00:00
Roland McGrath e463fcfba1 * features.h [_GNU_SOURCE || _BSD_SOURCE || _SVID_SOURCE ||
_POSIX_SOURCE || _POSIX_C_SOURCE]: #undef __STRICT_ANSI__.
1996-05-26 22:58:11 +00:00
Roland McGrath 71a40c7471 * time/Makefile (tzcompile): Add missing backslash.
* wctype/wctype.h (__need_wint_t): Define this and include stddef.h.
	[! _WINT_T] (wint_t): Conditionalize typedef on this in case pre-2.7.3
	stddef.h doesn't define it.
	* wcsmbs/wchar.h: Likewise.
	* stdlib/strtod.c: Likewise.

	* wcsmbs/wcstok.c: Fix argument name typo.
1996-05-26 22:09:13 +00:00
Roland McGrath 59dd864187 Sun May 26 15:15:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/ldiv.c: Deansideclized.

Sun May 26 19:39:53 1996  Ulrich Drepper  <drepper@cygnus.com>

	* intl/loadmsgcat.c (_nl_load_domain): Test correct variable
	after malloc.

	* string/Makefile (tester-ENV): New variable to suppress message
 	translation in test.

	* string/tester.c: Add tests for strtok_r and strsep.

	* sysdeps/i386/i486/strcat.S: Correct some more 8bit operation
	<-> 32 bit operand conflicts.

	* sysdeps/i386/strsep.S: Wrapper around <sysdeps/i386/strtok.S>
	to produce strsep function.
	* sysdeps/i386/strtok.S: Optimized implementation of strtok
	function.
	* sysdeps/i386/strtok_r.S: Wrapper around <sysdeps/i386/strtok.S>
	to produce strtok_r function.

	* sysdeps/generic/strtok.c: Moved here from string/strtok.c.
	Corrected example in comment.

	* string/Makefile (routines): Add strtok_r.
	* sysdeps/generic/strtok_r.c: New file.  Implement reentrant version
	of strtok_r.
	* string/string.h: Add prototype for strtok_r.
	* wcsmbs/wcstok.c: Handle illegal SAVE_PTR argument the same
	as in strtok_r.

Sun May 26 13:28:23 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* time/tzset.c (__tzset): Ignore leading : in $TZ; always try tzfile
	first and fall back to 1003.1 syntax only if it fails.

	* time/Makefile (install-others): Also install posix/ZONE and
	right/ZONE for each ZONE in $(zonenames).
	(z.% rule): Generate rules for right/ZONE and posix/ZONE targets too,
	the difference begin leapseconds vs /dev/null as 3rd dep.  For
	original ZONE targets use $(leapseconds), to be set in Makeconfig.
	(target-zone-flavor): New variable.
	(tzcompile): Use it to get the right -d for posix/ and right/ flavors.
	* Makeconfig (leapseconds): New variable.

	* mach/Machrules (%.udeps rule): Depend on Machrules.
	Emit deps for .uh and .__h files.
	(%.uh, %.__h rules): Don't depend on %.defs; use #include <$*.defs>
	instead.

Sun May 26 01:06:47 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdlib/Makefile (routines): Add llabs, lldiv.
	* stdlib/llabs.c: New file.  Implementation of return
	absolute value of long long argument.
	* stdlib/lldiv.c: New file.  Implementation of division with remainder
	of long long argument.
	* stdlib/stdlib.h [__USE_GNU] (lldiv_t): New type for lldiv
	function.
	Define prototypes for lldiv and llabs functions.

	* locale/C-collate.c: Initialize _NL_COLLATE_NRULES element.

	* stdlib/strtod.c: Replace wchar_t with wint_t.  The later is
	really the type for a single wide character.

	* string/strxfrm.c (print_val): Define separate version for
	use as wcsxfrm.  Here we don't need UTF8 encoding.

	* wcsmbs/wchar.h:  gcc-2.7.2-960517 finally introduces wint_t
	in <stddef.h>.  Use this value and only for older gcc version
	define in place.
	(uwchar_t): Remove definition.

	* wcsmbs/wcscmp.c, wcsmbs/wcscoll.c, wcsmbs/wcsncmp.c,
	wcsmbs/wcsxfrm.c, wcsmbs/wmemcmp.c: : Don't use uwchar_t as unsigned
	type.  wint_t is intended for this.

Sat May 25 14:10:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/bsd/direntry.h: Use [1] instead of [0] for d_name to
	quiet -ansi -pedantic.
	* sysdeps/unix/common/direntry.h: Likewise.

	* login/Makefile (headers): Add lastlog.h.
	* login/lastlog.h: New file.

	* login/Makefile (CFLAGS): Don't append -D_THREAD_SAFE.
	* login/utmp.h [_REENTRANT || _THREAD_SAFE]: Replace this conditional
	with #ifdef __USE_REENTRANT.

	* features.h (__GNU_LIBRARY__): Set to 6.
	[_GNU_SOURCE] (_POSIX_SOURCE, _POSIX_C_SOURCE, _BSD_SOURCE,
	_SVID_SOURCE): Make sure they are all defined.

	* sysdeps/unix/sysv/linux/gnu/types.h: Instead of including
	<linux/posix_types.h>, define _LINUX_TYPES_DONT_EXPORT and then
	include <linux/types.h>.

	* resource/sys/resource.h: Remove trailing commas from enums.

	* sysdeps/generic/netinet/in.h: Remove trailing commas from enums.
	* sysdeps/unix/sysv/linux/netinet/in.h: Likewise.
1996-05-26 19:19:51 +00:00
Roland McGrath 27a110706b * login/getutline_r.c: Include string.h. 1996-05-24 22:08:15 +00:00
Roland McGrath 5790c439f9 * Rules (static-only-routines): Restore the rule to make these .so's
empty objects.
1996-05-24 21:51:25 +00:00
Roland McGrath 41f27456ac Fri May 24 17:30:50 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* login/pututline_r.c: Use struct assignment instead of memcpy.

	* login/getutline_r.c: Use strncmp instead of comparing two pointers
	that will only be equal if you are overwriting the data and screwing
	yourself anyway.
1996-05-24 21:42:06 +00:00
Roland McGrath 613a76ff52 Fri May 24 02:31:36 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/speed.c: Add new speed value 460800.

Thu May 23 23:09:33 1996  Ulrich Drepper  <drepper@cygnus.com>

	* FAQ: Add answer for 100% source code compatibility to Linux
	libc by David Mosberger-Tang.

	Update from bind-4.3.4-T3B.
	* inet/arpa/inet.h: Add prototypes for inet_pton, inet_ntop,
	inet_nsap_addr, and inet_nsap_ntoa.
	* resolv/gethnamaddr.c: Correct compatibility problems (sprintf),
	remove fourth argument to inet_pton and correct handling of
	host_addr passing.
	* resolv/inet_ntop.c: Correct compatibility problems (sprintf).
	* resolv/inet_pton.c: Remove fourth argument.
	* resolv/resolv.h: Remove prototypes for inet_nsap_addr and
	inet_nsap_ntoa.  Now on <arpa/inet.h>.

	* stdlib/gmp-impl.h: Add prototypes for internal functions.

Thu May 23 22:49:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Rules (subdir_install): Remove dep on sor-$(subdir).
	(static-only-routines): Removed variable and associated rules.

	* sysdeps/unix/sysv/linux/alpha/Makefile (headers): Add
 	sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/ffs.S,
 	sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/start.S,
1996-05-24 20:16:39 +00:00
Roland McGrath 510ca033d6 Wed May 22 00:40:50 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/speed.c (speeds): Add entry for
 	460800 baud.

	* sysdeps/unix/sysv/linux/alpha/statbuf.h: New file.

	* sysdeps/unix/sysv/linux/Makefile (headers): Add
 	alpha/ptrace.h.
	* sysdeps/unix/sysv/linux/alpha/alpha/ptrace.h: New file.

	* sysdeps/libm-ieee754/s_scalbnf.c: Call __scalbnf instead of
 	scalbnf.

	* sysdeps/generic/sigset.h (__sigismember, __sigaddset,
 	__sigdelset): Add declaration to keep ANSI compilers quiet.

	* sysdeps/alpha/__math.h (cabs): Remove underscores from struct
 	__cabs_complex member names in call to __hypot().

	* sysdeps/alpha/copysign.S, sysdeps/alpha/fabs.S: New files.

	* sysdeps/alpha/divrem.h: Renamed from sysdeps/alpha/divrem.S to avoid
 	name collision with math library.

	* sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S,
	sysdeps/alpha/divqu.S, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S,
	sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S: Include divrem.h instead
	of divrem.S.

	* sysdeps/unix/alpha/sysdep.h: Include regdef.h.  Define LEAF macro
	to simplify declaration of leaf functions.

	* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
 	sysdeps/alpha/bsd-setjmp.S, sysdeps/alpha/ffs.S,
 	sysdeps/alpha/htonl.S, sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
 	sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
 	sysdeps/alpha/udiv_qrnnd.S, sysdeps/unix/sysv/linux/alpha/brk.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
 	sysdeps/unix/sysv/linux/alpha/pipe.S,
 	sysdeps/unix/sysv/linux/sigsuspend.S,
 	sysdeps/unix/sysv/linux/alpha/syscall.S,
 	sysdeps/unix/sysv/linux/alpha/sysdep.S: Remove include of regdef.h.
  	sysdep.h includes it now. Replace ENTRY by LEAF with appropriate
 	framesize declaration.  Replace "lda pv,sym/jsr pv" by "jsr sym".

	* sysdeps/unix/sysv/linux/alpha/sysdep.h (NO_UNDERSCORES): Don't
	define.

	* sysdeps/unix/sysv/linux/alpha/syscalls.list: Added getsockopt,
	ptrace, and sysctl.

	* sysdeps/unix/sysv/linux/alpha/profil-counter.h: File removed.

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: Modify to support
 	dynamic recognition of platform type.
	(_bus_base): New function.

	* sysdeps/unix/sysv/linux/alpha/llseek.S: New file.

	* sunrpc/rpc/rpc.h, sunrpc/rpc/svc.h: Avoid nested comments since
 	they produce ugly warnings by gcc.

	* posix/sys/types.h [__USE_MISC]: Add typedef for ulong.

Wed Mar 27 10:26:21 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: Must establish global pointer before
 	address of __sigsetjmp_aux can be loaded.
1996-05-23 05:33:49 +00:00
Roland McGrath fa0bc87c32 Wed May 22 22:10:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/canonicalize.c: New file.
	* stdlib/stdlib.h: Declare canonicalize_file_name, realpath.
	* stdlib/Makefile (routines): Add canonicalize.

	* posix/unistd.h: Declare __canonicalize_directory_name_internal.

Thu May 23 00:01:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* db/recno/rec_seq.c: Prevent `sccsid' definition by using the
	same #if condition as in the other db files.

	* intl/Makefile: Add -Wno-unused CFLAGS for compilation of
	bindtextdom.c, finddomain.c, and localealias.c.

	* intl/dcgettext.c: Don't define prototype for getcwd() when
	compiling in glibc.

	* libio/cleanup.c: Add prototype for _IO_register_cleanup.

	* libio/filedoalloc.c, libio/fileops.c, libio/iopopen.c: Don't
        define _POSIX_SOURCE unconditionally.

	* libio/filedoalloc.c, libio/iopopen.c: Include <unistd.h> if
        compiling in glibc.

	* libio/fileops.c (_IO_file_close_it): Don't sync file, call
	flush instead.  This relaxes the rules from POSIX.1 about
	changing the active handle a bit.

	* libio/iofopncook.c (struct _IO_cookie_file): Move definition
	into <libio.h>.
	Add prototypes for local functions to prevent warnings.

	* libio/iopopen.c: Change prototypes for _IO_fork, _IO_pipe, and
        _IO_DUP2 to contain complete parameter list.

	* libio/libio.h: Add definition of struct _IO_cookie_file.

	* libio/libioP.h: Add prototypes for _IO_vasprintf, _IO_vdprintf,
        and _IO_vsnprintf.

	* libio/memstream.c: Include <stdio.h>.

	* libio/stdio.h: Add prototypes for fopencookie,
        __stdio_gen_tempname, __vfscanf, __vsscanf, and __vsnprintf.

	* libio/strops.c: Avoid useless expression in `for' initializer.

	* locale/findlocale.c: Add some casts to prevent warnings.

	* locale/programs/locfile.c (write_locale_data): Don't use
	double `/' in locale binary file.

	* posix/unistd.h: Remove prototype for `reboot'.

	Update from bind-4.9.4-T1A.
	* resolv/Makefile (routines): Add inet_ntop and inet_pton.
	* resolv/arpa/nameser.h: Add definition of IN6ADDRSZ.
	* resolv/gethnamaddr.c, resolv/getnetnamadr.c, resolv/res_comp.c,
	resolv/res_debug.c, resolv/res_init.c

	* resolv/inet_ntop.c, resolv/inet_pton.c: New files.

	* resolv/resolv.h: Add RES_USE_INET6 flag.
	(__dn_isvalid): Renamed to __res_dnok.
	Add prototypes for __res_ownok and __res_mailok.

	* stdio-common/Makefile: Add -Wno-unused to CFLAGS for _itoa.c.

	* stdio-common/getline.c, stdio-common/vfscanf.c,
        sysdeps/posix/tempname.c: Don't use <ansidecl.h> anymore.

	* sysdeps/unix/sysv/linux/Makefile [$subdir == misc]
        (sysdep_routines): Add s_reboot.
	(install-others): Add $(includedir)/sys/syscall.h.
	New rule for $(includedir)/sys/syscall.h to produce from
	<asm/unistd.h>.

	* sysdeps/unix/sysv/linux/reboot.c: New file.  Make single
        argument function call 3 argument system call.

	* sysdeps/unix/sysv/linux/sys/reboot.h: New file.  Linux specific
	definition for reboot function.

	* sysdeps/unix/sysv/linux/syscall.h: Remove old and obsolete
        comment.

	* sysdeps/unix/sysv/linux/syscalls.list: Rename function for
	reboot syscall to __syscall_reboot.

	* wcsmbs/wchar.h: Protect prototypes for wcstof and wcstold by
	__USE_GNU, not USE_GNU.

Tue May 21 21:55:49 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* locale/programs/charset.c, locale/programs/ld-collate.c:
	Add casts to prevent warnings on 64-bit machines.

	* locale/programs/ld-monetary.c: Don't do unnecessary tests for
	int_frac_digits and frac_digits which only produce warnings.

Mon May 13 23:45:29 1996  David Mosberger-Tang  <davidm@AZStarNet.com>

	* inet/arpa/inet.h: Backup return type of inet_addr to u_long.
	* resolv/inet_addr.c: Likewise.

	* resolv/Makefile (distribute): Add res_hconf.h
	(routines): Add res_hconf.

	* resolv/gethnamaddr.c: Add support for /etc/host.conf.

	* resolv/res_init.c: Initialize /etc/host.conf reader.

	* resolv/res_hconf.c, resolv/res_hconf.h: New files.
        Implementation of reading /etc/host.conf.

Wed May 22 21:21:15 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Rules (%.out rules): Prepend $($*-ENV) to the command.

	* sysdeps/unix/sysv/linux/i386/brk.c (___brk_addr): Define as weak
	alias for __curbrk.

Wed May 22 19:37:27 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/hurdexec.c (_hurd_exec): Pass INIT_TRACEMASK.
	* hurd/hurdmsg.c (set_int): Support INIT_TRACEMASK.

Wed May 22 18:47:31 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/getcwd.c
	(_hurd_canonicalize_directory_name_internal): New function, broken out
	of __getcwd.
	(__getcwd): Use it.
	(__canonicalize_directory_name_internal): New function using it.

	* sysdeps/posix/getcwd.c (__canonicalize_directory_name_internal): New
	function, broken out of __getcwd.
	(__getcwd): Use it.

Wed May 22 18:14:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* string/argz-create.c (__argz_create): Correctly calculate length.

	* string/argz-extract.c (__argz_extract): Add terminating 0 entry.
	* hurd/hurdstartup.c (_hurd_startup): ... and don't so here.

	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.
1996-05-23 03:15:42 +00:00
Roland McGrath e685238c90 Wed May 22 21:21:15 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/brk.c (___brk_addr): Define as weak
	alias for __curbrk.
1996-05-23 01:34:23 +00:00
Miles Bader fe4d0ab794 (set_int): Support INIT_TRACEMASK. 1996-05-23 00:08:54 +00:00
Miles Bader d55dc14f28 (_hurd_startup): Don't bother terminating arg vectors, argz_extract does it now. 1996-05-22 22:23:31 +00:00
Roland McGrath 12fb2990d4 Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/getopt.c 1996-05-22 22:23:17 +00:00
Miles Bader a0777f5163 (__argz_extract): Add terminating 0 entry. 1996-05-22 22:21:46 +00:00
Miles Bader de3bf9b1a5 (__argz_create): Correctly calculate length. 1996-05-22 22:20:51 +00:00
Roland McGrath 0efef8fcee Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* posix/glob.c [VMS]: Don't include <pwd.h>.
	[HAVE_VMSDIR_H]: Include "vmsdir.h".
	(glob) [VMS]: Don't grok ~.
1996-05-22 21:28:03 +00:00
Roland McGrath 0b0fc9d3a0 Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* posix/glob.c [VMS]: Don't include <pwd.h>.

	* hurd/hurdstartup.c (_hurd_startup): Terminate the vectors we get
	back from argz_extract.
1996-05-22 21:22:56 +00:00
Roland McGrath f202bbb213 Wed May 22 17:22:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* posix/glob.c [VMS]: Don't include <pwd.h>.
1996-05-22 21:22:40 +00:00
Miles Bader 395565f0c8 (_hurd_startup): Whoops, length args to argz_extract were correct before. 1996-05-22 21:21:27 +00:00
Roland McGrath a8fd3594fb Wed May 22 14:46:53 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hurd/hurdstartup.c (_hurd_startup): Pass the correct counts to
	argz_extract, and terminate the resulting vectors.

Wed May 22 13:56:42 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* configure.in: Remove checks for objdump, objcopy, and awk.
	* config.make.in (OBJDUMP, OBJCOPY, AWK): Variables removed.
	* Makefile (distribute): Remove extract-dynsym.
	* extract-dynsym: File removed.

Tue May 21 22:17:45 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* termios/cfmakeraw.c: Set MIN to 1 and TIME to 0.
1996-05-22 20:02:18 +00:00
Miles Bader 0405b04dde (_hurd_startup): Pass the correct counts to argz_extract, and terminate the resulting vectors. 1996-05-22 19:55:28 +00:00
Roland McGrath dc9972317e Regenerated: autoconf configure.in 1996-05-22 18:02:38 +00:00
Roland McGrath b8fe19fa80 Wed May 22 01:48:54 1996 Ulrich Drepper <drepper@cygnus.com>
* stdlib/strtol.c [!QUAD] (ULONG_MAX, LONG_MAX): Define these
	macros if they are not available.
	(WEAKNAME): New macro to declare argument as weak.
	Define function with __ prefix and add normal name as weak alias.

	* sysdeps/posix/euidaccess.c (S_IROTH, S_IWOTH, S_IXOTH): Defines
	these macros if not already available based on R_OK, W_OK, and
	X_OK.

Tue May 21 18:48:46 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* misc/sys/syslog.h (__need___va_list): Define this instead of
	__need_va_list before including <stdarg.h>.

	* Makerules (o-iterator): Use $(object-suffixes-left) instead
	of $(object-suffixes) to produce repetitions; this is used for other
	lists than just that one.
	[versioned]: Use $(o-iterator) properly.

	* sysdeps/unix/sysv/linux/Implies: Include `gnu'.
	* sysdeps/mach/hurd/Implies: Likewise.

Sat May 18 02:57:46 1996  Ulrich Drepper  <drepper@cygnus.com>

	* login/Makefile: New file.  This directory contains functions
	for user administration.
	* Makefile (subdirs): Add login.

	* misc/Makefile (headers): Remove utmp.h.  Now in login/utmp.h.
	(extra-libs, libutil-routines): Ditto.
	* misc/login.c, misc/login_tty.c, misc/logout.c, misc/logwtmp.c,
	misc/utmp.h: Moved to misc/.
	* login/login.c, login/login_tty.c, login/logout.c,
        login/logwtmp.c, login/utmp.h: Moved to here from misc/.

	* login/utmp.h: Split file.  Definitions of data structures
	and constants are now in the system dependent utmpbits.h file.

	* login/setutent_r.c, login/setutent.c, login/endutent_r.c,
	login/endutent.c, login/getutent_r.c, login/getutent.c,
	login/getutid_r.c, login/getutid.c, login/getutline_r.c,
	login/getutline.c, login/pututline_r.c, login/pututline.c:
	New files.  Routines to handle utmp-style files.

	* sysdeps/gnu/utmpbits.h: New file.  Contains GNU/Linux
	specific definitions of utmp data structures and constants.

	* sysdeps/unix/sysv/utmpbits.h: Renamed from sysdeps/unix/sysv/utmp.h.

	* sysdeps/generic/utmpbits.h: New file.  Generic (BSDish) version of
	definitions of utmp data structures and constants.

Fri May 17 00:01:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/C-monetary.c: Default value for mon_decimal_point should be
        '.'.

	* stdio-common/printf.h: Remove Linux libc compatibility stuff.
	Add `extra' flag.  Currently used in __printf_fp.

	* stdio-common/printf_fp.c (__guess_grouping): Renamed from
        `guess_grouping' and extend visibility to extern.  This function
        is now used in `strfmon'.
	(__printf_fp): Recognize new bit flag in info struct.  This
	triggers to use the grouping information and decimal point from
	the LC_MONETARY category instead of the LC_NUMERIC category.

	* stdio-common/vfprintf.c (process_arg): Correct major bug.  In
	`complicated' loop we must not use the varargs because the args
	are already available in the ARGS_VALUE array.

	* stdlib/Makefile (headers): Add monetary.h.
	(routines): Add strfmon.
	* stdlib/monetary.h: New file.  Header for strfmon function.
	* stdlib/strfmon.c: New file.  Implement strfmon function to print
	monetary amounts according to current locale's rules.

	* sysdeps/unix/sysv/linux/i386/sys/vm86.h: The kernel header is
	now (>= Linux-1.3.100) called <asm/vm86.h>.
1996-05-22 02:11:55 +00:00
Roland McGrath 1b82a4a8ca (Long Options): getopt_long in getopt.h 1996-05-21 21:35:56 +00:00
Linda A. Walsh ee263689e0 * config.sub: Recognize -proelf as a basic system type. 1996-05-20 16:02:45 +00:00
Roland McGrath 20c811896c Thu May 16 00:31:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules [versioned]: Make symlinks in the build directory, because
 	the versioned names might be referenced by a DT_NEEDED in another
 	library.
1996-05-16 04:32:47 +00:00
Roland McGrath 46d9215f3b Wed May 15 18:59:38 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/examples/longopt.c: Include stdlib.h and getopt.h.
1996-05-15 23:05:44 +00:00
Roland McGrath 0adc881c60 Tue May 14 03:36:21 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/Makefile [$subdir == misc] (headers):
	Add sys/acct.h and sys/sysctl.h.
1996-05-15 21:43:59 +00:00
Roland McGrath f8adc70c3f Tue May 14 19:42:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/generic/strrchr.c: Deansideclized.

	* elf/Makefile (ldd): Depend on Makefile.
	Find ld.so in $(slibdir) instead of $(libdir).

	* sysdeps/i386/strrchr.S: Use `testl $3, %esi' instead of `testb $3,
	%esi'; gas misassembles the latter into `testb $3, %dh'.

	* mach/Machrules (%.udeps rule): Do $(make-target-directory) first.

Tue May 14 16:38:44 1996  David Mosberger-Tang <davidm@AZStarNet.com>

	* sunrpc/getrpcent.c (interpret): Declare args.  Rewrite parsing using
	strpbrk.

Tue May 14 20:18:38 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/Makefile (routines): Add strptime.
	* time/time.h: Add prototype for strptime.
	* time/strptime.c: New file.  Implementation according to XPG4.
1996-05-15 15:49:26 +00:00
Roland McGrath 64166d9834 Tue May 14 14:07:10 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* libc-symbols.h (lint): Macro removed.  The sunrpc code does some
	really stupid things #ifdef lint.

	* sysdeps/unix/sysv/linux/i386/profil-counter.h (profil_counter): Fix
	struct member name: sc_eip -> eip.
1996-05-14 20:30:25 +00:00
Roland McGrath 7cdef09812 * Makerules (stub-$(subdir)): Put cmds including cd inside (...) with
output redirect outside it.
1996-05-14 02:30:23 +00:00
Roland McGrath c4cc693de7 Mon May 13 19:52:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (stub-$(subdir)): Put cmds including cd inside (...) with
	output redirect outside it.
1996-05-14 02:28:12 +00:00
Miles Bader 8ab41b4bab Updated from ../gpl2lgpl.sed /home/gd/gnu/lib/regex.c 1996-05-14 00:16:50 +00:00
Roland McGrath 1796d83f0f Mon May 13 19:52:33 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* elf/Makefile (subdir_lib): Depend on ld.so.
1996-05-13 23:54:12 +00:00
Roland McGrath 70c7151893 Sun May 12 22:52:22 1996 Bruce Elliott <belliott@accessone.com>
* stdio-common/vfprintf.c: Correct handling of unsigned short
	values.

	* extra-lib.mk (alltype-$(lib)): Put libs in $(objpfx) instead of
	$(common-objpfx).
	* Makerules [install-lib.a]: Find them there.
1996-05-13 23:50:14 +00:00
Roland McGrath dfc34677ea Regenerated
Mon May 13 12:03:03 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob.c [_AMIGA]: Don't include <pwd.h>.
	(glob): Remove bogus & in call to globfree.
	[_AMIGA]: Use AmigaDOS file name conventions.
1996-05-13 23:16:15 +00:00
Roland McGrath 7f0d69dbf4 * sysdeps/unix/sysv/linux/i386/profil-counter.h: New file. 1996-05-13 23:11:29 +00:00
Roland McGrath 01dbca86d1 * sysdeps/unix/bsd/telldir.c (seekdir, telldir): Use new struct member
names without __.
1996-05-13 22:15:05 +00:00
Roland McGrath a13dab1c0f * extra-lib.mk: Skip the hair if $(object-suffixes-$(lib)) is empty.
* posix/glob.h [_AMIGA]: Remove `struct stat;' forward decl.
1996-05-13 22:11:28 +00:00
Roland McGrath a5b7bf0e62 * configure.in (--with-fp): Note in help string that it's the default.
* locale/programs/ld-ctype.c (struct locale_ctype_t): Use u_int32_t
	instead of unsigned int for map_collection_max and map_collection_act.

	* stdio-common/vfprintf.c [USE_IN_LIBIO] (flockfile, funlockfile):
	Macros removed; they are in <stdio.h>.
	* stdio-common/vfscanf.c: Likewise.

	`-include' to not complain before they exist.
1996-05-13 22:01:00 +00:00
Roland McGrath 95a108f0ba Regenerated
Thu May  9 09:17:46 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* posix/glob/SMakefile, posix/glob/SCOPTIONS, posix/glob/Makefile.ami:
	New files, AmigaDOS support from Aaron Digulla.
	* posix/Makefile (glob.tar): Add AmigaDOS support files.
1996-05-13 20:29:10 +00:00
Roland McGrath 9fb16eeae8 * posix/glob.c [_AMIGA]: Don't include <pwd.h>.
(glob): Remove bogus & in call to globfree.
	[_AMIGA]: Use AmigaDOS file name conventions.
1996-05-13 20:27:12 +00:00
Roland McGrath 45086082a0 * time/Makefile (zonenames): Target removed.
(extra-objs): Remove it from here.
	Include the z.* files directly instead of including zonenames; use
	`-include' to not complain befre they exist.

	* sysdeps/unix/Makefile: Find sysd-syscalls and s-proto.d with
	$(common-objpfx) instead of $(objpfx).
1996-05-13 20:18:37 +00:00
Roland McGrath d929664ab5 * Makerules [install-lib-non.a]: Find these things with $(objpfx)
instead of $(common-objpfx).
1996-05-13 18:10:51 +00:00
Roland McGrath 7da3079b42 Mon May 13 12:03:03 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makeconfig (sysdep-configures): New variable.
	(config.status): Depend on $(sysdep-configures).

Fri May 10 20:07:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/profil.c: New file.

Fri May 10 19:59:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/Makefile (CFLAGS-setjmp.c): New variable.

Fri May 10 19:55:42 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* shlib-versions: Use libm=6 and libc=6 for m68k-linux.

	* string/envz.c: Fix uses of unsigned to size_t.
1996-05-13 17:30:42 +00:00
Roland McGrath 0f90ef9650 * Makerules ($(libdir)/libc.so): Make the file an ld script.
* sysdeps/mach/hurd/configure.in: Don't grok --with-hurd option.

	* sysdeps/mach/configure.in: File removed.
	* sysdeps/mach/configure: File removed.
1996-05-12 22:15:01 +00:00
Roland McGrath aa1075ea2f Sun May 12 11:16:58 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* mach/Machrules (%.udeps rule): Write deps for %_server.[ch] too.
	(%_server.[ch] rule): Don't depend on %.defs; use #include to get
	installed .defs file.

	* stdio-common/vfprintf.c (flockfile, funlockfile): Define to
	nothing for stdio.  Fix fUNlockfile -> funlockfile for libio.
	* stdio-common/vfscanf.c: Likewise.

Sat May 11 13:43:41 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* hurd/hurdfault.c: Include faultexc_server.h instead of faultexc.h.

	* mach/Machrules (%.ir rule): Don't produce deps for imports.

	* elf/dl-fini.c (_dl_fini): Clear L->l_init_called after calling fn.

	* Makerules (install): Depend on $(slibdir)/libc.so$(libc.so-version).
	[!subdir] ($(libdir)/libc.so, $(common-objpfx)/libc-syms.so): Protect
	these targets and install dep on $(libdir)/libc.so with this.

	* hurd/Makefile: Removed all rules and defns for using code from Hurd
	sources and installing headers from there.

	* sysdeps/mach/hurd/errnos.awk: Set in_mach_errors to FILENAME when we
 	set it.  In Mach error matching clause, only match if FILENAME is
 	still the same value.

	* sysdeps/mach/hurd/Makefile: Don't include sysdeps/mach/Makefile;
	$(mach-srcdir) no longer exists.
	(hurd-srcdir): Variable removed.
	(includes): Don't append -I$(hurd-srcdir).
	(last-includes): Variable removed.
	Remove vpath specs using $(hurd-srcdir).
	(mach-errno-h): New canned sequence.
	($(common-objpfx)errnos.d): New target, generated included makefile
	to determine absolute file names of Mach headers to search for error
	codes and set variable mach-errnos-deps.
	($(common-objpfx)stamp-errnos): Depend on $(mach-errnos-deps) instead
	of prior explicit list.
	(generated): Add errnos.d, stamp-errnos.

	* mach/Machrules (some-if-rtn): New variable and target; compute deps
	of some if routine and make all if routines depend on that .d file
	instead of static list of .h files.

	* mach/Makefile (mach/mach_interface.defs,
	mach/memory_object_user.defs): Targets removed.
	($(objpfx)mach-syscalls.mk): Tweak this kludge so it doesn't depend
	directly on Mach sources.

	* sysdeps/mach/Makefile (mach-srcdir): Variable removed.
	(includes): Don't append -I$(mach-srcdir).
	Remove vpath specs using $(mach-srcdir).

	* hurd/Makefile (server-interfaces): Add faultexc.
	(sig): Remove it from here.
	(fault%.[ch]): Rule removed.
	(MIGFLAGS-faultexc): New variable.

	* hurd/faultexc.defs: New file.

	* mach/Machrules (%.ustamp rule): Pass $(MIGFLAGS-$*) to mig.
	(%_server.[ch] rule): Likewise.

	* mach/Makefile: Removed all rules and defns for using code from Mach
	sources and installing headers from there.

	* Makeconfig [$(build-shared)=yes] (link-libc): Append
	$(libc.so-version) to libc.so.

	* mach/Machrules (%.ustamp rule): Don't depend on %.defs.
	(%.udeps): New rule parallel to that one, generating included
	makefiles with -M output from `#include <%.defs>'.

	* Makerules (sed-remove-objpfx): Remove space before \ at eol.
1996-05-12 16:38:08 +00:00
Roland McGrath d617ac4ee5 * Makefile (distribute): Add FAQ. 1996-05-10 23:04:39 +00:00
Roland McGrath f8cac037ee Fri May 10 18:36:14 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* FAQ: New file contributed by drepper.

	* time/Makefile (headers): Add timebits.h.
	* sysdeps/unix/sysv/linux/timebits.h: New file.
	* sysdeps/stub/timebits.h: New file.
	* time/time.h (CLK_TCK): Define to CLOCKS_PER_SEC.
	(CLOCKS_PER_SEC): Remove this macro.  Instead #include <timebits.h>.
1996-05-10 22:55:26 +00:00
Roland McGrath 7cfb2d8be3 Thu May 9 09:17:46 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* aclocal.m4 (AC_FD_MSG, AC_FD_CC): Fix these for autoconf weirdness.
1996-05-10 22:06:47 +00:00
Thomas Bushnell, BSG 9635799df3 *** empty log message ***
* string/envz.c (envz_get): Don't declare ENTRY const.
1996-05-10 21:33:50 +00:00
Thomas Bushnell, BSG 6e85aaf798 Fix up collisions.
* aclocal.m4 (AC_FD_MSG, AC_FD_CC): Fix these for autoconf weirdness.
1996-05-10 20:59:04 +00:00
Thomas Bushnell, BSG 4d4b48753c *** empty log message ***
Fri May 10 16:22:44 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* string/argz-create.c (__argz_create): Restore const keyword to
 	ARGV parm.
	* string/argz.h (__argz_create, argz_create): Restore const
 	keyword.

Fri May 10 11:48:03 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* string/argz.h (argz_create): Fix param type.
	* string/argz-create.c (__argz_create): Remove const from param type.
	* string/envz.c (envz_get): Remove const from return type.
1996-05-10 20:26:39 +00:00
Thomas Bushnell, BSG a7d25a1157 (__argz_create, argz_create): Restore const keyword. 1996-05-10 20:22:00 +00:00
Miles Bader 4392fd309a (envz_get): Remove const from return type. 1996-05-10 15:57:48 +00:00
Miles Bader e91ce32f3c (argz_create): Fix param type. 1996-05-10 15:48:34 +00:00
Thomas Bushnell, BSG 349e97bda6 *** empty log message ***
* string/envz.h (envz_get): Omit const from declaration of return
	type.
1996-05-10 13:52:21 +00:00
Thomas Bushnell, BSG 7cf6f3e0e8 *** empty log message ***
Fri May 10 09:41:54 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* string/argz.h (__argz_create, argz_create): Omit const keyword
	from declaration of ARGV.
1996-05-10 13:44:04 +00:00
Thomas Bushnell, BSG b5cc7a65af (__argz_create, argz_create): Omit const keyword from declaration of ARGV. 1996-05-10 13:43:03 +00:00
Roland McGrath f55814ff6c Regenerated: autoconf sysdeps/unix/configure.in 1996-05-09 23:13:21 +00:00
Roland McGrath c28fb3c893 Cleanups in sunrpc code from NIIBE Yutaka <gniibe@mri.co.jp>.
* sunrpc/clnt_tcp.c (clnttcp_create): Don't close *SOCKP if it's -1.
	* sunrpc/clnt_simp.c (callrpc): Don't close CRP->socket if it's
	RPC_ANYSOCK.
	* sunrpc/pmap_clnt.c (pmap_set): Don't close SOCKET, since
	CLNT_DESTROY already has.
	(pmap_unset): Likewise.
	* sunrpc/pm_getmaps.c (pmap_getmaps): Likewise.
	* sunrpc/pm_getport.c (pmap_getport): Likewise.
	* sunrpc/pmap_rmt.c (pmap_rmtcall): Likewise.
	* sunrpc/portmap.c (callit): Likewise.
1996-05-09 21:50:42 +00:00
Roland McGrath 05d4c98219 * Makerules (versioned): Strip whitespace.
* Rules (static-only-routines rule): Remove spurious space in dep.

	* misc/getusershell.c: Undo changes of 7 May 96 (rev 1.6).
	Cast string constants to char *.

	* posix/glob/SMakefile, posix/glob/SCOPTIONS, posix/glob/Makefile.ami:
	New files, AmigaDOS support from Aaron Digulla.
	* posix/Makefile (glob.tar): Add AmigaDOS support files.
1996-05-09 19:30:57 +00:00
Roland McGrath 3e2632b62d Regenerated
Tue Apr  2 21:27:01 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* posix/glob.c (glob_pattern_p): Avoid scanning past eos if
	the pattern ends with a backslash and quoting is enabled.
	* posix/fnmatch.c (fnmatch): Likewise; return FNM_NOMATCH for such
 	patterns.
1996-05-09 18:06:34 +00:00
Roland McGrath 8942a07afc * sysdeps/unix/sysv/linux/net/if.h: New file.
* sysdeps/unix/sysv/linux/Dist: Add it.
	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=socket] (headers): Add
	net/if.h.

	* Makeconfig (link-libc): Add libc.a after libc.so in link.

	* Rules (static-only-routines rule): Use empty.o instead of dummy.o.
	(empty.o): New target.
	(generated): Add empty.c, empty.o.
1996-05-09 16:50:03 +00:00
Roland McGrath 5570726557 * resolv: Code updated from BIND-4.9.3P2C3. 1996-05-09 15:59:18 +00:00
Roland McGrath 782e865067 Thu May 9 09:17:46 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Rules (static-only-routines rule): Use dummy.o, not dummy.so.
1996-05-09 13:18:18 +00:00
Roland McGrath 03d0a7e2aa * extract-dynsym: New file.
* Makefile (distribute): Add it.
1996-05-09 00:53:12 +00:00
Roland McGrath 7c713e287e Wed May 8 20:04:29 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Rules (subdir_install): Depend on $(common-objpfx)sor-$(subdir).
	[! libc.so-version]: Clear static-only-routines.
	($(common-objpfx)sor-$(subdir)): New target.
	[static-only-routines]: New static pattern rule for these .so's.
	* Makerules [libc.so-version] ($(slibdir)/libc.so): Target removed.
	[libc.so-version] ($(libdir)/libc.so, $(common-objpfx)libc-syms.so):
	New targets replace it.
	(install) [libc.so-version]: Depend on $(libdir)/libc.so instead of
	$(slibdir)/libc.so.
	* io/Makefile (static-only-routines): New variable.
	* configure.in: Check for tools objdump and objcopy, and for awk.
	* config.make.in (OBJDUMP, OBJCOPY, AWK): New variables.

Thu May  9 01:24:00 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/programs/config.h: Remove definition of wint_t.

	* locale/programs/ld-collate.c: Include <wchar.h> instead of
	<wcstr.h>.

	* manual/time.texi: Add some more description for %U and %W
	format of strftime.  Describe new format %V of strftime.

	* resolv/gethnamaddr.c: Prevent warning by preventing variable
	definition.
	* stdio-common/_itoa.c: Ditto.

Tue May  7 23:43:07 1996  Ulrich Drepper  <drepper@cygnus.com>

	* libio/clearerr.c, libio/feof.c, libio/ferror.c, libio/fgetc.c,
	libio/fileno.c, libio/fputc.c, libio/freopen.c, libio/fseek.c,
	libio/genops.c, libio/getc.c, libio/getchar.c, libio/iofclose.c,
	libio/iofflush.c, libio/iofgetpos.c, libio/iofgets.c,
	libio/iofputs.c, libio/iofread.c, libio/iofsetpos.c,
	libio/ioftell.c, libio/iofwrite.c, libio/iogetdelim.c,
	libio/iogets.c, libio/ioputs.c, libio/iosetbuffer.c,
	libio/iosetvbuf.c, libio/ioungetc.c, libio/iovsprintf.c,
	libio/libio.h, libio/putc.c, libio/putchar.c, libio/rewind.c,
	libio/stdio.h, stdio-common/printf_fp.c, stdio-common/vfprintf.c,
	stdio-common/vfscanf.c: Prepare for reentrent libio.

	* libio/clearerr_u.c, libio/feof_u.c, libio/ferror_u.c,
	libio/fputc_u.c, libio/getc_u.c, libio/getchar_u.c,
	libio/iofflush_u.c, libio/putc_u.c, libio/putchar_u.c: New files.
	Used in reentrent libio.

	* misc/getusershell.c: Prevent warnings.
1996-05-09 00:37:21 +00:00
Roland McGrath f0523145cc * Makerules (install-lib.so rules): Undouble $s in target and dep
parts of o-iterator-doit defns.
	(unversioned libraries install rule): Fix pattern.

	* mach/Makefile (mach-src-headers): Use $(base-machine) instead of
	$(config-machine).
	($(includedir)/machine): Likewise.

	* config.make.in (base-machine): New variable.
	* configure.in (machine): Move case stmt to set $machine out of sysdep
	dirs AC_CACHE_CHECK.
	(base_machine): New variable, set in that switch and AC_SUBST'd.

	* Makerules (stub-$(subdir)): Use file name in directory as output,
	since cmd is cd'd.
1996-05-08 22:40:39 +00:00
Roland McGrath c17097f152 Wed May 8 12:08:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* configure.in (MSGFMT): Use : if none found.

	* po/Makefile: Include ../Rules instead of ../Makerules.
1996-05-08 16:18:27 +00:00
Roland McGrath ce4d8b661a Tue May 7 23:18:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* po/Makefile: New file.
	* Makefile (subdirs): Add po.

	* configure.in: Check for msgfmt.
	* config.make.in (MSGFMT): New variable.

Sun May  5 23:49:10 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/Makefile (routines): Add swapoff.

	* sysdeps/unix/sysv/linux/Dist: Add sys/quota.h.

	* sysdeps/unix/sysv/linux/sys/quota.h: New file.  Wrapper around
	kernel header file.
1996-05-08 03:31:04 +00:00
Roland McGrath 0e3426bbcf Tue May 7 19:00:01 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* string/argz-extract.c: Remove const from decl.
	* string/argz.h: Here too.

	* Makeconfig (version.mk): Fix regexp in sed cmd.
	Depend on $(..)Makeconfig.

	* GMP code updated from gmp-2.0 release.
	* stdlib/Makefile (mpn-routines): Removed add_1, added inlines.
	* sysdeps/generic/add_1.c: File removed.
	* stdlib/strtod.c: mp_limb is now mp_limb_t.
	* stdlib/fpioconst.c, stdlib/fpioconst.h: Likewise.
	* stdio-common/_itoa.c: Likewise.
	* stdio-common/printf_fp.c: Likewise.
	Don't include ansidecl.h.

	* sysdeps/mach/hurd/getcwd.c: Use io_identity instead of io_stat.

	* shlib-versions: New file.
	* Makerules (soversions.mk): New target, include file generated from
	shlib-versions.  Moved shared library rules before installation rules.
	Rewrote shared library installation rules for versioned libraries.
	* math/Makefile (libm.so-version): Variable removed.

	* sysdeps/mach/hurd/i386/exc2signal.c: Use struct hurd_signal_detail.

	* hurd/report-wait.c (_S_msg_describe_ports): New function.

	* configure.in: Add AC_PROG_LN_S check.
	* config.make.in (LN_S): New variable.

Sun May  5 03:10:44 1996  Ulrich Drepper  <drepper@cygnus.com>

	* misc/efgcvt_r.c (ecvt_r): Work aroung gcc bug.  gcc does
	not know about weak aliases now and optimizes necessary `if'
	statement away.

	* posix/unistd.h: Add swapoff prototype.

	* sysdeps/generic/confname.h: Add even more POSIX.4 symbols.

	* sysdeps/posix/fpathconf.c (__fpathconf): Get information
	for _PC_PATH_MAX from fstatfs function if available.

	* sysdeps/posix/sysconf.c: Add code to handle _SC_AIO_LISTIO_MAX,
	_SC_AIO_MAX, _SC_AIO_PRIO_DELTA_MAX, _SC_DELAYTIMER_MAX,
	_SC_MQ_OPEN_MAX, _SC_MQ_PRIO_MAX, _SC_RTSIG_MAX,
	_SC_SEM_NSEMS_MAX, _SC_SEM_VALUE_MAX, _SC_SIGQUEUE_MAX, and
	_SC_TIMER_MAX.
	* sysdeps/unix/sysv/sysv4/sysconf.c: Ditto.

	* sysdeps/stub/swapoff.c: New file.  Stub version for swapoff
	function.

	* sysdeps/unix/syscalls.list:  Add swapoff.

	* sysdeps/unix/sysv/linux/Dist: Add sys/acct.h.

	* sysdeps/unix/sysv/linux/Makefile [$(subdir) == misc]
	(sysdep_routines): Add mount, umount, llseek, setfsgid, setfsuid,
	sysinfo, and uselib.
	(headers): Add sys/sysinfo.h.

	* sysdeps/unix/sysv/linux/gethostid.c: Prevent warning.

	* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) == misc]
	(sysdep_routines): Add ioperm, iopl, and vm86.
	(headers): Add sys/perm.h and sys/vm86.h.

	* sysdeps/unix/sysv/linux/i386/sys/perm.h: New file.  Contains
	prototypes for iopl and ioperm.

	* sysdeps/unix/sysv/linux/i386/sys/vm86.h:  New file.  Contains
	prototype for vm86.

	* sysdeps/unix/sysv/linux/i386/syscalls.list: New file.  Add
	vm86 system call.

	* sysdeps/unix/sysv/linux/sys/acct.h: New file.  Contains
	prototypes for acct function.

	* sysdeps/unix/sysv/linux/sys/socket.h: Provide real header
	file with prototypes.

	* sysdeps/unix/sysv/linux/sys/sysinfo.h: New file.  Contains
	prototype for sysinfo function.

	* sysdeps/unix/sysv/linux/syscalls.list: Add flock, ioperm, iopl,
	llseek, setfsgid, setfsuid, sysinfo, and uselib.

	* sysdeps/unix/sysv/linux/sysconf.c: Instead of duplicating
	posix/sysconf.c now only handle cases different to that
	implementation.

Tue May  7 15:08:19 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (__line_wrap_output): Renamed from lwoutput
	(all references changed).  Now exported.

	* stdio/linewrap.c (struct data): Type deleted (moved to linewrap.h).
	(wrap_stream, unwrap_stream, lwclose, lwfileno, lwoutput,
	line_wrap_stream, line_unwrap_stream): Use struct line_wrap_data
	instead of struct data.
	(lwoutput, line_wrap_stream, line_unwrap_stream): Rename various
	occurences of `wrap' and `wrapmargin' to `wmargin'.
	(line_wrapped, line_wrap_lmargin, line_wrap_set_lmargin,
	line_wrap_rmargin, line_wrap_set_rmargin, line_wrap_wmargin,
	line_wrap_set_wmargin, line_wrap_point): New functions.
	* stdio/linewrap.h: New file.
	* stdio/Makefile (headers): Add linewrap.h.

Tue May  7 14:19:12 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/i386/Makefile: File removed.

	* stdio/stdio.h: Remove line_wrap_stream, line_unwap_stream decls.

	* sysdeps/unix/sysv/linux/schedbits.h: New file.

Tue May  7 13:47:02 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* stdio/linewrap.c (struct data): Make margin fields not-pointers.
	(lwoutput): Adjust uses acordingly.

	* sysdeps/mach/hurd/fdatasync.c: New file.
	* sysdeps/mach/hurd/fsync.c: Pass new flag to file_sync.

	* sysdeps/mach/hurd/xmknod.c: Pass new flag to dir_link.
	* sysdeps/mach/hurd/symlink.c: Likewise.
	* sysdeps/mach/hurd/link.c: Likewise.
	* sysdeps/mach/hurd/bind.c: Likewise.
	* hurd/hurdsig.c (write_corefile): Likewise.

	* hurd/hurdsig.c (write_corefile): Pass cttyid port to crash server.

	* sysdeps/mach/hurd/fpathconf.c: RPC takes int pointer, not long int.

	* sysdeps/mach/hurd/_exit.c (_hurd_exit): Pass sigcode arg to
	proc_mark_exit.
	* sysdeps/mach/hurd/dl-sysdep.c (_exit): Likewise.

	* sysdeps/mach/hurd/wait4.c: Pass sigcode arg to proc_wait.

	* sysdeps/mach/hurd/rename.c: Pass new flag to dir_rename.

	* hurd/hurdfault.c (_hurdsig_fault_catch_exception_raise): Use struct
	hurd_signal_detail.
	* hurd/catch-exc.c (_S_catch_exception_raise): Likewise.
	* hurd/hurd-raise.c (_hurd_raise_signal): Likewise.
	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler):
	Likewise.
	* sysdeps/mach/hurd/setitimer.c (restart_itimer): Likewise.

	* hurd/hurd/signal.h: Fix _hurd_exception2signal prototype.

	* hurd/hurdsig.c (write_corefile): Take const struct
	hurd_signal_detail * arg.  Pass all details to crash_dump_task.
	(_hurd_internal_post_signal): Pass DETAIL to write_corefile.
	(_hurd_internal_post_signal: suspend): Pass code and error to
	proc_mark_stop.

	* hurd/hurdprio.c (_hurd_priority_which_map): Pass flags arg to
	proc_getprocinfo by reference.
1996-05-08 02:07:47 +00:00
Roland McGrath b928942eaa Updated from /src/gmp-2.0 1996-05-07 21:04:52 +00:00
Miles Bader fc38dc5be9 (headers): Add linewrap.h. 1996-05-07 19:27:44 +00:00
Roland McGrath ad41463d4e Regenerated: autoconf configure.in 1996-05-07 19:19:14 +00:00
Roland McGrath 93a470c71a Tue May 7 10:51:52 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* wcsmbs/wcwidth.c, wcsmbs/wcswidth.c: Fixed typos.

	* sysdeps/unix/sysv/linux/sys/mman.h: Fixed typo.

	* sysdeps/stub/sched_getp.c: Add missing #include <sys/types.h>.
	* sysdeps/stub/sched_sets.c: Likewise.
	* sysdeps/stub/sched_setp.c: Likewise.
	* sysdeps/stub/sched_rr_gi.c: Likewise.
	* sysdeps/stub/sched_gets.c: Likewise.

	* hurd/hurdsig.c: Use struct hurd_signal_detail.
	* hurd/hurd/fd.h (_hurd_fd_error): Likewise.
	* sysdeps/mach/hurd/sysd-stdio.c (fd_fail): Likewise.
1996-05-07 14:57:38 +00:00
Roland McGrath 4ddc1f9dd6 Mon May 6 09:51:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdio/linewrap.c: New file.
	* stdio/Makefile (routines): Add linewrap.
	* stdio/stdio.h [__USE_GNU]: Declare line_wrap_stream,
	line_unwrap_stream.

Mon May  6 14:53:26 1996  Ulrich Drepper  <drepper@cygnus.com>

	* time/strftime.c (week): Add third parameter telling how
	many days must be in new year so that it is called week 1.
	(Following ISO 8601).
	Correct computation for %U and %V formats when day was first
	day of the week.
	(strftime): Implement %V format according to Spec1170.

	* hurd/hurd/sigpreempt.h (struct hurd_signal_preempter): Change
	prototype of `preempter' elt to use struct hurd_signal_detail.

	* hurd/hurd/signal.h (struct hurd_signal_detail): New type.
	(struct hurd_sigstate): Make `pending_data' member an array of that.
	Use the new type in several decls.
1996-05-07 14:49:30 +00:00
Roland McGrath 28ca945828 Mon May 6 09:51:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdio/linewrap.c: New file.
	* stdio/Makefile (routines): Add linewrap.
	* stdio/stdio.h [__USE_GNU]: Declare line_wrap_stream,
	line_unwrap_stream.
1996-05-07 14:49:12 +00:00
Thomas Bushnell, BSG cee8df033b *** empty log message ***
Mon May  6 17:01:09 1996  Michael I. Bushnell, p/BSG  <mib@gnu.ai.mit.edu>

	* hurd/hurd/signal.h (_hurd_intr_rpc_mach_msg): New declaration.
1996-05-06 21:02:30 +00:00
Thomas Bushnell, BSG 3d46e1cd0a (_hurd_intr_rpc_mach_msg): New declaration. 1996-05-06 21:00:43 +00:00
Roland McGrath 339841f985 Mon May 6 14:53:26 1996 Ulrich Drepper <drepper@cygnus.com>
* time/strftime.c (week): Add third parameter telling how
	many days must be in new year so that it is called week 1.
	(Following ISO 8601).
	Correct computation for %U and %V formats when day was first
	day of the week.
	(strftime): Implement %V format according to Spec1170.
1996-05-06 14:31:45 +00:00
Roland McGrath db2286f6d9 * locale/setlocale.c (_nl_C_name): Variable removed.
* locale/C_name.c: New file.
	(_nl_C_name): Put it here instead.
	* locale/Makefile (aux): Add C_name.

	* sysdeps/mach/hurd/dl-sysdep.c (open): Don't pass io port in
	auth_user_authenticate rpc.
	(open): Avoid using strtol in digit conversion for "fd/N" magic.
	(_dl_sysdep_start): Likewise for memobj name in magic switches.

	* elf/Makefile (reloc-link): New variable.
	(dl-allobjs.so): New target, link together $(rtld-routines).
	(librtld.so): Depend on that instead of the rtld components.
	(generated): Add dl-allobjs.so.
1996-05-04 13:57:05 +00:00
Roland McGrath 8f0c527e13 Sat May 4 05:44:25 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* hurd/hurd-raise.c (_hurd_raise_signal): Pass sigcode in msg_sig_post
	rpc.

	* hurd/hurdmsg.c (_S_msg_set_environment): Use argz.h functions
	instead of _hurd_split_args.
	(_S_msg_*_exec_flags): Functions removed.
	(_S_msg_startup_dosync): Stub removed.

Sat May  4 02:11:55 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/mach/hurd/ptrace.c: Set _hurdsig_traced instead of
	EXEC_TRACED bit in _hurd_exec_flags.
	Pass sigcode arg in msg_sig_post_untraced rpc.

	* sysdeps/mach/hurd/access.c: Don't pass io port in
	auth_user_authenticate rpc.

	* posix/sched.h: Fix typos.

	* sysdeps/mach/hurd/fork.c: Use new critical section lock.
	Clear _hurdsig_traced instead of EXEC_TRACED.

	* sysdeps/stub/nanosleep.c (nanosleep): Fix typo.

	* wcsmbs/wcstol.c: Find strtol.c in ../stdlib.
	* wcsmbs/wcstof.c: Find strtod.c in ../stdlib.
	* wcsmbs/wcstod.c: Likewise.
	* wcsmbs/wcstold.c: Likewise.

	* wcsmbs/wcwidth.h: Find cname-lookup.h in ../wctype.

	* string/envz.c (envz_entry): Use const.
	(envz_get, envz_remove): Likewise.
	(envz_entry): Return char *, not const char *.

	* string/envz.h: Fix decl.

	* string/argz-create.c: Use const in prototype.
	* string/argz-next.c: Likewise.

	* sysdeps/mach/hurd/sigprocmask.c: Pass sigcode arg to msg_sig_post.
	* sysdeps/mach/hurd/i386/sigreturn.c: Likewise.
	* sysdeps/mach/hurd/sigsuspend.c: Likewise.
	* sysdeps/mach/hurd/kill.c: Likewise.

	* hurd/hurdexec.c (_hurd_exec): Use new critical section lock.
	* hurd/catch-exc.c (_S_catch_exception_raise): Likewise.
	* hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Likewise.
	* hurd/thread-cancel.c (hurd_thread_cancel, hurd_check_cancel):
	Likewise.
	* sysdeps/mach/hurd/jmp-unwind.c (_longjmp_unwind): Likewise.
	* sysdeps/mach/hurd/sigaction.c: Likewise.

	* sysdeps/mach/hurd/errnos.awk: Don't use ARGV in comment; it can
	change meaninglessly.

	* hurd/hurd/signal.h (struct hurd_sigstate): Replace critical section
 	flag with a spin lock.
	(_hurd_critical_section_lock): Use spin_try_lock on that to see if we
 	get it.  No need to take SS->lock at all.
	(_hurd_critical_section_unlock): Unlock SS->critical_section_lock
	instead of clearing the old flag member.
	* hurd/hurdsig.c (_hurd_internal_post_signal): Use spin_lock_locked to
	test the critical section state.

	* hurd/hurdinit.c (_hurd_init): Set _hurdsig_traced from the intarray.

	* hurd/hurdkill.c (_hurd_sig_post): Pass 0 sigcode in msg_sig_post.

	* hurd/hurdsig.c (_hurd_internal_post_signal): Test _hurdsig_traced
 	instead of testing (_hurd_exec_flags & EXEC_TRACED).
	(_S_msg_sig_post): Take sigcode arg and pass it through.
	(_S_msg_sig_post_untraced): Likewise.
	(reauth_proc): Don't pass proc port in auth_user_authenticate.

	* hurd/setauth.c (_hurd_setauth): Don't pass object ports in
	auth_user_authenticate RPCs, just the one-off rendezvous port.
	* hurd/dtable.c (reauth_dtable): Likewise.
	* hurd/hurdlookup.c (__hurd_file_name_lookup_retry): Likewise.

	* hurd/hurdexec.c (_hurd_exec): Pass 0 flags to file_exec.
	Pass sigcode arg to msg_sig_post.

	* string/argz.h (argz_create): Use const in prototype.

	* hurd/hurdinit.c (_hurd_proc_init): Test _hurdsig_traced instead of
	testing (_hurd_exec_flags & EXEC_TRACED).
	Pass sigcode arg to msg_sig_post.

	* hurd/hurd.h: Declare _hurdsig_traced.

	* string/argz.h (__argz_next): Cast ENTRY before returning it.

	* hurd/hurd/signal.h (_hurd_critical_section_unlock): Pass sigcode arg
	to msg_sig_post.

	* hurd/path-lookup.c: New file.
	* hurd/Makefile (routines): Add path-lookup.
	* hurd/hurd/lookup.h: Declare file_name_path_scan,
	hurd_file_name_path_lookup.
	* hurd/hurd.h: Declare file_name_path_lookup.

	* sysdeps/mach/hurd/select.c: The io_select rpc no longer has a TAG_ID
	argument.  Instead, use a separate reply port for each RPC and put them
	all in a port set to wait for slow replies.
1996-05-04 09:46:57 +00:00
Roland McGrath 7a12c6bba7 Fri May 3 13:32:08 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* intl/Makefile (CPPFLAGS): Change $(nlsdir) to $(i18ndir) in
	LOCALE_ALIAS_PATH.

Fri May  3 03:14:02 1996  Ulrich Drepper  <drepper@cygnus.com>

	* intl/Makefile (routines): Add l10nflist and explodename.
	(distribute): Add loadinfo.h and locale.alias.
	(install-others): New variable to install locale.alias.

	* intl/dcgettext.c, intl/finddomain.c, intl/gettextP.h,
	intl/loadmsgcat.c: Adapt for upcoming gettext-0.10.13.  Some code
	is now shared with the locale implementation.

	* intl/explodename.c, intl/l10nflist.c, intl/loadinfo.h: New file.
        Extracted from finddomain.c.  This is also used in the locale
        implementation.

	* intl/locale.alias: New file.  Locale alias database compatible
        with X Window System's locale alias file.  Can now be used in
        locale and gettext code.

	* libio/stdio.h: Add prototypes for asprint and vasprintf.

	* locale/C-collate.c, locale/C-ctype.c, locale/C-messages.c,
	locale/C-monetary.c, locale/C-numeric.c, locale/C-time.c: Add new
	field in structure with name of locale ("C" in this case).

	* locale/Makefile (routines): Add findlocale.

	* locale/findlocale.c: New file.  Instead of trying to load the
        directly described file we now try to be much smarter when this
        fails.  Use the same code as gettext does.

	* locale/loadlocale.c, locale/setlocale.c: Rewrite to know about
        new loading scheme.

	* locale/localeinfo.h: Adapt prototypes and declarations for new
	setlocale implementation.  Remove definition of u32_t type.  We
	now use u_int32_t from <sys/types.h>.

	* locale/programs/charset.h (ILLEGAL_CHAR_VALUE): Provide type
        with constant.

	* locale/programs/config.h, locale/lc-collate.c,
        locale/localeinfo.h, locale/programs/ld-collate.c,
        locale/programs/ld-ctype.c, locale/programs/ld-messages.c,
        locale/programs/ld-monetary.c, locale/programs/ld-numeric.c,
        locale/programs/ld-time.c, locale/weight.h, string/strcoll.c:
        Change to use u_int32_t and u_int16_t.

	* locale/programs/localedef.c (construct_output_path): Change name
        of output locale to contain normalized form of the character set
        portion.

	* string/Makefile (routines): Add agrz-ctsep and argz-next.
	(tests): Add tst-strlen.

	* string/argz-ctsep.c: New file.  Implement reverse operation
	from argz-stringify.

	* string/argz-next.c: Non-inline version of function from argz.h.

	* string/argz.h, string/envz.h: Make usable as global header file.

	* string/envz.c: Fix declarations to use size_t where prototypes
	say so.

	* string/tst-strlen.c: New file.  Another test for critical
        situation in strlen implementations.

	* sysdeps/i386/i586/strlen.S: Fix bug with highest byte in word
        being zero.

	* wctype/test_wctype.c: Fix controlling comparison after change to
        32 bit character class array.

Fri May  3 12:53:12 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* sysdeps/unix/sysv/linux/sys/socket.h: Remove spurious doubled line.

Thu May  2 22:50:52 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/getpriority.c: New file.
	* sysdeps/unix/sysv/linux/syscalls.list: Add s_getpriority.

Thu May  2 22:41:31 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/fpu_control.h (_FPU_DEFAULT):
	Disable all exceptions.

Thu May  2 22:33:14 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/m68k/fpu/e_acos.c, sysdeps/m68k/fpu/e_acosf.c,
	sysdeps/m68k/fpu/e_fmod.c, sysdeps/m68k/fpu/e_fmodf.c,
	sysdeps/m68k/fpu/isinfl.c, sysdeps/m68k/fpu/isnanl.c,
	sysdeps/m68k/fpu/s_atan.c, sysdeps/m68k/fpu/s_atanf.c,
	sysdeps/m68k/fpu/s_frexp.c, sysdeps/m68k/fpu/s_frexpf.c,
	sysdeps/m68k/fpu/s_ilogb.c, sysdeps/m68k/fpu/s_ilogbf.c,
	sysdeps/m68k/fpu/s_isinf.c, sysdeps/m68k/fpu/s_isinff.c,
	sysdeps/m68k/fpu/s_ldexp.c, sysdeps/m68k/fpu/s_ldexpf.c,
	sysdeps/m68k/fpu/s_modf.c, sysdeps/m68k/fpu/s_modff.c: Don't
	define __NO_MATH_INLINES, which is already defined on command
	line.

Thu May  2 22:18:28 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/e_j0f.c (__ieee754_j0f, __ieee754_y0f):
	Replace 0x80000000 by 0x48000000.
	* sysdeps/libm-ieee754/e_j1f.c (__ieee754_j1f): Likewise.

Thu May  2 21:30:33 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sunrpc/svc_simple.c: Make global variable pl local to
	registerrpc.

Thu May  2 00:24:04 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* time/Makefile (tz-cflags): New variable.
	(CFLAGS-tzfile.c): New variable.
	(CFLAGS-zic.c): Add $(tz-cflags).
	(tz-cc): Remove variable.
	($(objpfx)tzfile.o, $(objpfx)zic.o): Remove targets.

	* sysdeps/mach/hurd/getcwd.c: Jump out of both loops when we find a
	name, instead of checking for reaching end of buffer, which happens
	when the match is the last entry in the buffer.
1996-05-03 17:44:31 +00:00
Roland McGrath 9e72046871 Thu May 2 00:24:04 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* time/Makefile (tz-cflags): New variable.
	(CFLAGS-tzfile.c): New variable.
	(CFLAGS-zic.c): Add $(tz-cflags).
	(tz-cc): Remove variable.
	($(objpfx)tzfile.o, $(objpfx)zic.o): Remove targets.
1996-05-03 16:46:40 +00:00
Noah Friedman 8962ae8d6b Don't report an error if mkdir fails because a directory was created by another process. 1996-05-03 07:37:52 +00:00
Roland McGrath f5936b69da Wed May 1 09:10:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c: Jump out of both loops when we find a
	name, instead of checking for reaching end of buffer, which happens
	when the match is the last entry in the buffer.
1996-05-02 00:26:56 +00:00
Roland McGrath 75cd5204dd Wed May 1 09:10:04 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* time/strftime.c: Use canonical autoconf nugget for time.h+sys/time.h
	include.

Mon Apr 29 02:48:26 1996  Ulrich Drepper  <drepper@cygnus.com>

	* ctype/ctype-info.c: (__ctype_width): New variable.
	(__ctype_names): Initialize correctly without offset.

	* locale/C-collate.c, locale/C-ctype.c,
	locale/C-messages.c, locale/C-monetary.c,
	locale/C-numeric.c, locale/C-time.c: Change copyright.

	* locale/C-ctype.c (_nl_C_LC_CTYPE_class32): Correct
	endianess for initialization value.

	* locale/lc-ctype.c (current): Add parameter for offset.
	(__ctype32_b, __ctype_width): Add initialization for these
	variables.

	* locale/programs/charmap.c: Finish support for WIDTH information.
	(new_width): New function.

	* locale/programs/charset.h (width_rule): new data structure.
	(charset_t): Add elements for width information.

	* locale/programs/ld-ctype.c (locale_ctype_t): Add element
	for width information.
	(allocate_arrays): Add new argument for charset.
	(ctype_finish): Make sure all characters named in charset
	width table are known to name table.
	(ctype_output): Correct handling of class and map name
	information and write out width information.
	(find_idx): Prepare for being called with NULL pointer as
	TABLE argument.  This means only allocate name entry.
	(allocate_arrays): Correct handling of array element -1.
	Because EOF == -1 the value of element 127 must *not* be
	mirrored here.
	Fill width information from charset tables.

	* locale/programs/localedef.c (main): Correct loop over all
	categories after change of order from Thu Mar 28 14:22:51 1996.
	Add new charset argument to call of `write_all_categories'.

	* locale/programs/locales.h (ctype_finish, ctype_output): New
	charset argument.

	* locale/programs/locfile.c (write_all_categories): Call
	`ctype_output' with additional argument charset.

	* posix/getconf.c (vars): Add _POSIX_SYNC_IO, _POSIX_ASYNC_IO,
	and _POSIX_PRIO_IO definitions.

	* posix/posix2_lim.h: Add definition of _POSIX2_CHARCLASS_NAME_MAX
	and CHARCLASS_NAME_MAX.

	* posix/unistd.h: Document _POSIX_SYNC_IO, _POSIX_ASYNC_IO,
	and _POSIX_PRIO_IO.

	* stdlib/grouping.h: Prepare for use in wide string functions.

	* stdlib/stdlib.h: Correct prototypes for __strto*_internal
	functions.

	* stdlib/strtod.c: Extend for use as `wcsto{f,d,ld}'.

	* stdlib/strtol.c: Extend for use as `wcsto{l,ul,q,uq}'.

	* string/strcoll.c: Extend for use as `wcscoll'.

	* string/strxfrm.c: Extend for use as `wcsxfrm'.

	* sysdeps/generic/confname.h: Add definition of _PC_SYNC_IO,
	_PC_ASYNC_IO, _PC_PRIO_IO and _SC_CHARCLASS_NAME_MAX.

	* sysdeps/generic/stpncpy.c: Correct return value.

	* sysdeps/posix/fpathconf.c: Add handling of _PC_SYNC_IO,
	_PC_ASYNC_IO, and _PC_PRIO_IO.

	* sysdeps/posix/sysconf.c: Add handling of _SC_REALTIME_SIGNALS,
	_SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO,
	_SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC,
	_SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE,
	_SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING, _SC_SEMAPHORES,
	_SC_SHARED_MEMORY_OBJECTS, and _SC_CHARCLASS_NAME_MAX.
	* sysdeps/stub/sysconf.c: Ditto.
	* sysdeps/unix/sysv/sysv4/sysconf.c: Ditto.

	* sysdeps/unix/sysv/linux/Dist: Add sys/sysctl.h.

	* sysdeps/unix/sysv/linux/Makefile [subdir == misc]
	(sysdep_routines): Add s_sysctl and sysctl.

	* sysdeps/unix/sysv/linux/sys/mman.h: Add declaration of mremap.

	* sysdeps/unix/sysv/linux/sys/socket.h: New file.  Wrapper
	around kernel header.

	* sysdeps/unix/sysv/linux/sys/sysctl.h: New file.  Define
	interface to `sysctl' function.

	* sysdeps/unix/sysv/linux/syscalls.list: Add mremap and _sysctl.

	* sysdeps/unix/sysv/linux/sysconf.c: Add handling of
	_SC_CHARCLASS_NAME_MAX.

	* sysdeps/unix/sysv/linux/sysctl.c: new file.  Implement caller
	of _sysctl system call.

	* sysvipc/Makefile (routines): Add ftok.

	* sysvipc/ftok.c: use variable `proj_id' not `id'.  Patch by
	David Mosberger-Tang.

	* wcsmbs/Makefile (routines): Add wcpcpy, wcpncpy, wcstol,
        wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll,
        wcsxfrm, wcwidth, and wcswidth.

	* wcsmbs/wchar.h: Add declarations for wcpcpy, wcpncpy, wcstol,
        wcstoul, wcstoq, wcstouq, wcstod, wcstold, wcstof, wcscoll,
        wcsxfrm, wcwidth, and wcswidth.
	Declare internal interfaces for wcsto* functions.
	[OPTIMIZE]: Define inline functions for wcsto* functions to
	call internal interface functions.

	* wcsmbs/wcpcpy.c, wcsmbs/wcpncpy.c: New files.  Implement non-
	standard function equivalent to stpcpy/stpncpy.

	* wcsmbs/wcscoll.c: Implement `wcscoll' function by using
        `strcoll' implementation.

	* wcsmbs/wcscpy.c, wcsmbs/wcsncpy.c: Use wint_t instead of
        wchar_t.

	* wcsmbs/wcstod.c: Implement `wcstod' function by using `strtod'
        implementation.
	* wcsmbs/wcstof.c: Same for `wcstof'.
	* wcsmbs/wcstold.c: Same for `strtold'.

	* wcsmbs/wcstol.c: Implement `wcstol' function by using `strtol'
        implementation.
	* wcsmbs/wcstoq.c: Same for `wcstoq'.
	* wcsmbs/wcstoul.c: Same for `wcstoul'.
	* wcsmbs/wcstouq.c: Same for `wcstouq'.

	* wcsmbs/wcswidth.c: Implement `wcswidth' function from X/Open
        CAE.
	* wcsmbs/wcwidth.c: Ditto for `wcwidth'.
	* wcsmbs/wcwidth.h: Common function for definitions of above two
	functions.

	* wcsmbs/wcsxfrm.c: Implement `wcsxfrm function by using
        `strxfrm implementation.

	* wctype/wctype.c: Remove case for `wctype_t' being 16 bit type.

	* wctype/wctype.h (wint_t): Protect against multiple definition.
	(wctype_t): Always define as `unsigned long int'.

	* wctype.h: New file.  Wrapper around wctype/wctype.h.

	* hurd/hurdstartup.c (_hurd_split_args): Function removed.
	(_hurd_startup): Use argz functions.

	* hurd/hurdexec.c: Use argz functions.
1996-05-01 13:55:18 +00:00
Roland McGrath 5bd4495594 Tue Apr 30 17:30:46 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hurd/hurdsig.c (_hurdsig_abort_rpcs): Add timeout argument to
	interrupt_operation call.
	(_hurdsig_interrupt_timeout): New variable.

	* hurd/report-wait.c (describe_number): Correctly allocate space
	in DESCRIPTION for the digits in I.
1996-05-01 09:03:01 +00:00
Miles Bader d3dc731b47 (describe_number): Correctly allocate space in DESCRIPTION for the digits in I. 1996-05-01 01:01:48 +00:00
Miles Bader 06f82985cb Regenerated from ../sysdeps/mach/hurd/errnos.awk ../manual/errno.texi ../../mach/mach/message.h ../../mach/mach/kern_return.h ../../mach/mach/mig_errors.h ../../mach/device/device_types.h 1996-04-30 21:33:05 +00:00
Roland McGrath c508104668 Regenerated from ../sysdeps/mach/hurd/errnos.awk ../manual/errno.texi /gd4/gnu/mach/mach/message.h /gd4/gnu/mach/mach/kern_return.h /gd4/gnu/mach/mach/mig_errors.h /gd4/gnu/mach/device/device_types.h 1996-04-29 06:49:03 +00:00
Roland McGrath 392d7920cd Mon Apr 29 00:11:59 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* errno.h [!__error_t_defined] (error_t): New type.
	* sysdeps/mach/hurd/errnos.awk: #define __error_t_defined after the
	typedef in errnos.h.

	* string/envz.c, string/envz.h: New files.
	* string/argz.h, string/argz-append.c, string/argz-count.c,
	string/argz-create.c, string/argz-delete.c, string/argz-extract.c,
	string/argz-insert.c, string/argz-stringify.c: New files.
	* string/Makefile (routines): Add envz, argz-*.
	(headers): Add argz.h, envz.h.
1996-04-29 05:21:53 +00:00
Roland McGrath 7b3547eb0f Sun Apr 28 14:14:35 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/i386/Makefile: New file.

Wed Apr 24 17:35:30  Ulrich Drepper  <drepper@cygnus.com>

	* inet/netinet/in.h, socket/sys/socket.h: Move to
	sysdeps/generic/netinet/in.h, sysdeps/generic/sys/socket.h.
	* netinet/in.h, sys/socket.h: Remove file.

	* misc/Makefile (routines): Add fdatasync.

	* posix/Makefile (headers): Add sched.h.
	(routines): Add nanosleep, sched_setp, sched_getp, sched_sets,
	sched_gets, sched_yield, sched_primax, sched_primin, sched_rr_gi.

	* posix/getconf.c (vars): Add entries for _POSIX_REALTIME_SIGNALS,
	_POSIX_PRIORITY_SCHEDULING, _POSIX_TIMERS, _POSIX_ASYNCHRONOUS_IO,
	_POSIX_PRIORITIZED_IO, _POSIX_SYNCHRONIZED_IO, _POSIX_FSYNC,
	_POSIX_MAPPED_FILES, _POSIX_MEMLOCK, _POSIX_MEMLOCK_RANGE,
	_POSIX_MEMORY_PROTECTION, _POSIX_MESSAGE_PASSING,
	_POSIX_SEMAPHORES, _POSIX_SHARED_MEMORY_OBJECTS.

	* posix/sched.h: New file.  Header for POSIX scheduling interface.

	* posix/unistd.h: Describe options from POSIX.4.
	Add declaration of fdatasync.

	* sysdeps/generic/confname.h: Add definition for
	 _SC_REALTIME_SIGNALS, _SC_PRIORITY_SCHEDULING, _SC_TIMERS,
	_SC_ASYNCHRONOUS_IO, _SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO,
	_SC_FSYNC, _SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE,
	_SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING,
	_SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS.

	* sysdeps/generic/fdatasync.c: New file.  Default implementation
	simply uses fsync.

	* sysdeps/generic/netinit/in.h: Moved to here from inet/netinet/in.h.

	* sysdeps/generic/schedbits.h: New file.  System dependent
	defintion for POSIX.4 scheduling interface.

	* sysdeps/generic/sys/socket.h: Moved to here from socket/sys/socket.h.

	* sysdeps/stub/nanosleep.c, sysdeps/stub/sched_getp.c,
	sysdeps/stub/sched_gets.c, sysdeps/stub/sched_primax.c,
	sysdeps/stub/sched_primin.c, sysdeps/stub/sched_rr_gi.c,
	sysdeps/stub/sched_setp.c, sysdeps/stub/sched_sets.c,
	sysdeps/stub/sched_yield.c: New file:  Stub implementation
	for systems missing these POSIX.4 system calls.

	* sysdeps/unix/sysv/linux/gnu/types.h,
	sysdeps/unix/sysv/linux/ioctls.h: Use kernel header for
	data type definitions.

	* sysdeps/unix/sysv/linux/netinet/in.h: New file.  Linux
	specific version.

	* sysdeps/unix/sysv/linux/posix_opt.h: New file.  Define POSIX
	options applicable for Linux.

	* sysdeps/unix/sysv/linux/syscalls.list: Add definitions for
	fdatasync, nanosleep, sched_setparam, sched_getparam,
	sched_setscheduler, sched_getscheduler, sched_yield,
	sched_get_priority_max, sched_get_priority_min, and
	sched_rr_get_interval.

	* sysdeps/unix/sysv/linux/sysconf.c: Add handling of POSIX.4
	options.

	* sysdeps/unix/sysv/linux/termbits.h: Use kernel headers.

	* time/sys/time.h: Remove definition of `struct timespec'.

	* time/time.h (struct timespec): Move definition to here.

 	variable, LUCKY, to use instead of setting D to -1 (which fouls
1996-04-28 18:25:22 +00:00
Roland McGrath b1794a285f Thu Apr 25 15:49:57 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/hurd/getcwd.c (__getcwd): When we find a match in
	the scan for a name, avoid doing another readdir (which overwrites
	NENTRIES, and was resulting in a bogus ENOENT).

	* sysdeps/mach/hurd/fcntl.c (__fcntl): Add missing break after F_SETFL.
1996-04-26 06:03:18 +00:00
Roland McGrath b2c8be1fdf Fri Apr 26 01:55:07 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* malloc/mcheck.c (mabort): Use __libc_fatal only #ifdef _LIBC.

Wed Apr 24 00:22:42 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* stdio/internals.c (seek_to_target): Set errno if seek function
	returns the wrong offset.

	* wcsmbs/wcsrtombs.c [! EILSEQ] (EILSEQ): Define to EINVAL.
	* wcsmbs/wcrtomb.c: Likewise.

	* stdio-common/vfprintf.c: Include errno.h.
1996-04-26 05:57:35 +00:00
Roland McGrath 8555e89e37 Added trailing blank line. 1996-04-26 05:55:41 +00:00
Miles Bader 072d114510 (__getcwd): When we find a match in the scan for a name, avoid doing another readdir (which overwrites NENTRIES, and was resulting in a bogus ENOENT). 1996-04-25 21:37:46 +00:00
Miles Bader 8ec2f30995 (__fcntl): Add missing break after F_SETFL. 1996-04-25 20:21:20 +00:00
Roland McGrath 7f77e07b00 Wed Apr 24 00:22:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdio/internals.c (seek_to_target): Set errno if seek function
	returns the wrong offset.
1996-04-25 18:13:38 +00:00
Roland McGrath 66aeca9cfb Tue Apr 23 21:09:14 1996 Miles Bader <miles@gnu.ai.mit.edu>
* hurd/hurdsig.c (signal_allowed): For SIGIO/SIGURG, add a new
 	variable, LUCKY, to use instead of setting D to -1 (which fucks
 	things up).
1996-04-24 09:03:11 +00:00
Roland McGrath 80bcb41041 Wed Apr 24 00:22:42 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* wcsmbs/wcsrtombs.c [! EILSEQ] (EILSEQ): Define to EINVAL.
	* wcsmbs/wcrtomb.c: Likewise.
1996-04-24 05:28:34 +00:00
Miles Bader e0637da1c7 (signal_allowed): For SIGIO/SIGURG, add a new variable, LUCKY, to use instead of setting D to -1 (which fucks things up). 1996-04-24 03:28:51 +00:00
Roland McGrath 9a8c0d4f41 Tue Apr 23 15:56:56 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* config.h.in (HAVE_REGEX): New macro.

	* sysdeps/unix/syscalls.list: Add statfs, fstatfs.
	* io/Makefile (headers): Add sys/statfs.h, statfsbuf.h.
	(routines): Add statfs, fstatfs.
	* sysdeps/mach/hurd/statfs.c: New file.
	* sysdeps/mach/hurd/fstatfs.c: New file.
	* sysdeps/stub/fstatfs.c: New file.
	* sysdeps/stub/statfs.c: New file.
	* io/sys/statfs.h: New file.
	* sysdeps/generic/statfsbuf.h: New file.
	* sysdeps/unix/sysv/linux/statfsbuf.h: New file.

Tue Apr 23 00:06:47 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* malloc/Makefile (gmalloc-routines): Add valloc back here.
	(dist-routines): Remove it here.
	* malloc/valloc.c [_MALLOC_INTERNAL && GMALLOC_INHIBIT_VALLOC]
	(ELIDE_VALLOC): Define it.
	[! ELIDE_VALLOC]: Make whole file conditional on this.
	* malloc/malloc.h (valloc): Make decl conditional on
	[!GMALLOC_INHIBIT_VALLOC] instead of [!emacs].

Mon Apr 22 00:02:19 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* MakeTAGS: Include version.mk.
	(po/SYS_libc.pot): Add missing / in sed s cmd.
1996-04-24 00:58:47 +00:00
Roland McGrath b0d20a87b5 Sat Apr 20 18:13:00 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* Makerules (no-whole-archive): Test $(have-no-whole-archive), not
	$(libc_cv_ld_no_whole_archive).

Sat Apr 20 17:07:17 1996  Ulrich Drepper  <drepper@cygnus.com>

	* assert/assert.h, ctype/ctype.h, dirent/dirent.h, errno.h,
	grp/grp.h, io/fcntl.h, io/sys/stat.h, io/utime.h, locale/locale.h,
	math/math.h, misc/nlist.h, misc/sgtty.h, misc/sys/file.h,
	misc/sys/ioctl.h, misc/sys/uio.h, posix/sys/times.h,
	posix/sys/types.h, posix/sys/utsname.h, posix/sys/wait.h,
	posix/tar.h, posix/wordexp.h, pwd/pwd.h, resource/sys/vlimit.h,
	resource/sys/vtimes.h, setjmp/setjmp.h, signal/signal.h,
	stdio-common/printf.h, stdlib/alloca.h, stdlib/stdlib.h,
	string/string.h, sysdeps/generic/sigaction.h,
	sysdeps/generic/sigset.h, sysdeps/generic/sys/ptrace.h,
	sysdeps/generic/sys/ptrace.h, sysdeps/unix/bsd/osf/sigaction.h,
	sysdeps/unix/sysv/linux/sys/ptrace.h,
	sysdeps/unix/sysv/minix/sigaction.h,
	sysdeps/unix/sysv/sco3.2.4/sigaction.h,
	sysdeps/unix/sysv/sysv4/sigaction.h,
	sysdeps/unix/sysv/sysv4/sigset.h, termios/termios.h,
	time/sys/time.h, time/time.h: Fix copyright comment.

	* sysdeps/generic/dl-sysdep.c (_dl_sysdep_start): If uids and gids are
	not given in stack aux vector, fetch them with syscalls.
1996-04-21 00:27:19 +00:00
Roland McGrath a641835acd Fri Apr 19 00:49:44 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* stdlib/rpmatch.c (rpmatch: try): Take new arg NOMATCH, return value
 	for nonmatching nonerror (instead of !MATCH).
	(rpmatch): Use it, so we return -1 when NOEXPR doesn't match either.

	* resolv/getnetnamadr.c (getnetbyaddr): Use u_int32_t instead of
	unsigned long for variable NET2.

	* time/etcetera, time/europe, time/solar89: Updated from ADO's 96e.

Tue Apr  9 14:37:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/Makefile, catgets/catgets.c, catgets/catgetsinfo.h,
	catgets/config.h, catgets/gencat.c, catgets/nl_types.h,
	catgets/open_catalog.c: New files.  Implementation of XPG4
	compliant catgets() function and needed tools.
	* Makefile (subdirs): Add catgets.

Thu Apr 18 23:36:11 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* math/Makefile (CPPFLAGS): Append -D__NO_MATH_INLINES.

Wed Apr 10 20:48:43 1996  Ulrich Drepper  <drepper@cygnus.com>

	* stdio-common/vfprintf.c: Correct some typos.

	* sysdeps/libm-ieee754/w_gammaf.c, sysdeps/libm-ieee754/w_lgamma.c,
	sysdeps/libm-ieee754/w_lgammaf.c: Reference signgam instead of
	__signgam.

Thu Apr 18 21:07:27 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* Makerules (no-whole-archive): New variable.
	(build-shlib): Use it.
	* elf/Makefile (libdl.so): Use it.
	* configure.in (libc_cv_ld_no_whole_archive): New check for
	--no-whole-archive.
	* config.make.in (have-no-whole-archive): New variable.

	* stdio-common/printf_fp.c: Increase fudge factor for BIGNUM_SIZE calc
	from 3 to 4.

	* Make-dist: Include version.mk.
	(version, release): Variables removed.
	* Makeconfig (version.mk): New target.

Fri Apr 19 01:42:18 1996  Ulrich Drepper  <drepper@cygnus.com>

	* locale/Makefile (headers): Add langinfo.h.
	(CPPFLAGS): Remove -Iliblib.
1996-04-20 00:05:25 +00:00
Roland McGrath f24f4dc82d Mon Apr 15 16:49:04 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* malloc/memalign.c, malloc/malloc.h [__DJGPP__ == 1]: Elide memalign
	function and its declaration.
1996-04-16 01:18:23 +00:00
Per Bothner 147e600987 * config.guess: Combine two OSF1 rules. Also recognize field test versions. From mjr@zk3.dec.com. * config.guess (dgux): Use /usr/bin/uname rather than uname, because GNU uname does not support -p. From pmr@pajato.com. 1996-04-13 00:06:54 +00:00
Miles Bader e2a501ab7c *** empty log message ***
Wed Apr 10 14:13:45 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* hurd/sigunwind.c (_hurdsig_longjmp_from_handler): Store
 	MACH_PORT_DEAD in the thread reply-port variable before destroying
 	the signal handler's reply port, to avoid infinite recursion.
1996-04-10 18:36:39 +00:00
Miles Bader 574ce5e4e4 (_hurdsig_longjmp_from_handler): Store MACH_PORT_DEAD in the thread reply-port variable before destroying the signal handler's reply port, to avoid infinite recursion. 1996-04-10 18:36:02 +00:00
Roland McGrath b84095feb4 Mon Apr 8 18:27:17 1996 Miles Bader <miles@gnu.ai.mit.edu>
* sysdeps/mach/gettimeofday.c (__gettimeofday): Don't fail if the
	user passes in TZ, just zero it (emacs passes in a dummy variable,
	and rms says the hurd should be the one to change).
1996-04-09 09:02:55 +00:00
Miles Bader a1a5fa67c6 (__gettimeofday): Don't fail if the user passes in TZ, just zero it (emacs passes in a dummy variable, and rms says the hurd should be the one to change). 1996-04-08 23:35:57 +00:00
Michael Meissner 2e6878f7b1 Add Solaris on PowerPC support 1996-04-08 20:19:10 +00:00
Roland McGrath 3125073e10 Sun Apr 7 10:37:30 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* sysdeps/mach/hurd/fork.c: Don't leak send rights to the child's proc
 	port in the parent.
Fri Apr  5 17:43:41 1996  Miles Bader  <miles@gnu.ai.mit.edu>
1996-04-07 17:44:31 +00:00
Roland McGrath d70576891e * sysdeps/mach/hurd/fork.c (__fork): Don't leak send-rights to the
child's proc port in the parent.
1996-04-06 10:03:22 +00:00
Miles Bader 786db2208e *** empty log message ***
Fri Apr  5 17:43:41 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/i386/sigreturn.c (__sigreturn): Store
	MACH_PORT_DEAD in the thread reply-port variable before destroying
	the signal handler's reply port to avoid infinite recursion.
	* sysdeps/mach/hurd/mig-reply.c (__mig_dealloc_reply_port): Only
	attempt to destroy PORT if it's a valid port name.
1996-04-06 01:51:07 +00:00
Miles Bader aa0e1b599c (__mig_dealloc_reply_port): Only attempt to destroy PORT if it's a valid port name. 1996-04-06 01:49:21 +00:00
Roland McGrath 2e516341fa Wed Apr 3 17:10:44 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* extra-lib.mk: Put libs in $(common-objpfx) instead of $(objpfx).
	* Makerules ($(install-lib) rules): Find libs with $(common-objpfx)
	instead of $(objpfx).
1996-04-04 01:18:10 +00:00
Roland McGrath 299a95b9f0 Tue Apr 2 21:27:01 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* posix/glob.c (glob_pattern_p): Avoid scanning past eos if
	the pattern ends with a backslash and quoting is enabled.
	* posix/fnmatch.c (fnmatch): Likewise; return FNM_NOMATCH for such
 	patterns.
1996-04-03 16:31:49 +00:00
Roland McGrath 30de3b18a5 Mon Apr 1 13:34:55 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* stdio-common/tst-printf.c (main): Add new test case.

	* sysdeps/generic/setenv.c (unsetenv): Use old-style definition.

Mon Apr  1 11:39:10  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdlib/strtod.c (STRTOD): Fix handling of American style FP
	numbers.

	* stdio-common/vfprintf.c (vfprintf): Don't increment format
	string pointer twice after seeing `*'.

Sun Mar 31 17:31:54 1996  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* MakeTAGS (po/SYS_libc.pot): Prepend header processed from
 	po/header.pot.

Sun Mar 31 18:07:32 1996  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* locale/Makefile (others, install-bin): Compiling locale works
        again.
	(locale-modules): locale has no --dump option anymore.  Remove
	ctypedump.

	* locale/programs/config.h: Don't declare euidaccess.
	Use #include_next to get libc's config.h.

	* locale/programs/ctypedump.c: Not needed anymore.  Dump option
	of locale is removed.

	* locale/programs/locale.c: Adapt for new locale implementation.

	* stdio-common/_itoa.h (_itoa_word): Define as inline function.
	* stdio-common/_itoa.c (_itoa_lower_digits, _itoa_upper_digits):
	Don't declare static because used in _itoa_word inline function.

	* stdio-common/printf-parse.h: Prepare for use in wide-char
	stdio implementation.
	(find_spec): Take additional argument to work with mbrlen instead
	of mblen.
	(parse_one_spec): Ditto.

	* stdio-common/printf-prs.c: Prepare for use in wide-char
	stdio implementation.

	* stdio-common/printf.h: Mark change for wide-char handling.
	Changing it now would result in incompatibilities.

	* stdio-common/vfprintf.c: New and fast implementation.

	* wcsmbs/Makefile (routines): Remove pre-ISO C multibyte functions
	mbsadvance, mbscat, mbschr, mbscmp, mbscpy, mbsdup, mbslen,
	mbsncat, mbsncmp, mbsncpy, mbsrchr, mbstomb.
	Change wcswcs to wcsstr.
	Add wmemchr, wmemcmp, wmemcpy, wmemmove, wmemset, btowc, wctob,
	mbsinit, mbrlen, mbrtowc, wcrtomb, mbsrtowcs, wcsrtombs.

	* wcsmbs/btowc.c, wcsmbs/mbrlen.c, wcsmbs/mbrtowc.c,
        wcsmbs/mbsinit.c, wcsmbs/mbsrtowcs.c, wcsmbs/wchar.h,
        wcsmbs/wcrtomb.c, wcsmbs/wcsrtombs.c, wcsmbs/wcsstr.c,
        wcsmbs/wctob.c, wcsmbs/wmemchr.c, wcsmbs/wmemcmp.c,
        wcsmbs/wmemcpy.c, wcsmbs/wmemmove.c, wcsmbs/wmemset.c: New
        function according to ISO C amendment 1.
	* wchar.h: Wrapper around "wcsmbs/wchar.h".

	* wcsmbs/wcscat.c, wcsmbs/wcschr.c, wcsmbs/wcscmp.c,
        wcsmbs/wcscpy.c, wcsmbs/wcscspn.c, wcsmbs/wcsdup.c,
        wcsmbs/wcslen.c, wcsmbs/wcsncat.c, wcsmbs/wcsncmp.c,
        wcsmbs/wcsncpy.c, wcsmbs/wcspbrk.c, wcsmbs/wcsrchr.c,
        wcsmbs/wcsspn.c, wcsmbs/wcstok.c: Changed to conform with ISO C
        amendment 1.

	* wcsmbs/mbsadvance.c, wcsmbs/mbscat.c, wcsmbs/mbschr.c,
        wcsmbs/mbscmp.c, wcsmbs/mbscpy.c, wcsmbs/mbsdup.c,
        wcsmbs/mbslen.c, wcsmbs/mbsncat.c, wcsmbs/mbsncmp.c,
        wcsmbs/mbsncpy.c, wcsmbs/mbsrchr.c, wcsmbs/mbstomb.c,
        wcsmbs/mbstr.h, wcsmbs/wcstr.h, wcsmbs/wcswcs.c: Removed.
        Implement functions from early drafts, not part of final standard.

Sun Mar 31 16:50:41 1996  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* setjmp/setjmp.h (jmp_buf): Change gratuitous struct tag name to
	__jmp_bug_tag so its C++ implicit typedef does not conflict with the
	__jmp_buf typedef.

	* Makerules (BUILD_CFLAGS) [! objdir]: Use $(..)config.h when
	compiling in the source directories.

Fri Mar 29 16:26:35 1996  Roland McGrath  <roland@whiz-bang.gnu.ai.mit.edu>

	* sysdeps/libm-ieee754/w_gamma.c: Use signgam instead of __signgam.
	* sysdeps/libm-ieee754/s_signgam.c: Undo last change.
1996-04-02 13:27:17 +00:00
Roland McGrath b80510574c Fri Mar 29 11:29:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/libm-ieee754/s_signgam.c (signgam): Renamed to __signgam,
	with weak alias signgam.
1996-03-29 21:23:58 +00:00
Roland McGrath 27e00f3f17 Thu Mar 28 18:32:34 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* Makeconfig (+cflags, +gcc-nowarn): Use gcc flags unconditionally.
1996-03-29 21:19:15 +00:00
Roland McGrath ac157523bd Thu Mar 28 18:32:34 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* Makeconfig (+cflags, +gcc-nowarn): Use gcc flags unconditionally.
1996-03-29 21:13:27 +00:00
Doug Evans 46a7c97679 (aux): Delete another duplicate entry. 1996-03-29 01:49:55 +00:00
Doug Evans 0daf278545 (aux): Delete duplicate entry. 1996-03-29 01:46:52 +00:00
Roland McGrath b7407d6362 wctype.h mention 1996-03-29 01:04:20 +00:00
Roland McGrath c475b8f594 * sunrpc/rpc_main.c (main): Call textdomain. 1996-03-28 21:00:28 +00:00
Roland McGrath 7a1c652d58 * MakeTAGS (XGETTEXTFLAGS-siglist.pot, XGETTEXTFLAGS-errlist.pot): Add
--no-location.
	(all-pot): Replace $(subdirs) files with $P/subdirs.pot.
	($P/subdirs.pot): New target.
	($P/SYS_libc.pot): Add -n switch.
1996-03-28 20:55:37 +00:00
Roland McGrath a141dd342d * locale/locale.h (LC_*): Values reordered to match Linux libc. 1996-03-28 19:34:47 +00:00
Roland McGrath 8c1442d02f Thu Mar 28 14:22:51 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/mach/hurd/kill.c: If proc_pid2task gives us MACH_PORT_NULL
	the process is a zombie; send no messages and return success.
1996-03-28 19:30:33 +00:00
Roland McGrath 43efc10333 Thu Mar 28 11:53:26 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* wctype/cname-lookup.h: Find localeinfo.h in ../locale.
	* wctype/wctype.c: Likewise.
	* wctype/wctrans.c: Likewise.
1996-03-28 17:19:40 +00:00
Roland McGrath ffcf96345f Thu Mar 28 03:00:43 1996 Roland McGrath <roland@whiz-bang.gnu.ai.mit.edu>
* locale/nl_langinfo.c (nl_langinfo): Use DATA->values instead of
	DATA->strings.

	* Makerules (BUILD_CFLAGS): Remove $(common-objpfx) from config.h.

	* configure.in (.weakext check): Fix asm code to use .weakext instead
	of .weak!  Fix bogus test calls.
	* configure: Regenerated.
1996-03-28 09:48:58 +00:00
Roland McGrath 0393dfd6c2 * locale/programs/xmalloc.c: Test _LIBC as well as STDC_HEADERS.
* locale/programs/ld-collate.c (collate_finish): Use error_at_line
	instead of error_with_loc.

	* locale/weight.h: Use u_int32_t instead of u32_t.
	* string/strxfrm.c: Likewise.

	* string/strxfrm.c: Find weight.h in ../locale; don't #include
	"localeinfo.h".
	* string/strcoll.c: Likewise.

	* locale/programs/simple-hash.c, locale/programs/simple-hash.h,
 	locale/programs/xmalloc.c, locale/programs/xstrdup.c: Helper functions
 	for locale related programs.
 	locale/programs/charmap.c, locale/programs/charset.c,
 	locale/programs/charset.h, locale/programs/config.h,
 	locale/programs/ctypedump.c, locale/programs/ld-collate.c,
 	locale/programs/ld-ctype.c, locale/programs/ld-messages.c,
 	locale/programs/ld-monetary.c, locale/programs/ld-numeric.c,
 	locale/programs/ld-time.c, locale/programs/linereader.c,
 	locale/programs/linereader.h, locale/programs/locale.c,
 	locale/programs/localedef.c, locale/programs/locales.h,
 	locale/programs/locfile-kw.gperf, locale/programs/locfile-kw.h,
 	locale/programs/locfile-token.h, locale/programs/locfile.c,
 	locale/programs/locfile.h, locale/programs/stringtrans.c,
 	locale/programs/stringtrans.h: Implementation of locale related
 	programs.
1996-03-28 09:16:15 +00:00
Roland McGrath 19bc17a905 Thu Mar 28 03:25:10 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* intl/Makefile (copysrc): Add missing > in sed cmd.

Sat Mar 23 17:52:49 1996  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* Makeconfig: Rename Makefile variable nlsdir to i18ndir and
	change value to $(datadir)/i18n.  `nls' is not an appropriate
	name.

	* Makefile (subdirs): Add new subdir wctype.

	* ctype/ctype-info.c: Add new global variable __ctype_names
	and initialize from _nl_C_LC_CTYPE.

	* ctype/ctype.h: In P1003.3b/D11 `alnum' is a separate character
        class.  Use bit 11.
	[_ISbit]: Protect definition of bitmasks because they are also
	used in wctype.h.

	* libio/genops.c (_IO_sputbackc, _IO_sungetc): Clear EOF flag
	after successfully pushing back a character.

	Fundamental changes in locale implementation.  Almost nothing
	from the old code is used anymore.
	* locale/charmap.c, locale/collate.c, locale/config.h,
 	locale/ctypedump.c, locale/hash.h, locale/keyword.gperf,
 	locale/keyword.h, locale/loadlocale.c, locale/locale-ctype.c,
 	locale/locale.c locale/localeconv.c, locale/localedef.c,
 	locale/localedef.h, locale/locfile-hash.c, locale/locfile-lex.c,
 	locale/locfile-parse.c, locale/messages.c, locale/monetary.c,
 	locale/numeric.c, locale/setlocale.c, locale/token.h,
 	locale/xmalloc.c: Removed.

	* locale/Makefile: Update for new locale implementation with
	program source code distributed in subdir.

	* locale/categories.def, locale/iso-4217.def: Updated file
        for new locale implementation.

	* locale/langinfo.h: Updated for new locale implementation.
	(ERA_D_T_FMT, ERA_T_FMT): New official values according to
	P1003.2b/D11.
	(_NL_COLLATE_NRULES, _NL_COLLATE_RULES, _NL_COLLATE_HASH_SIZE,
	_NL_COLLATE_HASH_LAYERS, _NL_COLLATE_TABLE_EB,
	_NL_COLLATE_TABLE_EL, _NL_COLLATE_UNDEFINED, _NL_COLLATE_EXTRA_EB,
	_NL_COLLATE_EXTRA_EL, _NL_CTYPE_NAMES_EB, _NL_CTYPE_NAMES_EL,
	_NL_CTYPE_HASH_SIZE, _NL_CTYPE_HASH_LAYERS, _NL_CTYPE_CLASS_NAMES,
	_NL_CTYPE_MAP_NAMES, _NL_CTYPE_WIDTH): New internal values for
	extended LC_CTYPE and LC_COLLATE implementation.

	* locale/simple-hash.c, locale/simple-hash.h, locale/xmalloc.c,
 	locale/xstrdup.c: Helper functions for locale related programs.

	* locale/C-collate.c, locale/C-ctype.c,
        locale/C-messages.c, locale/C-monetary.c,
        locale/C-numeric.c, locale/C-time.c,
        locale/lc-collate.c, locale/lc-ctype.c,
        locale/lc-messages.c, locale/lc-monetary.c,
        locale/lc-numeric.c, locale/lc-time.c: New implementation of locale
        functions, and new generated "C" locale data.

	* locale/loadlocale.c: Now handles word fields in locale binary
        automatically by changing the endianess if necessary.

	* locale/localeinfo.h (LIMAGIC): Changed magic number because
	of incompatible changes.
	(locale_data): Changed definition to allow word as a value type.
	(coll_sort_rule): Values for collation sorting mode.
	(_NL_CURRENT_WORD): New macro to access word value of locale entry.
	(__collate_table, __collate_extra): Declare new global variables
	for collation tables.

	* locale/programs/charmap-kw.gperf, locale/programs/charmap-kw.h,
        locale/programs/charmap.c, locale/programs/charset.c,
        locale/programs/charset.h, locale/programs/config.h,
        locale/programs/ctypedump.c, locale/programs/ld-collate.c,
        locale/programs/ld-ctype.c, locale/programs/ld-messages.c,
        locale/programs/ld-monetary.c, locale/programs/ld-numeric.c,
        locale/programs/ld-time.c, locale/programs/linereader.c,
        locale/programs/linereader.h, locale/programs/locale.c,
        locale/programs/localedef.c, locale/programs/locales.h,
        locale/programs/locfile-kw.gperf, locale/programs/locfile-kw.h,
        locale/programs/locfile-token.h, locale/programs/locfile.c,
        locale/programs/locfile.h, locale/programs/stringtrans.c,
        locale/programs/stringtrans.h: Implementation of locale related
        programs.

	* locale/weight.h: Functions to access collation tables.

	* posix/unistd.h: Define _POSIX2_LOCALEDEF.

	* stdio-common/printf_fp.c: Fix bug with printing certain numbers
	< 10^-1.  Reported by Bill Metzenthen.

	* stdio-common/tfformat.c: Add new test for above bug.

	* string/strcoll.c, string/strxfrm.c: Real implementation of
        string collation according to ISO C.

	* wctype/Makefile, wctype/cname-lookup.h, wctype/iswctype.c,
        wctype/test_wctype.c, wctype/towctrans.c, wctype/wcfuncs.c,
        wctype/wctrans.c, wctype/wctype.c, wctype/wctype.h: New files.
        Implementation of wide character classes and mapping.
1996-03-28 08:30:38 +00:00
Roland McGrath 53f770e0f9 Wed Mar 27 14:52:11 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* elf/rtld.c (dl_main): Call _dl_sysdep_start_cleanup after
	_dl_relocate_object loop.  Avoid relocating RTLD_MAP in that loop, and
	do it individually if necessary after _dl_sysdep_start_cleanup call.

	* stdlib/Makefile (mpn-routines): Add divrem.

Tue Mar 26 22:54:14  Ulrich Drepper  <drepper@gnu.ai.mit.edu>

	* stdio-common/printf_fp.c (__printf_fp): Use mpn_divmod
	instead of __mpn_divmod.

Wed Mar 27 10:26:21 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: Must establish global pointer before
 	address of __sigsetjmp_aux can be loaded.

Wed Mar 27 02:23:19 1996 Ulrich Drepper <drepper@gnu.ai.mit.edu>

	* sysdeps/i386/i586/memset.S: New file.  Highly optimized
	version for i586 contributed by Torbjorn Granlund.
	Adapted for use as bzero.
	* sysdeps/i386/i586/bzero.S: Use sysdeps/i386/i586/memset.S
	code to implement bzero().

Tue Mar 26 20:01:17 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* stdlib/Makefile (mpn-routines): Remove divmod.
1996-03-27 23:23:59 +00:00
Roland McGrath 3ef987a23c Updated from /src/gmp-1.937 1996-03-27 20:18:04 +00:00
Brendan Kehoe c0621444ed * sysdeps/unix/sysv/sysv4/solaris2/sparc/sysdep.h (NO_UNDERSCORES): Use
wrapped with #ifndef, to avoid config.h defining it.
Tue Mar 26 15:40:14 1996  Brendan Kehoe  <brendan@zen.org>

	* sysdeps/unix/sysv/sysv4/solaris2/sparc/sysdep.h (NO_UNDERSCORES): Use
	wrapped with #ifndef, to avoid config.h defining it.
1996-03-27 00:46:37 +00:00
Roland McGrath 81e4d60c7b * malloc/realloc.c (_realloc_internal): In case of growing large
block, leave _heaplimit zero across _malloc_internal call.
1996-03-25 21:23:16 +00:00
Roland McGrath 5775972dec Mon Mar 25 13:10:04 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* intl/Makefile [gettext-srcdir]: Use gpl2lgpl.sed on copied sources.
1996-03-25 18:10:46 +00:00
Roland McGrath 857fa1b81d Mon Mar 25 03:35:16 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* malloc/malloc.c (morecore): Don't attempt recursive realloc of info
	table when _heaplimit==0 during realloc growing large block.

	* MakeTAGS (extract): Remove /dev/null from xgettext command line.
	(text-srcs): New variable: extract only C sources from $(tags_sources).
	(po/$(domain).pot): Depend on that.
	If it's empty, cp /dev/null $@ instead of $(extract).

	* misc/Makefile (headers): Add iovec.h.
	* sysdeps/unix/sysv/linux/iovec.h: New file.
	* sysdeps/generic/iovec.h: New file.
	* misc/sys/uio.h (struct iovec): Type replaced with #include <iovec.h>.

	* configure.in (NO_UNDERSCORES check): Use AC_TRY_LINK instead of
	AC_TRY_COMPILE.

	* misc/sys/cdefs.h [__USE_BSD] (const, signed, volatile): Move these
	macros inside [! __STDC__].

	* stdlib/rpmatch.c: New file.
	* stdlib/Makefile (routines): Add rpmatch.
	* stdlib/stdlib.h [__USE_SVID]: Declare rpmatch.

	* MakeTAGS (MSGJOIN): Variable removed.
	(po/SYS_libc.pot): Use $(XGETTEXT) instead of $(MSGJOIN).

Wed Mar 20 20:08:46 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysdep.h: Don't define C_SYMBOL_NAME.

	* sysdeps/unix/sysv/linux/m68k/sysdep.h: Don't define
	NO_UNDERSCORES.
1996-03-25 17:48:26 +00:00
Roland McGrath 25c931a18c Contents were duplicated by botched patching. 1996-03-25 06:26:06 +00:00
Doug Evans edc1601c51 (os): sunos[3456] -> sunos[34], sunos[56] have their own entries 1996-03-21 23:26:26 +00:00
Roland McGrath 036a272548 Thu Mar 21 11:19:15 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* mach/devstream.c (input): Translate \r to \n on input.
1996-03-21 16:23:21 +00:00
Roland McGrath ce563359af Wed Mar 20 11:28:49 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* stdio-common/printf.h, stdio-common/printf_fp.c,
	stdio-common/vfprintf.c: Place const in parameter list at
	correct place.

Wed Mar 20 23:58.12 1996  Ulrich Drepper <drepper@gnu.ai.mit.edu>

	* sysdeps/i386/ldbl2mpn.c: Copy of former version of
	sysdeps/ieee754/ldbl2mpn.c.
	* sysdeps/ieee754/ldbl2mpn.c: Remove i386 specific unification.
	Reported by Andreas Schwab.

Wed Mar 20 19:58:43 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* version.c: Include version.h to define RELEASE and VERSION macros.
	(__libc_release, __libc_version): Use them.
	* locale/SYS_libc.c (_libc_intl_domainname): Include ../version.h and
	use VERSION to define domainname as `SYS_GNU_libc-VERSION'.
	* Make-dist (rel+vers): Snarf the macro values from version.h.

	* MakeTAGS (extract): Pass $(XGETTEXTFLAGS-$(@F)).
	(XGETTEXTFLAGS-siglist.pot, XGETTEXTFLAGS-errlist.pot): New variables;
	pass -a for these files.

	* Makerules (po/%.pot): Depend on FORCE target so recursive make is
	always run.
1996-03-21 15:20:37 +00:00
Roland McGrath 38bb44bc19 Mon Mar 18 22:54:32 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/wait3.c: New file.
	* sysdeps/unix/sysv/linux/wait.c: Use the bsd4.4 wait, not the
	one from sysdeps/posix.
1996-03-21 00:37:31 +00:00
Roland McGrath d7193325fc * sysdeps/unix/bsd/waitflags.h (WNOREAP): New macro. 1996-03-20 17:01:27 +00:00
Roland McGrath 948c3e72ec Wed Mar 20 09:42:11 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* elf/dl-load.c (_dl_map_object_from_fd): Always set L->l_type; if not
	lt_executable, then lt_library.
	* elf/rtld.c (dl_main): Don't set NEW->l_type after _dl_map_object.

Wed Mar 20 00:08:23 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/syscalls.list: Remove gtty and stty.

Tue Mar 19 16:31:06 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/termbits.h (CRTSCTS, CBAUDEX, VEOL,
	VEOL2, VMIN, VTIME): Corrected.
	(PAGEOUT, WRAP, VDSUSP): Deleted.

	* sysdeps/unix/readdir.c: Test [! _DIRENT_HAVE_D_RECLEN] instead of
	(sizeof (DP->d_name) > 1) to detect fixed-size dir entries.
1996-03-20 14:50:57 +00:00
Roland McGrath 213afb94b6 Regenerated
Thu Mar 14 06:01:07 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* posix/glob.c (glob): In GLOB_BRACE brace expansion, fix buffer size
	calculation to include trailing invariant portion.  Don't use alloca;
	instead use a dynamic auto array for GCC, malloc for non-GCC.
	Handle nested braces properly.
1996-03-20 03:12:40 +00:00
Roland McGrath 4d58533340 * sysdeps/i386/fpu/__math.h (asinh): Call log1p instead of __log1p.
* math/math.h: Move M_* constants before __math.h include.
	[__NO_MATH_INLINES || __OPTIMIZE__]: Include __math.h only #if this.

	* misc/efgcvt_r.c (ecvt_r): Declare floor, log10, fabs as weak extern.
	If log10 is not defined (i.e. no -lm), use stupid loop instead.
1996-03-20 00:18:44 +00:00
Roland McGrath d3669add24 * features.h (__FAVOR_BSD): Define only if _BSD_SOURCE is defined
and no other _*_SOURCE macro is.
	(_GNU_SOURCE): Don't define by default.
	* libc-symbols.h (_GNU_SOURCE): Define it.
1996-03-19 21:59:41 +00:00
Roland McGrath c8cf0b14ed * configure.in (alpha*-*-linux*): Unset $gnu_ld and $elf. 1996-03-19 21:23:40 +00:00
Roland McGrath c224a18a90 * config.make.in (weak-symbols): Variable removed.
* configure.in (--with-weak-symbols): Option removed.
	(NO_UNDERSCORES, HAVE_ASM_WEAK_DIRECTIVE, HAVE_ASM_WEAKEXT_DIRECTIVE):
	New tests.
	* config.h.in (HAVE_WEAK_SYMBOLS): #undef removed.
	(NO_UNDERSCORES, HAVE_ASM_WEAK_DIRECTIVE, HAVE_ASM_WEAKEXT_DIRECTIVE):
	New #undefs.
	* libc-symbols.h: Use them instead of HAVE_WEAK_SYMBOLS.

	* inet/inet_lnaof.c: Use u_int32_t instead of u_long.
	* inet/inet_mkadr.c: Likewise.
	* inet/inet_net.c: Likewise.
	* inet/inet_netof.c: Likewise.
	* inet/rcmd.c: Likewise.
	* inet/arpa/inet.h: Likewise.
	* inet/netinet/in.h: Likewise.
	* inet/netinet/tcp.h: Likewise.
	* inet/protocols/rwhod.h: Likewise.
	* inet/protocols/talkd.h: Likewise.
	* resolv/inet_addr.c: Likewise.

	* sunrpc/rpc/xdr.h (IXDR_GET_LONG, IXDR_PUT_LONG): change casts to
 	u_int32_t (instead of u_long).
1996-03-19 21:10:11 +00:00
Roland McGrath b20e47cb14 Tue Mar 19 14:18:42 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/bsd/pause.c: Moved to sysdeps/unix/common/pause.c.

Mon Mar  4 20:17:28 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/adjtime.c: Use INT_MAX instead of LONG_MAX.

	* sysdeps/unix/sysv/Makefile (sysdep_routines): Don't add s_getdents.

	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add mount,
	umount.

	* sysdeps/alpha/__math.h (atan, cabs): New functions.

	* sysdeps/unix/sysv/linux/alpha/sigsuspend.S: new file (syscall
 	expects set-value, not pointer to it).

Sun Feb 25 22:36:10 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/profil-counter.h: New file.

	* gmon/gmon.c (__bb_head): new variable.
	(write_hist, write_call_graph, write_bb_counts): new functions.
	(_mcleanup): modified to call above functions instead of directly
 	writing out gmon.out.
	* gmon/sys/gmon.h (struct __bb): New type.
	(struct gmonhdr): Type removed.
	(struct gmonparam): New member `log_hashfraction'.
	(GMONVERSION): Macro removed.

	* gmon/sys/gmon_out.h, gmon/bb_exit_func.c,
 	sysdeps/generic/bb_init_func.c, sysdeps/alpha/bb_init_func.S: new
 	files.
	* gmon/Makefile (headers): Add sys/gmon_out.h.
	(routines): Add bb_init_func, bb_exit_func.

	* gmon/mcount.c: Avoid integer division.

Wed Feb 21 23:56:41 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/alpha/setjmp.S: switched order in which sp and fp are
 	passed to match what __sigsetjmp_aux() expects.

Tue Feb 20 11:33:46 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/syscalls.list (select, bind,
 	connect, getpeername, getsockname, listen, recv, recvfrom,
 	recvmsg, send, sendmsg, sendto, setsockopt, shutdown, socketpair):
 	added to override same-name assembly file in the parent directory.

	* stdlib/stdlib.h: add include of sys/types.h in front of random
 	etc declarations to ensure int32_t is declared.

	* stdlib/random.c, stdlib/random_r.c: replaced "long int" by int32_t
	where 32 bit integers are required.  Also change LONG_MAX into
	0x7fffffff since the intent is to turn off the sign bit in a
	32 bit integer.

	* time/offtime.c (__offtime): Use Paul Eggert's code to deal
	with very large values for "days" (e.g., 64 bit values).

Mon Feb 19 22:22:12 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* stdlib/stdlib.h (__random, __random_r, random_r, struct
 	random_data): use int32_t instead of `long int'.

Sat Feb 17 11:29:29 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/ioperm.c: new file.

	* sysdeps/alpha/ffs.S: new file.

	* sysdeps/alpha/fabs.c: File removed.

	* time/tzfile.c (__tzfile_read): counter variable is i, *not*
	num_transitions!

	* time/offtime.c: make capable of dealing with very large (64 bit)
 	time_t values.  Use old algorithm until a year is reached that
	is an integer multiple of 400, then use DAYS_PER_400_YEARS to
	do the remainder in a single division.

	* sysdeps/generic/ffs.c (ffs): fix variable declarations to
	be unsigned int, not unsigned long.

	* string/test-ffs.c (main): add test case with all upper bits
	set.

	* stdlib/tst-strtol.c: add tests cases for machines where
	sizeof(long)==8.

	* stdlib/testrand.c (main): disallow rand() to return negative
 	integers.

	* stdlib/testmb.c (main): fix format to use %lx instead of %x.

	* stdlib/stdlib.h: on 64 bit machines, declare
	struct random_data, __random(),  __random_r, and random_r to
	return "int" instead of "long int".

	* stdlib/random_r.c: 64 bit machines use "int" instead of "long
 	int".  Similarly, use INT_MAX instead of LONG_MAX.

	* stdlib/random.c: on 64 bit machines, randtbl[] and __random[]
 	need to operate on "int" instead of "long int".

	* locale/locfile-hash.c (compute_hashval): make shifted constant
	a long to avoid loosing bits on 64 bit machines.

	* dirent/tst-seekdir.c (main): fix confusing comment; print
	a line to mark point where directory is rewound.

Fri Feb 16 15:01:49 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* time/strftime.c (strftime): any hour > 11 is PM (not > 12!).

Wed Feb 14 00:21:17 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* sysdeps/unix/sysv/linux/alpha/Makefile,
	sysdeps/unix/sysv/linux/alpha/brk.S,
	sysdeps/unix/sysv/linux/alpha/fpu_control.c,
	sysdeps/unix/sysv/linux/alpha/fpu_control.h,
	sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
	sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
	sysdeps/unix/sysv/linux/alpha/pipe.S,
	sysdeps/unix/sysv/linux/alpha/setfpucw.c,
	sysdeps/unix/sysv/linux/alpha/sigprocmask.c,
	sysdeps/unix/sysv/linux/alpha/speed.c,
	sysdeps/unix/sysv/linux/alpha/start.S,
	sysdeps/unix/sysv/linux/alpha/syscall.S,
	sysdeps/unix/sysv/linux/alpha/syscalls.list,
	sysdeps/unix/sysv/linux/alpha/alpha/regdef.h,
	sysdeps/unix/sysv/linux/alpha/sysdep.S,
	sysdeps/unix/sysv/linux/alpha/sysdep.h: New files.

	* sysdeps/alpha/setjmp_aux.c (__sigsetjmp_aux): restore return
 	address register before returning (gcc 2.7.1 doesn't do it,
 	presumably because $26 is declared as a global variable).

	* sysdeps/unix/sysv/linux/sys/mman.h: msync was missing "flags"
	argument.

	* sysdeps/unix/alarm.c (alarm): do roundup using test & increment
	instead of multiplication.

	* sysdeps/posix/sleep.c (sleep): initialize sa_mask to mask of
	currently blocked signals instead of the empty mask to ensure
	that execution of alarm handler occurs with none of the currently
	blocked signals enabled.

	* sysdeps/unix/alpha/sysdep.h: new file (adapted from OSF/1 version).

	* sysdeps/unix/bsd/osf/alpha/sysdep.h: include
 	sysdeps/unix/alpha/sysdep.h and removed definitions now in that file.

	* sysdeps/alpha/divrem.S, sysdeps/alpha/htonl.S,
	sysdeps/alpha/htons.S, sysdeps/alpha/machine-gmon.h,
	sysdeps/alpha/_mcount.S, sysdeps/alpha/ntohl.s, sysdeps/alpha/ntohs.s,
	sysdeps/alpha/strlen.S: New files.

	* sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S,
	sysdeps/alpha/divqu.S, sysdeps/alpha/divrem.m4,
	sysdeps/alpha/macros.m4, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S,
	sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S, sysdeps/alpha/strlen.c:
 	Removed.

	* sysdeps/generic/sbrk.c (__sbrk): argument is of type ptrdiff_t, not
	int.

	* sysdeps/alpha/__longjmp.c (__longjmp): moved dummy while loop
	to end of function to avoid a jump across NOPs.

	* sysdeps/alpha/Makefile (sysdep_routines): Removed all rules
 	pertaining to integer division/remainder routines since new code
 	doesn't require them.

	* sunrpc/xdr_mem.c, sunrpc/xdr_stdio.c: Use 4 instead of sizeof(long)
	where 32 bit quantities are consumed/stored.  Various other minor
	64-bit cleanups (casting).

	* sunrpc/xdr.c (xdr_int): test for sizeof(int)==4 to determine
 	whether xdr_long or xdr_short should be used to encode an int.
  	Notice that an xdr_long is 4 bytes independent of the architecture
	(otherwise no Alpha could interoperate with existing NFS servers,
 	for example).  Ditto for enums.

	* sunrpc/svc_udp.c (svcudp_recv): changed test from 4*sizeof(u_long)
	to 16 since it really wants 16 bytes.

	* sunrpc/svc.c (maskp): changed from u_long* to u_int32*.

	* sunrpc/rpc_cmsg.c (xdr_callmsg), sunrpc/svc_authux.c: increment
	"buf" pointer by casting it to a char* first since a long* may be 8
 	bytes or more and oa->oa_length may be any multiple of 4.

	* sunrpc/rpc/xdr.h (IXDR_GET_LONG, IXDR_PUT_LONG): change casts to
 	u_int32_t (instead of u_long).

	* sunrpc/clnt_udp.c (clntudp_call): replaced sizeof(u_long) by 4
	since it really is testing for 32 bits.  Fixed casts to use
	u_int32 instead of u_long.
	* sunrpc/xdr_rec.c: Likewise.

	* sunrpc/clnt_tcp.c (clnttcp_call): replaced u_long by u_int32.
	* sunrpc/rpc/auth.h: Likewise.

	* limits.h (LONG_MAX, LONG_MIN, ULONG_MAX): use 64 bit values
	for Alpha.

Tue Mar 19 13:27:49 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* sysdeps/i386/fpu/__math.h: New file.
	Contributed by John C. Bowman <bowman@hagar.ph.utexas.edu>.

Sun Mar 17 00:28:16 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/posix/clock.c: Don't multiply the return value by
	CLOCKS_PER_SEC or CLK_TCK.

	* sysdeps/mach/hurd/getcwd.c: Fail with ENOENT if a parent directory
	scan finds no match.

	* posix/unistd.h (setpgrp): Declare no-arg version unless __FAVOR_BSD.
	* misc/bsd-compat.c (setpgrp): New function, two arg version.
	* sysdeps/stub/setpgid.c: Remove setpgrp alias.
	* sysdeps/mach/hurd/setpgid.c: Likewise.
	* sysdeps/unix/sysv/sysv4/setpgid.c: Likewise.
	* sysdeps/unix/common/syscalls.list (setpgid): Remove setpgrp alias.
	* sysdeps/unix/sysv/irix4/syscalls.list: Likewise.
	* sysdeps/unix/sysv/linux/setpgrp.c: Obsolete file removed.
	* posix/setpgrp.c (setpgrp): New file.
	* posix/Makefile (routines): Add setpgrp.

Tue Feb  6 12:46:29 1996  David Mosberger-Tang  <davidm@azstarnet.com>

	* libc-symbols.h (weak_alias, weak_symbol): added definitions
	for ECOFF (HAVE_ECOFF).
1996-03-19 20:21:54 +00:00
Roland McGrath e384537164 Mon Mar 18 13:20:46 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* elf/Makefile (rtld-link): New canned sequence.
	(ld.so, ld-linux.so.1): Use it.  Pass -soname option.

	* sysdeps/i386/setjmp.S (__setjmp): Define compatibility entry point.

Sun Mar 17 23:15:32 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/tcgetpgrp.c,
	sysdeps/unix/sysv/linux/tcsetpgrp.c: New files.
1996-03-18 18:32:47 +00:00
Roland McGrath 9b431e31e1 Sun Mar 17 07:19:33 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* db/Makefile (CFLAGS-hash_func.c): New variable; pass -Wno-unused.
	(CFLAGS): Append -Wno-unitialized.

	* sysdeps/alpha/memchr.S: New file.
	* sysdeps/alpha/memchr.c: Obsolete file removed.
	* string/tester.c: Soup up memchr tests.
1996-03-17 12:36:52 +00:00
1539 changed files with 88254 additions and 31651 deletions
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+2988 -6484
View File
File diff suppressed because it is too large Load Diff
+10878
View File
File diff suppressed because it is too large Load Diff
+382
View File
@@ -0,0 +1,382 @@
Frequently Asked Question on GNU C Library
As every FAQ this one also tries to answer questions the user might have
when using the package. Please make sure you read this before sending
questions or bug reports to the maintainers.
The GNU C Library is very complex. The building process exploits the
features available in tools generally available. But many things can
only be done using GNU tools. Also the code is sometimes hard to
understand because it has to be portable but on the other hand must be
fast. But you need not understand the details to use GNU C Library.
This will only be necessary if you intend to contribute or change it.
If you have any questions you think should be answered in this document,
please let me know.
--drepper@cygnus.com
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q1] ``What systems does the GNU C Library run on?''
[Q2] ``What compiler do I need to build GNU libc?''
[Q3] ``When starting make I get only error messages.
What's wrong?''
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
or higher is required for this script'. What can I do?''
[Q5] ``Do I need a special linker or archiver?''
[Q6] ``Do I need some more things to compile GNU C Library?''
[Q7] ``When I run `nm -u libc.so' on the produced library I still
find unresolved symbols? Can this be ok?''
[Q8] ``Can I replace the libc on my Linux system with GNU libc?''
[Q9] ``I expect GNU libc to be 100% source code compatible with
the old Linux based GNU libc. Why isn't it like this?''
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
systems?''
[Q12] ``The `gencat' utility cannot process the input which are
successfully used on my Linux libc based system. Why?''
[Q13] ``How do I configure GNU libc so that the essential libraries
like libc.so go into /lib and the other into /usr/lib?''
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q1] ``What systems does the GNU C Library run on?''
[A1] {UD} This is difficult to answer. The file `README' lists the
architectures GNU libc is known to run *at some time*. This does not
mean that it still can be compiled and run on them in the moment.
The systems glibc is known to work on in the moment and most probably
in the future are:
*-*-gnu GNU Hurd
i[3456]86-*-linux Linux-2.0 on Intel
m68k-*-linux Linux-2.0 on Motorola 680x0
alpha-*-linux Linux-2.0 on DEC Alpha
Other Linux platforms are also on the way to be supported but I need
some success reports first.
If you have a system not listed above (or in the `README' file) and
you are really interested in porting it, contact
<bug-glibc@prep.ai.mit.edu>
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q2] ``What compiler do I need to build GNU libc?''
[A2] {UD} It is (almost) impossible to compile GNU C Library using a
different compiler than GNU CC. A lot of extensions of GNU CC are
used to increase the portability and speed.
But this does not mean you have to use GNU CC for using the GNU C
Library. In fact you should be able to use the native C compiler
because the success only depends on the binutils: the linker and
archiver.
The GNU CC is found like all other GNU packages on
ftp://prep.ai.mit.edu/pub/gnu
or better one of the many mirror sites.
You always should try to use the latest official release. Older
versions might not have all the features GNU libc could use.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q3] ``When starting `make' I get only errors messages.
What's wrong?''
[A3] {UD} You definitely need GNU make to translate GNU libc. No
other make program has the needed functionality.
Versions before 3.74 have bugs which prevent correct execution so you
should upgrade to the latest version before starting the compilation.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
or higher is required for this script'. What can I do?''
[A4] {UD} You have to get the specified autoconf version (or a later)
from your favourite mirror of prep.ai.mit.edu.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q5] ``Do I need a special linker or archiver?''
[A5] {UD} If your native versions are not too buggy you can probably
work with them. But GNU libc works best with GNU binutils.
On systems where the native linker does not support weak symbols you
will not get a really ISO C compliant C library. Generally speaking
you should use the GNU binutils if they provide at least the same
functionality as your system's tools.
Always get the newest release of GNU binutils available.
Older releases are known to have bugs that affect building the GNU C
Library.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q6] ``Do I need some more things to compile GNU C Library?''
[A6] {UD} Yes, there are some more :-).
* GNU gettext; the GNU libc is internationalized and partly localized.
For bringing the messages for the different languages in the needed
form the tools from the GNU gettext package are necessary. See
ftp://prep.ai.mit.edu/pub/gnu or better any mirror site.
* lots of diskspace (for i?86-linux this means, e.g., ~70MB).
You should avoid compiling on a NFS mounted device. This is very
slow.
* plenty of time (approx 1h for i?86-linux on i586@133 or 2.5h on
i486@66 or 4.5h on i486@33).
If you have some more measurements let me know.
* Some files depend on special tools. E.g., files ending in .gperf
need a `gperf' program. The GNU version (part of libg++) is known
to work while some vendor versions do not.
* When compiling for Linux:
+ the header files of the Linux kernel must be available in the
search path of the CPP as <linux/*.h> and <asm/*.h>.
* Some files depend on special tools. E.g., files ending in .gperf
need a `gperf' program. The GNU version (part of libg++) is known
to work while some vendor versions do not.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q7] ``When I run `nm -u libc.so' on the produced library I still
find unresolved symbols? Can this be ok?''
[A7] {UD} Yes, this is ok. There can be several kinds of unresolved
symbols:
* magic symbols automatically generated by the linker. Names are
often like __start_* and __stop_*
* symbols starting with _dl_* come from the dynamic linker
* symbols resolved by using libgcc.a
(__udivdi3, __umoddi3, or similar)
* weak symbols, which need not be resolved at all
(currently fabs among others; this gets resolved if the program
is linked against libm, too.)
Generally, you should make sure you find a real program which produces
errors while linking before deciding there is a problem.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q8] ``Can I replace the libc on my Linux system with GNU libc?''
[A8] {UD} You cannot replace any existing libc for Linux with GNU
libc. There are different versions of C libraries and you can run
libcs with different major version independently.
For Linux there are today two libc versions:
libc-4 old a.out libc
libc-5 current ELF libc
GNU libc will have the major number 6 and therefore you can have this
additionally installed. For more information consult documentation for
shared library handling. The Makefiles of GNU libc will automatically
generate the needed symbolic links which the linker will use.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q9] ``I expect GNU libc to be 100% source code compatible with
the old Linux based GNU libc. Why isn't it like this?''
[A9] {DMT,UD} Not every extension in Linux libc's history was well
thought-out. In fact it had a lot of problems with standards compliance
and with cleanliness. With the introduction of a new version number these
errors now can be corrected. Here is a list of the known source code
incompatibilities:
* _GNU_SOURCE: glibc does not automatically define _GNU_SOURCE. Thus,
if a program depends on GNU extensions or some other non-standard
functionality, it is necessary to compile it with C compiler option
-D_GNU_SOURCE, or better, to put `#define _GNU_SOURCE' at the beginning
of your source files, before any C library header files are included.
This difference normally manifests itself in the form of missing
prototypes and/or data type definitions. Thus, if you get such errors,
the first thing you should do is try defining _GNU_SOURCE and see if
that makes the problem go away.
For more information consult the file `NOTES' part of the GNU C
library sources.
* reboot(): GNU libc sanitizes the interface of reboot() to be more
compatible with the interface used on other OSes. In particular,
reboot() as implemented in glibc takes just one argument. This argument
corresponds to the third argument of the Linux reboot system call.
That is, a call of the form reboot(a, b, c) needs to be changed into
reboot(c).
Beside this the header <sys/reboot.h> defines the needed constants
for the argument. These RB_* constants should be used instead of the
cryptic magic numbers.
* swapon(): the interface of this function didn't changed, but the
prototype is in a separate header file <sys/swap.h>. For the additional
argument of of swapon() you should use the SWAP_* constants from
<linux/swap.h>, which get defined when <sys/swap.h> is included.
* errno: If a program uses variable "errno", then it _must_ include header
file <errno.h>. The old libc often (erroneously) declared this variable
implicitly as a side-effect of including other libc header files. glibc
is careful to avoid such namespace pollution, which, in turn, means that
you really need to include the header files that you depend on. This
difference normally manifests itself in the form of the compiler
complaining about the references of the undeclared symbol "errno".
* Linux-specific syscalls: All Linux system calls now have appropriate
library wrappers and corresponding declarations in various header files.
This is because the syscall() macro that was traditionally used to
work around missing syscall wrappers are inherently non-portable and
error-prone. The following tables lists all the new syscall stubs,
the header-file declaring their interface and the system call name.
syscall name: wrapper name: declaring header file:
------------- ------------- ----------------------
bdflush bdflush <sys/kdaemon.h>
create_module create_module <sys/module.h>
delete_module delete_module <sys/module.h>
get_kernel_syms get_kernel_syms <sys/module.h>
init_module init_module <sys/module.h>
syslog ksyslog_ctl <sys/klog.h>
* lpd: Older versions of lpd depend on a routine called _validuser().
The library does not provide this function, but instead provides
__ivaliduser() which has a slightly different interfaces. Simply
upgrading to a newer lpd should fix this problem (e.g., the 4.4BSD
lpd is known to be working).
* resolver functions/BIND: like on many other systems the functions of
the resolver library are not included in the libc itself. There is
a separate library libresolv. If you find some symbols starting with
`res_*' undefined simply add -lresolv to your call of the linker.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
[A10] {UD} The GNU C library has a format for the UTMP and WTMP file
which differs from what your system currently has. It was extended to
fulfill the needs of the next years when IPv6 is introduced. So the
record size is different, fields might have a different position and
so reading the files written by functions from the one library cannot
be read by functions from the other library. Sorry, but this is what
a major release is for. It's better to have a cut now than having no
means to support the new techniques later.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
systems?''
[A11] {UD} These constants come from the old BSD days and are not used
today anymore (even the Linux based glibc does not implement the handling
although the constants are defined).
Instead GNU libc contains the zone database handling and compatibility
code for POSIX TZ environment variable handling.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q12] ``The `gencat' utility cannot process the input which are
successfully used on my Linux libc based system. Why?''
[A12] {UD} Unlike the author of the `gencat' program which is distributed
with Linux libc I have read the underlying standards before writing the
code. It is completely compatible with the specification given in
X/Open Portability Guide.
To ease the transition from the Linux version some of the non-standard
features are also present in the `gencat' program of GNU libc. This
mainly includes the use of symbols for the message number and the automatic
generation of header files which contain the needed #defines to map the
symbols to integers.
Here is a simple SED script to convert at least some Linux specific
catalog files to the XPG4 form:
-----------------------------------------------------------------------
# Change catalog source in Linux specific format to standard XPG format.
# Ulrich Drepper <drepper@cygnus.com>, 1996.
#
/^\$ #/ {
h
s/\$ #\([^ ]*\).*/\1/
x
s/\$ #[^ ]* *\(.*\)/\$ \1/
}
/^# / {
s/^# \(.*\)/\1/
G
s/\(.*\)\n\(.*\)/\2 \1/
}
-----------------------------------------------------------------------
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[Q13] ``How do I configure GNU libc so that the essential libraries
like libc.so go into /lib and the other into /usr/lib?''
[A13] {UD} Like all other GNU packages GNU libc is configured to use a
base directory and install all files relative to this. If you intend
to really use GNU libc on your system this base directory is /usr. I.e.,
you run
configure --prefix=/usr <other_options>
Some systems like Linux have a filesystem standard which makes a
difference between essential libraries and others. Essential
libraries are placed in /lib because this directory is required to be
located on the same disk partition as /. The /usr subtree might be
found on another partition/disk.
To install the essential libraries which come with GNU libc in /lib
one must explicitly tell this. Autoconf has no option for this so you
have to use the file where all user supplied additional information
should go in: `configparms' (see the `INSTALL' file). For Linux the
`configparms' file should contain:
slibdir=/lib
sysconfdir=/etc
The first line specifies the directory for the essential libraries,
the second line the directory for file which are by tradition placed
in a directory named /etc.
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Answers were given by:
{UD} Ulrich Drepper, <drepper@cygnus.com>
{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
Amended by:
{RM} Roland McGrath, <roland@gnu.ai.mit.edu>
Local Variables:
mode:text
End:
+269 -187
View File
@@ -4,16 +4,13 @@ Library Maintenance
How to Install the GNU C Library
================================
Installation of the GNU C library is relatively simple.
You need the latest version of GNU `make'. Modifying the GNU C
Library to work with other `make' programs would be so hard that we
recommend you port GNU `make' instead. *Really.*
Installation of the GNU C library is relatively simple, but usually
requires several GNU tools to be installed already.
To configure the GNU C library for your system, run the shell script
`configure' with `sh'. Use an argument which is the conventional GNU
name for your system configuration--for example, `sparc-sun-sunos4.1',
for a Sun 4 running Sunos 4.1. *Note Installation:
for a Sun 4 running SunOS 4.1. *Note Installation:
(gcc.info)Installation, for a full description of standard GNU
configuration names. If you omit the configuration name, `configure'
will try to guess one for you by inspecting the system it is running
@@ -21,46 +18,6 @@ on. It may or may not be able to come up with a guess, and the its
guess might be wrong. `configure' will tell you the canonical name of
the chosen configuration before proceeding.
The GNU C Library currently supports configurations that match the
following patterns:
alpha-dec-osf1
i386-ANYTHING-bsd4.3
i386-ANYTHING-gnu
i386-ANYTHING-isc2.2
i386-ANYTHING-isc3.N
i386-ANYTHING-sco3.2
i386-ANYTHING-sco3.2v4
i386-ANYTHING-sysv
i386-ANYTHING-sysv4
i386-force_cpu386-none
i386-sequent-bsd
i960-nindy960-none
m68k-hp-bsd4.3
m68k-mvme135-none
m68k-mvme136-none
m68k-sony-newsos3
m68k-sony-newsos4
m68k-sun-sunos4.N
mips-dec-ultrix4.N
mips-sgi-irix4.N
sparc-sun-solaris2.N
sparc-sun-sunos4.N
While no other configurations are supported, there are handy aliases
for these few. (These aliases work in other GNU software as well.)
decstation
hp320-bsd4.3 hp300bsd
i386-sco
i386-sco3.2v4
i386-sequent-dynix
i386-svr4
news
sun3-sunos4.N sun3
sun4-solaris2.N sun4-sunos5.N
sun4-sunos4.N sun4
Here are some options that you should specify (if appropriate) when
you run `configure':
@@ -76,8 +33,15 @@ you run `configure':
building the GNU C Library. On some systems, the library may not
build properly if you do *not* use `gas'.
`--with-gnu-binutils'
This option implies both `--with-gnu-ld' and `--with-gnu-as'. On
systems where GNU tools are the system tools, there is no need to
specify this option. These include GNU, GNU/Linux, and free BSD
systems.
`--without-fp'
`--nfp'
Use this option if your computer lacks hardware floating point
Use this option if your computer lacks hardware floating-point
support.
`--prefix=DIRECTORY'
@@ -89,6 +53,29 @@ you run `configure':
subdirectories of `DIRECTORY'. (You can also set this in
`configparms'; see below.)
`--enable-shared'
`--disable-shared'
Enable or disable building of an ELF shared library on systems that
support it. The default is to build the shared library on systems
using ELF when the GNU `binutils' are available.
`--enable-profile'
`--disable-profile'
Enable or disable building of the profiled C library, `-lc_p'. The
default is to build the profiled library. You may wish to disable
it if you don't plan to do profiling, because it doubles the build
time of compiling just the unprofiled static library.
`--enable-omitfp'
Enable building a highly-optimized but possibly undebuggable
static C library. This causes the normal static and shared (if
enabled) C libraries to be compiled with maximal optimization,
including the `-fomit-frame-pointer' switch that makes debugging
impossible on many machines, and without debugging information
(which makes the binaries substantially smaller). An additional
static library is compiled with no optimization and full debugging
information, and installed as `-lc_g'.
The simplest way to run `configure' is to do it in the directory
that contains the library sources. This prepares to build the library
in that very directory.
@@ -141,57 +128,102 @@ work with object files for the target you configured for.
in the GNU C compiler, so you may need to compile the library with GCC.
(In fact, all of the existing complete ports require GCC.)
The current release of the C library contains some header files that
the compiler normally provides: `stddef.h', `stdarg.h', and several
files with names of the form `va-MACHINE.h'. The versions of these
files that came with older releases of GCC do not work properly with
the GNU C library. The `stddef.h' file in release 2.2 and later of GCC
is correct. If you have release 2.2 or later of GCC, use its version
of `stddef.h' instead of the C library's. To do this, put the line
`override stddef.h =' in `configparms'. The other files are corrected
in release 2.3 and later of GCC. `configure' will automatically detect
whether the installed `stdarg.h' and `va-MACHINE.h' files are
compatible with the C library, and use its own if not.
There is a potential problem with the `size_t' type and versions of
GCC prior to release 2.4. ANSI C requires that `size_t' always be an
unsigned type. For compatibility with existing systems' header files,
GCC defines `size_t' in `stddef.h' to be whatever type the system's
`sys/types.h' defines it to be. Most Unix systems that define `size_t'
in `sys/types.h', define it to be a signed type. Some code in the
library depends on `size_t' being an unsigned type, and will not work
correctly if it is signed.
The GNU C library code which expects `size_t' to be unsigned is
correct. The definition of `size_t' as a signed type is incorrect.
Versions 2.4 and later of GCC always define `size_t' as an unsigned
type, and GCC's `fixincludes' script massages the system's
`sys/types.h' so as not to conflict with this.
In the meantime, we work around this problem by telling GCC
explicitly to use an unsigned type for `size_t' when compiling the GNU C
library. `configure' will automatically detect what type GCC uses for
`size_t' arrange to override it if necessary.
To build the library, type `make lib'. This will produce a lot of
output, some of which looks like errors from `make' (but isn't). Look
for error messages from `make' containing `***'. Those indicate that
something is really wrong.
To build the library and related programs, type `make'. This will
produce a lot of output, some of which may look like errors from `make'
(but isn't). Look for error messages from `make' containing `***'.
Those indicate that something is really wrong.
To build and run some test programs which exercise some of the
library facilities, type `make tests'. This will produce several files
library facilities, type `make check'. This will produce several files
with names like `PROGRAM.out'.
To format the `GNU C Library Reference Manual' for printing, type
`make dvi'. To format the Info version of the manual for on line
reading with `C-h i' in Emacs or with the `info' program, type
`make info'.
`make dvi'.
To install the library and its header files, and the Info files of
the manual, type `make install', after setting the installation
directories in `configparms'. This will build things if necessary,
the manual, type `make install'. This will build things if necessary,
before installing them.
Recommended Tools to Install the GNU C Library
----------------------------------------------
We recommend installing the following GNU tools before attempting to
build the GNU C library:
* `make' 3.75
You need the latest version of GNU `make'. Modifying the GNU C
Library to work with other `make' programs would be so hard that we
recommend you port GNU `make' instead. *Really.* We recommend
version GNU `make' version 3.75 or later.
* GCC 2.7.2
On most platforms, the GNU C library can only be compiled with the
GNU C compiler. We recommend GCC version 2.7.2 or later; earlier
versions may have problems.
* `binutils' 2.7
Using the GNU `binutils' (assembler, linker, and related tools) is
preferable when possible, and they are required to build an ELF
shared C library. We recommend `binutils' version 2.7 or later;
earlier versions are known to have problems or to not support all
architectures.
Supported Configurations
------------------------
The GNU C Library currently supports configurations that match the
following patterns:
alpha-dec-osf1
alpha-ANYTHING-linux
alpha-ANYTHING-linuxecoff
iX86-ANYTHING-bsd4.3
iX86-ANYTHING-gnu
iX86-ANYTHING-isc2.2
iX86-ANYTHING-isc3.N
iX86-ANYTHING-linux
iX86-ANYTHING-sco3.2
iX86-ANYTHING-sco3.2v4
iX86-ANYTHING-sysv
iX86-ANYTHING-sysv4
iX86-force_cpu386-none
iX86-sequent-bsd
i960-nindy960-none
m68k-hp-bsd4.3
m68k-mvme135-none
m68k-mvme136-none
m68k-sony-newsos3
m68k-sony-newsos4
m68k-sun-sunos4.N
mips-dec-ultrix4.N
mips-sgi-irix4.N
sparc-sun-solaris2.N
sparc-sun-sunos4.N
Each case of `iX86' can be `i386', `i486', `i586', or `i686'.. All
of those configurations produce a library that can run on any of these
processors. The library will be optimized for the specified processor,
but will not use instructions not available on all of them.
While no other configurations are supported, there are handy aliases
for these few. (These aliases work in other GNU software as well.)
decstation
hp320-bsd4.3 hp300bsd
i486-gnu
i586-linux
i386-sco
i386-sco3.2v4
i386-sequent-dynix
i386-svr4
news
sun3-sunos4.N sun3
sun4-solaris2.N sun4-sunos5.N
sun4-sunos4.N sun4
Reporting Bugs
==============
@@ -246,8 +278,10 @@ But what they do is fairly straightforward, and only requires that you
define a few variables in the right places.
The library sources are divided into subdirectories, grouped by
topic. The `string' subdirectory has all the string-manipulation
functions, `stdio' has all the standard I/O functions, etc.
topic.
The `string' subdirectory has all the string-manipulation functions,
`math' has all the mathematical functions, etc.
Each subdirectory contains a simple makefile, called `Makefile',
which defines a few `make' variables and then includes the global
@@ -283,7 +317,9 @@ The basic variables that a subdirectory makefile defines are:
data in a file called `TEST-PROGRAM.input'; it will be given to
the test program on its standard input. If a test program wants
to be run with arguments, put the arguments (all on a single line)
in a file called `TEST-PROGRAM.args'.
in a file called `TEST-PROGRAM.args'. Test programs should exit
with zero status when the test passes, and nonzero status when the
test indicates a bug in the library or error in building.
`others'
The names of "other" programs associated with this section of the
@@ -362,18 +398,24 @@ So the final list is `unix/bsd/vax unix/bsd unix/inet unix posix'.
`sysdeps' has two "special" subdirectories, called `generic' and
`stub'. These two are always implicitly appended to the list of
subdirectories (in that order), so you needn't put them in an `Implies'
file, and you should not create any subdirectories under them.
`generic' is for things that can be implemented in machine-independent
C, using only other machine-independent functions in the C library.
`stub' is for "stub" versions of functions which cannot be implemented
on a particular machine or operating system. The stub functions always
return an error, and set `errno' to `ENOSYS' (Function not
implemented). *Note Error Reporting::.
file, and you should not create any subdirectories under them intended
to be new specific categories. `generic' is for things that can be
implemented in machine-independent C, using only other
machine-independent functions in the C library. `stub' is for "stub"
versions of functions which cannot be implemented on a particular
machine or operating system. The stub functions always return an
error, and set `errno' to `ENOSYS' (Function not implemented). *Note
Error Reporting::.
A source file is known to be system-dependent by its having a
version in `generic' or `stub'; every system-dependent function should
have either a generic or stub implementation (there is no point in
having both).
version in `generic' or `stub'; every generally-available function whose
implementation is system-dependent in should have either a generic or
stub implementation (there is no point in having both). Some rare
functions are only useful on specific systems and aren't defined at all
on others; these do not appear anywhere in the system-independent
source code or makefiles (including the `generic' and `stub'
directories), only in the system-dependent `Makefile' in the specific
system's subdirectory.
If you come across a file that is in one of the main source
directories (`string', `stdio', etc.), and you want to write a machine-
@@ -629,18 +671,106 @@ generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
Contributors to the GNU C Library
=================================
The GNU C library was written almost entirely by Roland McGrath, who
now maintains it. Some parts of the library were contributed or worked
on by other people.
The GNU C library was written originally by Roland McGrath. Some
parts of the library were contributed or worked on by other people.
* The `getopt' function and related code were written by Richard
Stallman, David J. MacKenzie, and Roland McGrath.
* Most of the math functions are taken from 4.4 BSD; they have been
modified only slightly to work with the GNU C library. The
Internet-related code (most of the `inet' subdirectory) and several
other miscellaneous functions and header files have been included
with little or no modification.
* The merge sort function `qsort' was written by Michael J. Haertel.
* The quick sort function used as a fallback by `qsort' was written
by Douglas C. Schmidt.
* The memory allocation functions `malloc', `realloc' and `free' and
related code were written by Michael J. Haertel.
* Fast implementations of many of the string functions (`memcpy',
`strlen', etc.) were written by Torbjorn Granlund.
* The `tar.h' header file was written by David J. MacKenzie.
* The port to the MIPS DECStation running Ultrix 4
(`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian
Lance Taylor.
* The DES encryption function `crypt' and related functions were
contributed by Michael Glad.
* The `ftw' function was contributed by Ian Lance Taylor.
* The startup code to support SunOS shared libraries was contributed
by Tom Quinn.
* The `mktime' function was contributed by Paul Eggert.
* The port to the Sequent Symmetry running Dynix version 3
(`i386-sequent-bsd') was contributed by Jason Merrill.
* The timezone support code is derived from the public-domain
timezone package by Arthur David Olson and his many contributors.
* The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was
contributed by Brendan Kehoe, using some code written by Roland
McGrath.
* The port to SGI machines running Irix 4 (`mips-sgi-irix4') was
contributed by Tom Quinn.
* The port of the Mach and Hurd code to the MIPS architecture
(`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima.
* The floating-point printing function used by `printf' and friends
and the floating-point reading function used by `scanf', `strtod'
and friends were written by Ulrich Drepper. The multi-precision
integer functions used in those functions are taken from GNU MP,
which was contributed by Torbjorn Granlund.
* The internationalization support in the library, and the support
programs `locale' and `localedef', were written by Ulrich Drepper.
Ulrich Drepper adapted the support code for message catalogs
(`libintl.h', etc.) from the GNU `gettext' package, which he also
wrote. He also contributed the `catgets' support and the entire
suite of multi-byte and wide-character support functions
(`wctype.h', `wchar.h', etc.).
* The implementations of the `nsswitch.conf' mechanism and the files
and DNS backends for it were designed and written by Ulrich
Drepper and Roland McGrath, based on a backend interface defined
by Peter Eriksson.
* The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed
by Ulrich Drepper, based in large part on work done in Hongjiu
Lu's Linux version of the GNU C Library.
* The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by
Andreas Schwab.
* Richard Henderson contributed the ELF dynamic linking code and
other support for the Alpha processor.
* David Mosberger-Tang contributed the port to Linux/Alpha
(`alpha-ANYTHING-linux').
* Stephen R. van den Berg contributed a highly-optimized `strstr'
function.
* Ulrich Drepper contributed the `hsearch' and `drand48' families of
functions; reentrant `...`_r'' versions of the `random' family;
System V shared memory and IPC support code; and several
highly-optimized string functions for iX86 processors.
* The math functions are taken from `fdlibm-5.1' by Sun
Microsystems, as modified by J.T. Conklin, Ian Lance Taylor,
Ulrich Drepper, Andreas Schwab, and Roland McGrath.
* The `libio' library used to implement `stdio' functions on some
platforms was written by Per Bothner and modified by Ulrich
Drepper.
* The Internet-related code (most of the `inet' subdirectory) and
several other miscellaneous functions and header files have been
included from 4.4 BSD with little or no modification.
All code incorporated from 4.4 BSD is under the following
copyright:
@@ -694,70 +824,7 @@ on by other people.
changes to fit into the GNU C library and to fit the ANSI C
standard, but the functional code is Berkeley's.
* The merge sort function `qsort' was written by Michael J. Haertel.
* The quick sort function used as a fallback by `qsort' was written
by Douglas C. Schmidt.
* The memory allocation functions `malloc', `realloc' and `free' and
related code were written by Michael J. Haertel.
* Fast implementations of many of the string functions (`memcpy',
`strlen', etc.) were written by Torbjorn Granlund.
* Some of the support code for Mach is taken from Mach 3.0 by CMU,
and is under the following copyright terms:
Mach Operating System
Copyright (C) 1991,1990,1989 Carnegie Mellon University
All Rights Reserved.
Permission to use, copy, modify and distribute this software
and its documentation is hereby granted, provided that both
the copyright notice and this permission notice appear in all
copies of the software, derivative works or modified
versions, and any portions thereof, and that both notices
appear in supporting documentation.
CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS
IS" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF
ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
THIS SOFTWARE.
Carnegie Mellon requests users of this software to return to
Software Distribution Coordinator
School of Computer Science
Carnegie Mellon University
Pittsburgh PA 15213-3890
or `Software.Distribution@CS.CMU.EDU' any improvements or
extensions that they make and grant Carnegie Mellon the
rights to redistribute these changes.
* The `tar.h' header file was written by David J. MacKenzie.
* The port to the MIPS DECStation running Ultrix 4
(`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian
Lance Taylor.
* The DES encryption function `crypt' and related functions were
contributed by Michael Glad.
* The `ftw' function was contributed by Ian Lance Taylor.
* The code to support SunOS shared libraries was contributed by Tom
Quinn.
* The `mktime' function was contributed by Noel Cragg.
* The port to the Sequent Symmetry running Dynix version 3
(`i386-sequent-bsd') was contributed by Jason Merrill.
* The timezone support code is derived from the public-domain
timezone package by Arthur David Olson.
* The Internet resolver code is taken directly from BIND 4.9.1,
* The Internet resolver code is taken directly from BIND 4.9.5,
which is under both the Berkeley copyright above and also:
Portions Copyright (C) 1993 by Digital Equipment Corporation.
@@ -780,15 +847,6 @@ on by other people.
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was
contributed by Brendan Kehoe, using some code written by Roland
McGrath.
* The floating-point printing function used by `printf' and friends
was written by Roland McGrath and Torbjorn Granlund. The
multi-precision integer functions used in that function are taken
from GNU MP, which was contributed by Torbjorn Granlund.
* The code to support Sun RPC is taken verbatim from Sun's
RPCSRC-4.0 distribution, and is covered by this copyright:
@@ -824,9 +882,33 @@ on by other people.
2550 Garcia Avenue
Mountain View, California 94043
* The port to SGI machines running Irix 4 (`mips-sgi-irix4') was
contributed by Tom Quinn.
* Some of the support code for Mach is taken from Mach 3.0 by CMU,
and is under the following copyright terms:
* The port of the Mach and Hurd code to the MIPS architecture
(`mips-ANYTHING-gnu') was contribued by Kazumoto Kojima.
Mach Operating System
Copyright (C) 1991,1990,1989 Carnegie Mellon University
All Rights Reserved.
Permission to use, copy, modify and distribute this software
and its documentation is hereby granted, provided that both
the copyright notice and this permission notice appear in all
copies of the software, derivative works or modified
versions, and any portions thereof, and that both notices
appear in supporting documentation.
CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS
IS" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF
ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
THIS SOFTWARE.
Carnegie Mellon requests users of this software to return to
Software Distribution Coordinator
School of Computer Science
Carnegie Mellon University
Pittsburgh PA 15213-3890
or `Software.Distribution@CS.CMU.EDU' any improvements or
extensions that they make and grant Carnegie Mellon the
rights to redistribute these changes.
+32 -26
View File
@@ -18,6 +18,8 @@
dist:
# Make the value empty so ifdef fails if it's $(-subdir).
subdir := $(subdir)
ifdef subdir
.. := ../
else
@@ -31,12 +33,16 @@ foo:=$(shell echo 'foobar=$(filter %.c %.S %.s %.h,$(distribute))'>&2)
ifndef sysdep_dirs
# Find all sysdep directories.
export sysdep_dirs := $(shell find $(..)sysdeps -type d ! -name RCS -print)
export sysdep_dirs := $(shell find $(..)sysdeps -type d \
! -name CVS ! -name RCS -print)
else
# Defined by the parent.
sysdep_dirs := $(addprefix $(..),$(sysdep_dirs))
endif
# Make sure both stdio and libio get in, whichever is in use.
subdirs += stdio libio
sysdep-Subdir-files := $(wildcard $(addsuffix /Subdirs,$(sysdep_dirs)))
ifdef sysdep-Subdir-files
subdirs := $(sort $(subdirs) \
@@ -48,7 +54,7 @@ endif
# where source files might be found.
ifdef subdir
all-headers = $(headers)
all-headers = $(filter-out $(sysdep_headers),$(headers))
else
+distinfo := $(shell MAKEFLAGS= MFLAGS= $(MAKE) -s no_deps=t \
inhibit_interface_rules=t inhibit_mach_syscalls=t \
@@ -62,22 +68,33 @@ all-headers := $(sort $(headers) $(wildcard $(all-headers)))
endif
foo:=$(shell echo 'IS THIS WORKING??? all-headers=$(all-headers)' >&2)
sources += $(addsuffix .c,$(elided-routines) \
$(foreach l,$(extra-libs),$($l-routines)))
# Find all sysdep sources and headers.
+maybe-sysdeps := $(sources) $(sources:.c=.s) $(sources:.c=.S) $(all-headers) \
$(filter %.c %.S %.s %.h %.sub,$(distribute))
foo:=$(shell echo '+maybe-sysdeps=$(+maybe-sysdeps)'>&2)
# Find all the files that have a stub or generic version.
try-sysdeps := $(foreach dir,$(..)sysdeps/stub $(..)sysdeps/generic,\
try-sysdeps := $(foreach dir,$(..)sysdeps/stub $(..)sysdeps/generic \
$(..)sysdeps/libm-ieee754,\
$(addprefix $(dir)/,$(+maybe-sysdeps)))
foo:=$(shell echo 'try-sysdeps=$(try-sysdeps)'>&2)
+sysdeps := $(wildcard $(try-sysdeps))
foo:=$(shell echo 'stub/generic +sysdeps=$(+sysdeps)'>&2)
+sysdep-names := $(sort $(notdir $(+sysdeps)))
+sysdep-names := $(sort $(patsubst $(..)sysdeps/generic/%,%,\
$(patsubst $(..)sysdeps/stub/%,%,\
$(patsubst $(..)sysdeps/libm-ieee754/%,%,\
$(+sysdeps)))))
foo:=$(shell echo '+sysdep-names=$(+sysdep-names)' >&2)
ifdef subdir-dirs
vpath % $(subdir-dirs)
endif
# Now find all the sysdep versions of those files.
+sysdeps := $(wildcard $(foreach dir,$(sysdep_dirs) $(source_dirs),\
$(addprefix $(dir)/, \
+sysdeps := $(foreach dir,$(sysdep_dirs) $(source_dirs),\
$(wildcard $(addprefix $(dir)/, \
$(+sysdep-names) \
$(+sysdep-names:.c=.s) \
$(+sysdep-names:.c=.S) \
@@ -96,7 +113,7 @@ sources := $(filter-out $(addsuffix .c,$(basename $(.S.s))),$(sources)) $(.S.s)
+tsrcs := $(filter-out $(+out) $(addprefix %/,$(+out)), \
$(sources) $(all-headers) $(distribute)) \
$(+sysdeps)
foo:=$(shell echo made +tsrcs >&2)
foo:=$(shell echo 'made +tsrcs=$(+tsrcs)'>&2)
foo:=$(shell echo generated='$(generated)' >&2)
generated := $(sort $(generated) $(generated:.S=.c) $(generated:.s=.c))
foo:=$(shell echo now generated='$(generated)' >&2)
@@ -105,11 +122,7 @@ foo:=$(shell echo '+tsrcs=$(+tsrcs)'>&2)
foo:=$(shell echo foobie, dammit! >&2)
ifndef tardir
rel+vers := $(shell sed -n -e 's/^.*libc_release.*\"\([^"]*\)";$$/\1/p' \
-e 's/^.*libc_version.*\"\([^"]*\)";$$/\1/p' \
< $(..)version.c)
release := $(word 1,$(rel+vers))
version := $(word 2,$(rel+vers))
-include $(common-objpfx)version.mk
export tardir := glibc-$(version)
endif
@@ -131,7 +144,6 @@ foo:=$(shell echo subdir foo >&2)
$(wildcard $(addsuffix .input,$(tests)) \
$(addsuffix .args,$(tests)))
+tardeps := $(strip $(+tsrcs))
+tsrcs := $(addprefix $(tardir)/$(subdir)/,$(+tardeps))
verbose = v
@@ -139,7 +151,8 @@ verbose = v
dist: $(..)$(tardir) $(+tardeps)
@cd ..; if test -f dist.tar; then c=u; else c=c; fi; \
$(+cmdecho) "cd ..; tar $${c}h$(verbose)f dist.tar ..."; \
tar $${c}h$(verbose)f dist.tar $(+tsrcs)
tar $${c}h$(verbose)f dist.tar \
$(addprefix $(tardir)/$(subdir)/,$(filter-out $<,$^))
else # Parent makefile.
@@ -155,9 +168,7 @@ foo:=$(shell echo +sysdep-distfiles='$(+sysdep-distfiles)'>&2)
$(sysdep-Subdir-files)
foo:=$(shell echo '+sysdep-dist=$(+sysdep-dist)' >&2)
subdirs := $(filter-out crypt,$(subdirs))
+sysdep-tsrcs := $(wildcard $(foreach file,Makefile Implies \
+sysdep-tsrcs := $(wildcard $(foreach file,Makefile Implies syscalls.list\
configure configure.in,\
$(addsuffix /$(file),$(sysdep_dirs)))) \
$(+sysdep-dist)
@@ -174,20 +185,15 @@ configure: configure.in aclocal.m4; $(autoconf-it)
%/configure: %/configure.in aclocal.m4; $(autoconf-it)
.PHONY: dist
dist: $(tardir).tar.gz $(tardir)-crypt.tar.gz
$(tardir)-crypt.tar.gz: crypt/crypt.tar.gz
ln $< $@
crypt/%: FORCE
$(MAKE) -C $(@D) $(@F)
FORCE:
dist: $(tardir).tar.gz
subdir_dist: dist.tar
dist.tar: $(tardir) $(+tsrcs)
tar chvf $@ $(addprefix $(tardir)/,$(filter-out $(tardir),$^))
$(tardir).tar: dist.tar subdir_dist
tar xfv $< -C /tmp | doschk
@echo Files listed here have names exceeding 14 chars.
tar xfv $< -C /tmp | sed -n '/[^/]\{15,\}/p'
tar covf $@ -C /tmp $(tardir)
-rm -fr /tmp/$(tardir) &
@@ -210,7 +216,7 @@ README: README.template version.c
sed -e 's/RELEASE/$(release)/' -e 's/VERSION/$(version)/' < $< > $@
# Make it unwritable so I won't change it by mistake.
chmod 444 $@
test ! -d CVS || commit -m'Remade for $(release)-$(version)' $@
test ! -d CVS || cvs commit -m'Remade for $(release)-$(version)' $@
endif # Subdirectory vs. parent makefile
+37 -15
View File
@@ -73,14 +73,17 @@ else
all-dist = $(distribute)
endif
sources += $(filter %.c %.s %.S,$(all-dist))
headers += $(filter %.h,$(all-dist))
# sources and headers must be simply expanded variables
sources := $(sources) $(filter %.c %.s %.S,$(all-dist))
headers := $(headers) $(filter %.h,$(all-dist))
all-dist := $(filter-out %.h %.c %.s %.S,$(all-dist))
sources += $(foreach lib,$(extra-libs),$($(lib)-routines:=.c))
# All different versions of $(sources), preserving the configured sysdep
# directory order.
all-sources = $(wildcard $(sort $(sources) $(sources:.c=.S) \
$(sources:.c=.s))) \
all-sources = $(wildcard $(sort $(sources) $(sources:.c=.S) $(sources:.c=.s) \
$(others:=.c) $(tests:=.c))) \
$(foreach dir,$(all-dirs),\
$(wildcard \
$(addprefix $(dir)/,\
@@ -118,9 +121,6 @@ endif # subdir
ifndef XGETTEXT
XGETTEXT = xgettext
endif
ifndef MSGJOIN
MSGJOIN = msgjoin
endif
P = $(..)po
@@ -132,23 +132,45 @@ endif
define extract
@rm -f $@.new
$(XGETTEXT) --keyword=_ --keyword=N_ --sort-output -d - \
> $@.new /dev/null $^
$(XGETTEXT) --keyword=_ --keyword=N_ --add-comments=TRANS --sort-output \
--omit-header -n -d - $(XGETTEXTFLAGS-$(@F)) > $@.new $^
mv -f $@.new $@
endef
$P/$(domain).pot: $(tags_sources); $(extract)
text-srcs := $(filter %.c %.h %.cc %.C,$(tags_sources))
$P/$(domain).pot: $(text-srcs)
ifeq (,$(text-srcs))
cp /dev/null $@
else
$(extract)
endif
$P/siglist.pot: $(..)sysdeps/generic/signame.c; $(extract)
$P/errlist.pot: $(..)sysdeps/mach/hurd/errlist.c; $(extract)
$P/siglist.pot: $(common-objpfx)stdio-common/siglist.c; $(extract)
all-pot = $P/libc-top.pot $(subdirs:%=$P/%.pot) \
$P/siglist.pot $P/errlist.pot
# Extract all strings from this file; its strings are not marked.
# Their surroundings are also not interesting.
XGETTEXTFLAGS-siglist.pot = -a --no-location
all-pot = $P/libc-top.pot $P/subdirs.pot $P/siglist.pot
ifndef subdir
# Collect all the subdir messages, massaging the file names in comments
# to include the subdir name.
$P/subdirs.pot: $(subdirs:%=$P/%.pot)
@rm -f $@.new
(for d in $(subdirs); \
do sed "/^#:/s% % $$d/%g" $P/$$d.pot; done) > $@.new
mv -f $@.new $@
# Get $(version) defined.
include $(common-objpfx)version.mk
# Combine all the messages into the final sorted template translation file.
$P/SYS_libc.pot: $(all-pot)
@rm -f $@.new
$(MSGJOIN) $^ > $@.new
sed -e 's/VERSION/$(version)/' -e "s/DATE/`date +'%Y-%m-%d %k:%M'`/" \
po/header.pot > $@.new
$(XGETTEXT) -d - --omit-header -n -s $^ >> $@.new
mv -f $@.new $@
test ! -d CVS || cvs ci -m'Regenerated from source files' $@
+90 -36
View File
@@ -59,8 +59,8 @@ endif
# $(common-objdir) is the place to put objects and
# such that are not specific to a single subdir.
ifdef objdir
objpfx = $(objdir)/
common-objpfx = $(objpfx)
objpfx := $(patsubst %//,%/,$(objdir)/$(subdir)/)
common-objpfx = $(objdir)/
common-objdir = $(objdir)
else
objpfx :=
@@ -74,6 +74,10 @@ common-objdir = .
endif
endif
# Root of the sysdeps tree.
sysdep_dir := $(..)sysdeps
export sysdep_dir := $(sysdep_dir)
# Get the values defined by options to `configure'.
include $(common-objpfx)config.make
@@ -86,8 +90,15 @@ include $(common-objpfx)config.make
$(common-objpfx)config.make: $(common-objpfx)config.status $(..)config.h.in
cd $(<D); $(SHELL) $(<F)
# Force the user to configure before making.
$(common-objpfx)config.status: $(..)configure
# 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),\
$(wildcard \
$(sysdep_dir)/$(dir)/Implies) \
$(patsubst %.in,%,\
$(firstword $(wildcard \
$(addprefix $(sysdep_dir)/$(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; \
@@ -99,13 +110,10 @@ ifneq ($(wildcard $(..)configparms),)
include $(..)configparms
endif
ifneq ($(objpfx),)
ifneq ($(wildcard $(objpfx)configparms),)
include $(objpfx)configparms
ifneq ($(wildcard $(common-objpfx)configparms),)
include $(common-objpfx)configparms
endif
endif
sysdep_dir := $(..)sysdeps
export sysdep_dir := $(sysdep_dir)
####
#### These are the configuration variables. You can define values for
@@ -171,8 +179,8 @@ localedir = $(datadir)/locale
endif
# Where to install the locale charmap source files.
ifndef nlsdir
nlsdir = $(datadir)/nls
ifndef i18ndir
i18ndir = $(datadir)/i18n
endif
@@ -213,6 +221,16 @@ ifndef localtime-file
localtime-file = $(sysconfdir)/localtime
endif
# What to use for leap second specifications in compiling the default
# timezone files. Set this to `/dev/null' for no leap second handling as
# 1003.1 requires, or to `leapseconds' for proper leap second handling.
# Both zone flavors are always available as `posix/ZONE' and `right/ZONE'.
# This variable determines the default: if it's `/dev/null',
# ZONE==posix/ZONE; if it's `leapseconds', ZONE==right/ZONE.
ifndef leapseconds
leapseconds = /dev/null
endif
# What timezone's DST rules should be used when a POSIX-style TZ
# environment variable doesn't specify any rules. For 1003.1 compliance
# this timezone must use rules that are as U.S. federal law defines DST.
@@ -265,7 +283,7 @@ endif
# Default flags to pass the C compiler.
ifndef default_cflags
default_cflags := -g
default_cflags := -g -O
endif
# Flags to pass the C compiler when assembling preprocessed assembly code
@@ -280,9 +298,9 @@ endif
ifndef +link
+link = $(CC) -nostdlib -nostartfiles -o $@ \
$(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) \
$(addprefix $(csu-objpfx),start.o $(+preinit)) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) \
$(filter-out $(common-objpfx)libc%,$^) $(link-libc) \
$(addprefix $(csu-objpfx),$(+postinit))
$(+postinit)
endif
ifndef config-LDFLAGS
ifeq (yes,$(build-shared))
@@ -291,8 +309,13 @@ endif
endif
ifndef link-libc
ifeq (yes,$(build-shared))
link-libc = -Wl,-rpath-link=$(common-objdir) \
$(common-objpfx)libc.so$(libc.so-version) $(gnulib)
# We need the versioned name of libc.so in the deps of $(others) et al
# so that the symlink to libc.so is created before anything tries to
# run the linked programs.
link-libc = -Wl,-rpath-link=$(rpath-link) \
$(common-objpfx)libc.so$(libc.so-version) \
$(elfobjdir)/$(rtld-installed-name) \
$(common-objpfx)libc.a $(gnulib)
# Choose the default search path for the dynamic linker based on
# where we will install libraries.
ifneq ($(libdir),$(slibdir))
@@ -300,6 +323,9 @@ default-rpath = $(slibdir):$(libdir)
else
default-rpath = $(libdir)
endif
# This is how to find at build-time things that will be installed there.
rpath-link = $(common-objdir):$(elfobjdir):$(nssobjdir)
nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
else
link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
endif
@@ -308,20 +334,18 @@ ifndef gnulib
gnulib := -lgcc
endif
ifeq ($(elf),yes)
+preinit = crti.o
+postinit = crtn.o
endif
ifdef objpfx
csu-objpfx = $(objpfx)
elf-objpfx = $(objpfx)
else
csu-objpfx = $(..)csu/
elf-objpfx = $(..)elf/
+preinit = $(addprefix $(csu-objpfx),crti.o)
+postinit = $(addprefix $(csu-objpfx),crtn.o)
endif
csu-objpfx = $(common-objpfx)csu/
elf-objpfx = $(common-objpfx)elf/
ifeq (yes,$(build-shared))
# The name under which the run-time dynamic linker is installed.
# We are currently going for the convention that `/lib/ld.so.1'
# names the SVR4/ELF ABI-compliant dynamic linker.
ifndef rtld-installed-name
rtld-installed-name = ld.so
rtld-installed-name = ld.so.1
endif
endif
@@ -333,10 +357,10 @@ built-program-cmd = $(built-program-file)
else
comma = ,
define built-program-cmd
LD_LIBRARY_PATH=$(common-objdir)$(patsubst -Wl$(comma)-rpath-link=%,:%,\
$(filter -Wl$(comma)-rpath-link=%,\
$(sysdep-LDFLAGS))) \
$(elf-objpfx)ld.so $(built-program-file)
LD_LIBRARY_PATH=$(rpath-link)$(patsubst -Wl$(comma)-rpath-link=%,:%,\
$(filter -Wl$(comma)-rpath-link=%,\
$(sysdep-LDFLAGS))) \
$(elf-objpfx)$(rtld-installed-name) $(built-program-file)
endef
endif
@@ -395,13 +419,8 @@ ifeq "$(strip $(+cflags))" ""
+cflags := $(default_cflags)
endif # $(+cflags) == ""
# If using gcc, add flags that only it will grok.
ifneq "$(findstring gcc,$(CC))" ""
+cflags := $(+cflags) $(+gccwarn)
+gcc-nowarn := -w
else
+gcc-nowarn :=
endif # gcc
# Don't duplicate options if we inherited variables from the parent.
+cflags := $(sort $(+cflags))
@@ -461,18 +480,53 @@ ifeq (yes,$(build-omitfp))
object-suffixes += .go
CFLAGS-.go = -g
CFLAGS-.o = -g0 -O99 -fomit-frame-pointer
CFLAGS-.so += $(CFLAGS.o)
CFLAGS-.so += $(CFLAGS-.o)
libtype.go = lib%_g.a
endif
+gnu-stabs = $(shell echo>&2 '*** BARF ON ME')
ifndef BUILD_CC
BUILD_CC = $(CC)
endif
ifneq ($(BUILD_CC),$(CC))
cross-compiling := yes
else
cross-compiling := no
endif
# Figure out the version numbers from version.h.
$(common-objpfx)version.mk: $(..)version.h $(..)Makeconfig
sed -n -e 's/^.*RELEASE.*"\([^"]*\)".*$$/release=\1/p' \
-e 's/^.*VERSION.*"\([^"]*\)".*$$/version=\1/p' \
< $< > $@-new
mv -f $@-new $@
ifeq (yes, $(build-shared))
# Process the shlib-versions file, which tells us what shared library
# version numbers to use when we install shared objects on this system.
-include $(common-objpfx)soversions.mk
$(common-objpfx)soversions.mk: $(..)shlib-versions $(..)Makeconfig \
$(common-objpfx)config.make
sed 's/#.*$$//' $< | while read conf versions; do \
test -n "$$versions" || continue; \
case '$(config-machine)-$(config-vendor)-$(config-os)' in $$conf)\
for v in $$versions; do \
lib=`echo $$v | sed 's/=.*$$//'`; \
if eval "test -z \"\$$vers_lib$$lib\""; then \
eval vers_lib$${lib}=yes; \
echo $$v | sed "s/^.*=/$$lib.so-version=./"; \
fi; \
done ;; esac; done > $@T; exit 0
mv -f $@T $@
# Get $(version) defined with the release version number.
-include $(common-objpfx)version.mk
endif # build-shared
endif # Makeconfig not yet included
+18 -9
View File
@@ -51,10 +51,10 @@ sysdep-subdirs := $(subst $(\n), ,$(sysdep-subdirs))
endif
# These are the subdirectories containing the library source.
subdirs = csu assert ctype db locale intl math setjmp signal stdlib \
subdirs = csu assert ctype db locale intl catgets math setjmp signal stdlib \
stdio-common $(stdio) malloc string wcsmbs time dirent grp pwd\
posix io termios resource misc socket sysvipc gmon gnulib \
$(wildcard crypt) manual $(sysdep-subdirs) elf
posix io termios resource misc login socket sysvipc gmon gnulib \
wctype manual shadow $(sysdep-subdirs) nss elf po $(add-ons)
export subdirs := $(subdirs) # Benign, useless in GNU make before 3.63.
# The mach and hurd subdirectories have many generated header files which
@@ -76,13 +76,14 @@ subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
+subdir_targets := subdir_lib 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)
headers := errno.h sys/errno.h errnos.h limits.h values.h \
features.h gnu-versions.h
features.h gnu-versions.h libc-lock.h
aux = sysdep $(libc-init) version
echo-headers: subdir_echo-headers
@@ -144,7 +145,9 @@ $(includedir)/stubs.h: subdir_install
echo ' in the C library which is a stub, meaning it will fail';\
echo ' every time called, usually setting errno to ENOSYS. */';\
sort $(subdir-stubs)) > $(objpfx)stubs.h
$(INSTALL_DATA) $(objpfx)stubs.h $@
if test -r $@ && cmp -s $(objpfx)stubs.h $@; \
then echo stubs.h unchanged ; \
else $(INSTALL_DATA) $(objpfx)stubs.h $@; fi
rm -f $(objpfx)stubs.h
# This makes the Info or DVI file of the documentation from the Texinfo source.
@@ -217,17 +220,20 @@ echo-distinfo: parent_echo-distinfo subdir_echo-distinfo
parent_echo-distinfo:
@echo $(addprefix +header+,$(headers)) \
$(addprefix +nodist+,$(generated))
# Make the distribution tarfile.
distribute := README INSTALL NOTES COPYING.LIB COPYING NEWS \
ChangeLog ChangeLog.[0-9] \
distribute := README INSTALL FAQ NOTES NEWS PROJECTS \
COPYING.LIB COPYING ChangeLog ChangeLog.[0-9] \
Makefile Makeconfig Makerules Rules Make-dist MakeTAGS \
extra-lib.mk o-iterator.mk \
ansidecl.h mkinstalldirs move-if-change install-sh \
configure configure.in aclocal.m4 config.sub config.guess\
config.make.in config-name.in Makefile.in \
munch-tmpl.c munch.awk sysdep.h set-hooks.h libc-symbols.h
config.h.in config.make.in config-name.in Makefile.in \
autolock.sh munch-tmpl.c munch.awk \
sysdep.h set-hooks.h libc-symbols.h version.h shlib-versions \
rpm/Makefile rpm/template rpm/rpmrc
distribute := $(strip $(distribute))
generated := $(generated) stubs.h
@@ -241,3 +247,6 @@ makeinfo --no-validate --no-warn --no-headers $< -o $@
endef
INSTALL: manual/maint.texi; $(format-me)
NOTES: manual/creature.texi; $(format-me)
rpm/%: subdir_distinfo
$(MAKE) -C $(@D) subdirs='$(subdirs)' $(@F)
+236 -103
View File
@@ -25,6 +25,13 @@ ifneq (,)
This makefile requires GNU Make.
endif
REQUIRED_MAKE_VERSION = 3.74
ifneq ($(REQUIRED_MAKE_VERSION), \
$(firstword $(sort $(MAKE_VERSION) $(REQUIRED_MAKE_VERSION))))
Wrong GNU Make version. See above for the version needed.
endif
ifdef subdir
.. := ../
@@ -36,8 +43,6 @@ ifneq "$(findstring env,$(origin sources))" ""
sources :=
endif
headers := $(headers) $(sysdep_headers)
oPATH := $(PATH)
PATH := this definition should take precedence over $(oPATH)
ifeq ($(PATH),$(oPATH))
@@ -80,7 +85,7 @@ endif
# This is here so things in sysdep Makefiles can easily depend on foo.h as
# 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) \
vpath %.h $(subst $(empty) ,:,$(strip $(common-objpfx) $(objpfx) \
$(addprefix $(sysdep_dir)/,$(sysdirs)) \
$(..)))
@@ -145,9 +150,9 @@ endif
# have source in .s files, and thus do not in fact need a .d file.
# So we must define rules to make .d files for .s files.
define make-dummy-dep
$(addprefix ln $(objpfx)dummy.d ,$(filter-out $(wildcard $@),$@))
$(addprefix ln $(common-objpfx)dummy.d ,$(filter-out $(wildcard $@),$@))
endef
$(objpfx)dummy.d:
$(common-objpfx)dummy.d:
echo '# .s files cannot contain includes, so they need no deps.' > $@
# It matters that this set of rules, for compiling from sources in
@@ -164,7 +169,7 @@ $(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)%.d: %.s $(objpfx)dummy.d; $(make-dummy-dep)
$(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)
@@ -185,7 +190,7 @@ $(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)%.d: $(objpfx)%.s $(objpfx)dummy.d; $(make-dummy-dep)
$(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)
@@ -234,7 +239,7 @@ $(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \
\$$(compile-command.c)"; \
done; \
$(open-check-inhibit-asm) \
echo "\$$(objpfx)%.d: $$dir/%.s \$$(objpfx)dummy.d; \
echo "\$$(objpfx)%.d: $$dir/%.s \$$(common-objpfx)dummy.d; \
\$$(make-dummy-dep)"; \
echo "\$$(objpfx)%.d: $$dir/%.S \$$(before-compile); \
\$$(+make-deps)"; \
@@ -274,6 +279,7 @@ OUTPUT_OPTION = -o $@
S-CPPFLAGS = $(asm-CPPFLAGS)
define +make-deps
$(make-target-directory)
-@rm -f $@
$(+mkdep) $< $(CPPFLAGS) $($(<:$*.%=%)-CPPFLAGS) | \
sed -e 's,$(subst .,\.,$*)\.o,$(foreach o,$(object-suffixes),$(@:.d=$o)) $@,' \
@@ -281,9 +287,67 @@ $(sed-remove-objpfx) > $(@:.d=.T)
mv -f $(@:.d=.T) $@
endef
ifneq (,$(objpfx))
sed-remove-objpfx = -e 's@ $(subst .,\., \
$(subst @,\@,$(objpfx)))@ $$(objpfx)@g' \
-e 's@^$(subst .,\.,$(subst @,\@,$(objpfx)))@$$(objpfx)@g'
# Continuation lines here are dangerous because they introduce spaces!
define sed-remove-objpfx
-e 's@ $(subst .,\.,$(subst @,\@,$(common-objpfx)))@ $$(common-objpfx)@g' \
-e 's@^$(subst .,\.,$(subst @,\@,$(common-objpfx)))@$$(common-objpfx)@g'
endef
endif
# Shared library building.
ifeq (yes,$(build-shared))
# Pattern rule to build a shared object from an archive of PIC objects.
# This must come after the installation rules so Make doesn't try to
# build shared libraries in place from the installed *_pic.a files.
# $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
# on other shared objects.
lib%.so: lib%_pic.a; $(build-shlib)
ifeq ($(have-no-whole-archive),yes)
no-whole-archive = -Wl,--no-whole-archive
else
no-whole-archive =
endif
define build-shlib
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-B$(csu-objpfx) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-Wl,--whole-archive $^ $(no-whole-archive) \
$(LDLIBS-$(@F:lib%.so=%).so)
endef
# Don't try to use -lc when making libc.so itself.
# Also omits crti.o and crtn.o, which we do not want
# since we define our own `.init' section specially.
LDFLAGS-c.so = -nostdlib -nostartfiles
# Give libc.so an entry point and make it directly runnable itself.
LDFLAGS-c.so += -e __libc_main
# Use our own special initializer and finalizer files for libc.so.
elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
$(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
$(common-objpfx)libc_pic.a \
$(elfobjdir)/sofini.so $(elfobjdir)/ld.so
$(build-shlib)
ifdef libc.so-version
$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
rm -f $@
ln -s $(<F) $@ || ln $< $@
endif
endif
# Some files must not be compiled with the exception handler mechanism
# enabled (introduced in gcc-2.8). Use $(no-exceptions) in the
# appropriate CFLAGS definition.
ifeq ($(have-no-exceptions),yes)
no-exceptions = -fno-exceptions
else
no-exceptions =
endif
# Figure out the source filenames in this directory.
@@ -293,6 +357,8 @@ override sources := $(addsuffix .c,$(filter-out $(elided-routines),\
$(sysdep_routines)))
sysdep_routines := $(sysdep_routines)
headers := $(headers) $(sysdep_headers)
# This is the list of all object files, gotten by
# replacing every ".c" in `sources' with a ".o".
override objects := $(addprefix $(objpfx),$(sources:.c=.o))
@@ -302,7 +368,7 @@ override objects := $(addprefix $(objpfx),$(sources:.c=.o))
# $(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))
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).
@@ -361,44 +427,59 @@ lib: lib-noranlib $(foreach l,$(libtypes),$(patsubst %,$(common-objpfx)$l,c))
# Pattern rule for libraries: depend on the __.SYMDEF member updated by ranlib.
lib%.a: lib%.a($(ar-symtab-name)) ;
# For object-suffix $o, the list of objects with that suffix.
# Makefiles can define `elide-routines.so = foo' to leave foo.so out.
o-objects = $(patsubst %.o,%$o,$(filter-out $(patsubst %,$(objpfx)%.o,\
$(elide-routines$o)),\
$(objects)))
libobjs: $(foreach o,$(object-suffixes),\
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(notdir $(objects:.o=$o))))
$(notdir $(o-objects))))
lib-noranlib: libobjs
others: $(addprefix $(objpfx),$(install-lib))
ifdef objects
ifndef objects
# Create the stamp$o files to keep the parent makefile happy.
subdir_lib: $(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir))
$(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir)):
$(make-target-directory)
rm -f $@; > $@
else
# Define a pattern rule that will match many targets libc.a(foo.%), for
# each foo.o in $(objects) (% will just happen always to match `o'). This is
# the only way to define a rule that updates many targets at once with one
# sequence of commands. We in fact define the pattern rule to match
# targets libc.a(foo.%), libc_pic.a(foo.%), etc, to avoid repeating the rule.
# Each match will only ever be called upon to make member objects of
# the appropriate type in each library (i.e. libc_pic.a(foo.so)).
$(foreach l,$(libtypes),\
$(common-objpfx)$(patsubst %,$l,c)($(notdir $(objects:.o=.%)))): \
# sequence of commands.
define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(addsuffix .%,$(filter-out $(elide-routines$o),$(notdir $(objects:.o=))))): \
$(objpfx)stamp.%-$(subdir) ;
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
# The pattern rule tells Make to remake $(objpfx)stamp.%-$(subdir) as
# the way to update all the foo.% object files in $(objects).
# Now we define a static pattern rule to update each
# $(objpfx)stamp.SUFFIX-$(subdir) timestamp file;
# these rules (one explicit rule is generated for each object suffix)
# will update the parent archive with
$(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir)): \
$(objpfx)stamp%-$(subdir): $(objects:.o=%)
$(patsubst %,cd %;,$(objdir)) \
$(AR) cru$(verbose) ${O%-lib} \
$(patsubst $(objpfx)%,%,$^)
# `touch' won't let me touch a world-writable file I don't own. Sigh.
rm -f $@
touch $@
ifdef subdir
O%-lib = $(filter ../,$(firstword $(objdir) ../))$(patsubst %,$(libtype$*),c)
else
O%-lib = $(patsubst %,$(libtype$*),c)
endif
# the way to update all the foo.% object files in $(objects). Now we
# define explicit rules to update each $(objpfx)stamp.SUFFIX-$(subdir)
# timestamp file; these rules (one explicit rule is generated for each
# object suffix) will update the parent archive with ar. Use a static
# pattern rule so $* is set to the object type during the commands.
define o-iterator-doit
$(objpfx)stamp$o-$(subdir): $(objpfx)stamp%-$(subdir): $(o-objects); $$(do-ar)
endef
object-suffixes-left := $(object-suffixes)
include $(o-iterator)
define do-ar
topdir=`cd $(..).; pwd`; \
$(patsubst %/,cd %;,$(objpfx)) \
$$topdir/autolock.sh ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \
$(patsubst $(objpfx)%,%,$^)
rm -f $@
touch $@
endef
O%-lib = $(..)$(patsubst %,$(libtype$*),c)
endif
@@ -407,22 +488,28 @@ endif
define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(patsubst $(objpfx)%.o,%$o,$(objects))) \
$(filter subdir_lib,$(firstword $(subdir) subdir_lib)); \
$$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
$(patsubst $(objpfx)%,%,$(o-objects))) $(subdirs-stamp-o); \
$$(..)./autolock.sh \
$$(common-objpfx)$$(patsubst %,$$(libtype$o),c).lck \
$$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
endef
ifndef subdir
subdirs-stamps := $(foreach d,$(subdirs),$(common-objpfx)$d/stamp%-$d)
subdirs-stamp-o = $(subst %,$o,$(subdirs-stamps))
$(subdirs-stamps): subdir_lib;
endif
object-suffixes-left = $(object-suffixes)
include $(o-iterator)
# This makes all the object files.
.PHONY: objects objs
objects objs: $(foreach o,$(object-suffixes),$(objects:.o=$o)) \
objects objs: $(foreach o,$(object-suffixes),$(o-objects)) \
$(addprefix $(objpfx),$(extra-objs))
# Canned sequence for building an extra library archive.
define build-extra-lib
$(patsubst %,cd %;,$(objdir)) \
$(patsubst %/,cd %;,$(objpfx)) \
$(AR) cru$(verbose) $(@:$(objpfx)%=%) \
$(patsubst $(objpfx)%,%,$^)
$(RANLIB) $@
@@ -453,7 +540,7 @@ endef
# Make the target directory if it doesn't exist, using the `mkinstalldirs'
# script that does `mkdir -p' even if `mkdir' doesn't support that flag.
define make-target-directory
$(addprefix $(..)mkinstalldirs ,\
$(addprefix $(..)./mkinstalldirs ,\
$(filter-out $(wildcard $(@D:%/=%)),$(@D:%/=%)))
endef
@@ -483,13 +570,86 @@ endef
install-lib.so := $(filter %.so,$(install-lib:%_pic.a=%.so))
install-lib := $(filter-out %.so %_pic.a,$(install-lib))
ifeq (yes,$(build-shared))
install-lib-nosubdir: $(foreach so,$(install-lib.so),\
$(libdir)/$(patsubst $(libprefix)lib%,lib$(libprefix)%,\
$(libprefix)$(so))$($(so)-version))
install-lib-nosubdir: $(install-lib.so:%=$(libdir)/%)
# Find which .so's have versions.
versioned := $(strip $(foreach so,$(install-lib.so),\
$(patsubst %,$(so),$($(so)-version))))
# Install all the unversioned shared libraries.
$(addprefix $(libdir)/,$(filter-out $(versioned),$(install-lib.so))): \
$(libdir)/%.so: $(objpfx)%.so; $(do-install-program)
define make-link
cd $(@D); rm -f $(@F).new; $(LN_S) $(<F) $(@F).new; mv -f $(@F).new $(@F)
endef
ifdef libc.so-version
# For a library specified to be version N, install three files:
# libc.so -> libc.so.N (e.g. libc.so.6)
# libc.so.6 -> libc-VERSION.so (e.g. libc-1.10.so)
$(slibdir)/libc.so$(libc.so-version): $(slibdir)/libc-$(version).so
$(make-link)
$(slibdir)/libc-$(version).so: $(common-objpfx)libc.so; $(do-install-program)
install: $(slibdir)/libc.so$(libc.so-version)
$(slibdir)/lib$(libprefix)c.so$(libc.so-version): $(common-objpfx)libc.so
$(do-install-so)
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.
install: $(libdir)/libc.so
$(libdir)/libc.so: $(common-objpfx)libc.so$(libc.so-version) \
$(elfobjdir)/$(rtld-installed-name) \
$(common-objpfx)libc.a
(echo '/* Use the shared library, but some functions are only in';\
echo ' the static library, so try that secondarily.'; \
echo ' The dynamic linker defines some functions used by $(<F),';\
echo ' but ld uses definitions from libc.a before examining the';\
echo ' dependencies of $(<F) to find $(rtld-installed-name). */';\
echo 'GROUP ( $(^F) )') > $@.new
mv -f $@.new $@
endif
else
install: $(slibdir)/libc.so
$(slibdir)/libc.so: $(common-objpfx)libc.so; $(do-install-program)
endif
ifneq (,$(versioned))
# Produce three sets of rules as above for all the smaller versioned libraries.
define o-iterator-doit
$(libdir)/$o: $(libdir)/$o$($o-version); $$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
# Make symlinks in the build directory, because the versioned names might
# be referenced by a DT_NEEDED in another library.
define o-iterator-doit
$(objpfx)$o$($o-version): $(objpfx)$o; $$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
define o-iterator-doit
$(libdir)/$o$($o-version): $(libdir)/$(o:.so=)-$(version).so; $$(make-link)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
define o-iterator-doit
$(libdir)/$(o:.so=)-$(version).so: $(objpfx)$o; $$(do-install-program)
endef
object-suffixes-left := $(versioned)
include $(o-iterator)
endif
define do-install-so
$(do-install-program)
@@ -561,43 +721,6 @@ install-no-libc.a-nosubdir: install-headers-nosubdir install-data-nosubdir\
install-others-nosubdir install-sbin-nosubdir
install: install-no-libc.a-nosubdir
ifeq (yes,$(build-shared))
# Pattern rule to build a shared object from an archive of PIC objects.
# This must come after the installation rules so Make doesn't try to
# build shared libraries in place from the installed *_pic.a files.
# $(LDLIBS-%.so) may contain -l switches to generate run-time dependencies
# on other shared objects.
lib%.so: lib%_pic.a; $(build-shlib)
define build-shlib
$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
-Wl,-rpath-link=$(common-objdir) \
-Wl,--whole-archive $^ $(LDLIBS-$(@F:lib%.so=%).so)
endef
# Don't try to use -lc when making libc.so itself.
# Also omits crti.o and crtn.o, which we do not want
# since we define our own `.init' section specially.
LDFLAGS-c.so = -nostdlib -nostartfiles
# Give libc.so an entry point and make it directly runnable itself.
LDFLAGS-c.so += -e __libc_print_version
# Use our own special initializer and finalizer files for libc.so.
elfobjdir := $(firstword $(objdir) $(..)elf)
$(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
$(common-objpfx)libc_pic.a \
$(elfobjdir)/sofini.so
$(build-shlib)
ifdef libc.so-version
$(common-objpfx)libc.so$(libc.so-version): $(common-objpfx)libc.so
rm -f $@
ln -s $(<F) $@ || ln $< $@
endif
endif
# Command to compile $< in $(objdir) using the native libraries.
define native-compile
cwd=`pwd`; cd $(@D); $(BUILD_CC) $(BUILD_CFLAGS) \
@@ -617,11 +740,12 @@ BUILD_CFLAGS = -include $(common-objpfx)config.h
check: tests
.PHONY: TAGS
TAGS: distinfo $(..)MakeTAGS
TAGS: $(common-objpfx)distinfo-$(subdir) $(..)MakeTAGS
$(MAKE) $(addprefix -f ,$^) $@
$(..)po/%.pot: distinfo $(..)MakeTAGS
$(MAKE) $(addprefix -f ,$^) $@
$(..)po/%.pot: $(common-objpfx)distinfo-$(subdir) $(..)MakeTAGS FORCE
$(MAKE) $(addprefix -f ,$(filter-out FORCE,$^)) $@
FORCE:
.PHONY: echo-headers
@@ -641,16 +765,18 @@ common-mostlyclean:
$(addsuffix .o,$(tests) $(others)) \
$(addsuffix .out,$(tests)))
-rm -f $(addprefix $(objpfx),$(extra-objs) $(install-lib))
-rm -f core $(objpfx)stub-$(subdir)
-rm -f core $(common-objpfx)stub-$(subdir)
$(rmobjs)
define rmobjs
$(foreach o,$(object-suffixes),
-rm -f $(addprefix $(objpfx),stamp$o-$(subdir)) $(objects:.o=$o))
-rm -f $(addprefix $(objpfx),stamp$o-$(subdir)) $(o-objects))
endef
# Also remove the dependencies and generated source files.
common-clean: common-mostlyclean
-rm -f $(addprefix $(objpfx),$(generated)) $(+depfiles)
-rm -f $(addprefix $(common-objpfx),$(common-generated))
-rm -f $(common-objpfx)distinfo-$(subdir)
# Produce a file `stub-$(subdir)' which contains `#define __stub_FUNCTION'
# for each function which is a stub. We grovel over all the .d files
@@ -662,18 +788,18 @@ stubs: $(common-objpfx)stub-$(subdir)
s = $(sysdep_dir)/stub
$(common-objpfx)stub-$(subdir): $(+depfiles)
# Use /dev/null since `...` might expand to empty.
s=`cd $s; /bin/pwd`; \
$(patsubst %,cd %;,$(objdir)) \
sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
`sed -n 's@^.*$s/\([a-z0-9_-]*\.c\).*$$@'"$$s"/'\1@p' \
$(patsubst $(objpfx)%,%,$^) /dev/null` \
/dev/null > $@T
(s=`cd $s; /bin/pwd`; \
$(patsubst %/,cd %;,$(objpfx)) \
sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
`sed -n 's@^.*$s/\([a-z0-9_-]*\.c\).*$$@'"$$s"/'\1@p' \
$(patsubst $(objpfx)%,%,$^) /dev/null` \
/dev/null) > $@T
mv -f $@T $@
# Make the distribution tar file.
.PHONY: dist
dist: distinfo $(..)Make-dist
dist: $(common-objpfx)distinfo-$(subdir) $(..)Make-dist
$(MAKE) -f $< -f $(word 2,$^) $(Make-dist-args)
# Avoid depending on source files found in sysdeps dirs,
@@ -684,16 +810,23 @@ dist: $(filter-out %.c %.S %.s,$(distribute))
# environment get too large. Instead, we write all the information into
# a generated makefile fragment `distinfo', and then include it with -f in
# the sub-make that makes the distribution (above).
distinfo: Makefile $(..)Makerules
$(common-objpfx)distinfo-$(subdir): Makefile $(..)Makerules
$(distinfo-vars)
mv -f $@.new $@
.PHONY: subdir_distinfo distinfo
subdir_distinfo: distinfo
distinfo: $(common-objpfx)distinfo-$(subdir)
define distinfo-vars
rm -f $@.new
$(foreach var,subdir subdir-dirs sources elided-routines headers distribute \
dont_distribute generated others tests,
echo >> $@.new '$(var) := $($(var))')
echo >> $@.new 'sources := $$(sources) $$(addsuffix .c,$$(elided-routines))'
echo > $@.new 'subdir := $(subdir)'
$(foreach var,subdir-dirs sources elided-routines sysdep_routines \
headers sysdep_headers distribute dont_distribute generated \
others tests extra-libs $(extra-libs:%=%-routines) \
versioned \
$(addprefix install-,lib lib.so data bin sbin others),
echo >> $@.new '$(subdir)-$(var) := $($(var))'
echo >> $@.new '$(var) = $$($(subdir)-$(var))')
endef
ifneq (,$(strip $(gpl2lgpl)))
+52 -12
View File
@@ -1,11 +1,15 @@
GNU C Library NEWS -- history of user-visible changes. 14 March 1996
GNU C Library NEWS -- history of user-visible changes. 25 August 1996
Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
See the end for copying conditions.
Please send GNU C library bug reports to bug-glibc@prep.ai.mit.edu.
Version 1.10
Version 2.0
* GNU extensions are no longer declared by default. To enable them you
must define the macro `_GNU_SOURCE' in your program or compile with
`-D_GNU_SOURCE'.
* The library has changed from using GNU ld symbol aliases to using weak
symbols where available. The ELF object file format supports weak
@@ -16,8 +20,8 @@ Version 1.10
of many files which contained only symbol aliases, reducing the size of
the source and the compiled library; many other files were renamed to
less cryptic names previously occupied by the symbol alias files.
There is a new header file <elf.h> and new library `-lelf' for
programs which operate on files in the ELF format.
There is a new header file <elf.h> for programs which operate on
files in the ELF format.
* Converted to Autoconf version 2, so `configure' has more options.
Run `configure --help' to see the details.
@@ -34,14 +38,24 @@ Version 1.10
* The C library now provides the run-time support code for profiling
executables compiled with `-pg'. Programs can control the profiling code
through the interface in <sys/gmon.h>. The profiling code was adapted
from 4.4 BSD-Lite.
through the interface in <sys/gmon.h>. The `gmon.out' files written by
the GNU C library can be read only by GNU `gprof' (from GNU binutils);
the support for this file format was contributed by David Mosberger-Tang.
* The math code has been replaced with a math library based on fdlibm from
Sun, and modified by JT Conklin with i387 support and by Ian Taylor with
`float' functions. The math functions now reside in a separate library,
so programs using them will need to use `-lm' their linking commands.
* Ulrich Drepper has contributed support for an `/etc/nsswitch.conf'
mechanism similar to that found in Solaris 2. This is now used for the
group, passwd, hosts, networks, services, protocols, and rpc databases.
The `nsswitch.conf' file controls what services are used for each
individual database. This works by loading shared libraries with names
specified in `nsswitch.conf', so service modules can be changed or added at
any time without even relinking any program. A future release of the
separate NYS package will provide NIS/YP and NIS+ modules for this interface.
* The new functions `strtoq' and `strtouq' parse integer values from
strings, like `strtol' and `strtoul', but they return `long long int' and
`unsigned long long int' values, respectively (64-bit quantities).
@@ -59,7 +73,8 @@ Version 1.10
various locale-dependent data (using the locale chosen with `setlocale').
* Ulrich Drepper has contributed a new suite of functions for operation on
wide-character and multibyte-character strings; see <wcstr.h> and <mbstr.h>.
wide-character and multibyte-character strings, in <wcstr.h> and <mbstr.h>;
and classification and case conversion of wide characters, in <wctype.h>.
These new functions are intended to conform to the ISO C specification.
* You can now use positional parameter specifications in format strings
@@ -89,11 +104,13 @@ Version 1.10
* The new header file <fts.h> and suite of functions simplify programs that
operate on directory trees. This code comes from 4.4 BSD.
* The resolver code has been updated from the BIND 4.9.3 release.
* The resolver code has been updated from the BIND 4.9.5-T3A release.
* The new function `malloc_find_object_address' finds the starting address
of a malloc'd block, given any address within the block. This can be
useful for debugging.
of a malloc'd block, given any address within the block;
`malloc_object_allocated_size' returns the size of an allocated block;
and `malloc_walk' lets you walk through all allocated blocks. These can
be useful for debugging; see <malloc.h> for the interfaces.
* There is a new malloc debugging hook `__memalign_hook'.
@@ -142,8 +159,21 @@ Version 1.10
The GNU library now supports Linux versions 1.3.29 and later,
using the ELF object file format (i[345]86-*-linux).
* Andreas Schwab has ported the C library to Linux/m68k (m68k-*-linux).
* David Mosberger-Tang has ported the C library to Linux/Alpha (alpha-*-linux).
Richard Henderson contributed the dynamic linking support for ELF/Alpha.
* Ulrich Drepper has contributed a new set of message catalog functions to
support multiple languages, for use with his new package GNU gettext.
support multiple languages using the <libintl.h> interface, for use with
his new package GNU gettext. Translation volunteers have contributed
catalogs of the library's messages in Spanish, German, and Korean.
* For compatibility with XPG4, Ulrich Drepper has contributed the `gencat'
program and the `catgets' function for reading the catalog files it
creates. (The <libintl.h> interface is preferred; we include the
<nl_types.h> interface using `catgets' only for source compatibility with
programs already written to use it.)
* New header file <values.h> gives SVID-compatible names for <limits.h>
constants.
@@ -175,13 +205,23 @@ Version 1.10
* We have incorporated the 4.4 BSD `db' library (version 1.85). New header
files <db.h> and <mpool.h> provide a rich set of functions for several
types of simple databases stored in memory and in files, and <ndbm.h> is
an old `ndbm'-compatbile interface using the `db' functions.
an old `ndbm'-compatbile interface using the `db' functions. Link with
`-ldb' to get these functions.
* New macro `strdupa' copies a string like `strdup', but uses local stack
space from `alloca' instead of dynamic heap space from `malloc'.
* New function `strnlen' is like `strlen' but searches only a given maximum
number of characters for the null terminator.
* New function `statfs' in header <sys/statfs.h>.
* The new <argz.h> and <envz.h> interfaces contributed by Miles Bader
provide convenient functions for operating on blocks of null-terminated
strings.
* A new suite of functions in <utmp.h> handle all the details of reading
and writing the utmp file.
Version 1.09
+87
View File
@@ -0,0 +1,87 @@
Open jobs for finishing GNU libc:
---------------------------------
Status: August 1996
If you have time and talent to take over any of the jobs below please
contact <bug-glibc@prep.ai.mit.edu>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 1] Port to new platforms or test current version on formerly supported
platforms.
[ 2] Test compliance with standards. If you have access to recent
standards (IEEE, ISO, ANSI, X/Open, ...) and/or test suites you
could do some checks as the goal is to be compliant with all
standards if they do not contradict each other.
[ 3] Write translations for the GNU libc message for the so far
unsupported languages. GNU libc is fully internationalized and
users can immediately benefit from this.
Take a look at the matrix in
ftp://prep.ai.mit.edu/pub/gnu/ABOUT-NLS
for the current status (of course better use a mirror of prep).
[ 4] Write wordexp() function; this is described in POSIX.2, The
header <wordexp.h> already exists.
Implementation idea: use some functions from bash.
[ 5] Write `long double' versions of the math functions. This should be
done in collaboration with the NetBSD and FreeBSD people.
The libm is in fact fdlibm (not the same as in Linux libc).
**** Partly done.
[ 6] If you enjoy assembler programming (as I do --drepper :-) you might
be interested in writing optimized versions for some functions.
Especially the string handling functions can be optimized a lot.
Take a look at
Faster String Functions
Henry Spencer, University of Toronto
Usenix Winter '92, pp. 419--428
or just ask. Currently mostly i?86 optimized versions exist.
Alpha versions are on their way, so please ask before working
on this.
[ 7] Write nftw() function. Perhaps it might be good to reimplement the
ftw() function as well to share most of the code.
**** Almost done!
[ 8] Write AVL-tree based tsearch() et.al. functions. Currently only
a very simple algorithm is used.
There is a public domain version but using this would cause problems
with the assignment.
[ 9] Extend regex and/or rx to work with wide characters.
[10] Add mmap() support to malloc().
Doug Lea's malloc implementation might give some ideas. Perhaps
switching completly to his implementation is an option if it
a) can work without mmap() support (not all system GNU libc
is running on have mmap)
b) is without mmap support at least as fast as the current
implementation
c) will be extended with the current hooks and additional functions
Please contact bug-glibc@prep.ai.mit.edu before starting to avoid
duplicated work.
[11] Write access function for netmasks, bootparams, netgroup, publickey,
automount, aliases databases for nss_files and nss_db module.
The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once.
+13 -12
View File
@@ -1,4 +1,4 @@
This directory contains the version 1.09.6 test release of the GNU C Library.
This directory contains the version 1.93 test release of the GNU C Library.
Many bugs have been fixed since the last release.
Some bugs surely remain.
@@ -6,16 +6,17 @@ As of this release, the GNU C library has been ported to the following
configurations:
alpha-dec-osf1
i386-bsd4.3
i386-force_cpu386-none
i386-gnu (for Hurd development only)
i386-isc2.2
i386-isc3
i386-sco3.2
i386-sco3.2v4
i386-sequent-bsd
i386-sysv
i386-sysv4
i[345]86-*-bsd4.3
i[345]86-*-gnu
i[345]86-*-isc2.2
i[345]86-*-isc3
i[345]86-*-linux
i[345]86-*-sco3.2
i[345]86-*-sco3.2v4
i[345]86-*-sysv
i[345]86-*-sysv4
i[345]86-force_cpu386-none
i[345]86-sequent-bsd
i960-nindy960-none
m68k-hp-bsd4.3
m68k-mvme135-none
@@ -37,7 +38,7 @@ provides the Unix `crypt' function, plus some other entry points.
Because of the United States export restriction on DES implementations,
we are distributing this code separately from the rest of the C
library. There is an extra distribution tar file just for crypt; it is
called `glibc-1.09.6-crypt.tar.gz'. You can just unpack the crypt
called `glibc-1.93-crypt.tar.gz'. You can just unpack the crypt
distribution along with the rest of the C library and build; you can
also build the library without getting crypt. Users outside the USA
can get the crypt distribution via anonymous FTP from ftp.uni-c.dk
+30
View File
@@ -0,0 +1,30 @@
The following functions for the `long double' versions of the libm
function have to be written:
e_acosl.c
e_asinl.c
e_atan2l.c
e_acoshl.c
e_expl.c
e_fmodl.c
e_hypotl.c
e_j0l.c
e_j1l.c
e_jnl.c
e_lgammal_r.c
e_logl.c
e_log10l.c
e_powl.c
e_rem_pio2l.c
e_sinhl.c
e_sqrtl.c
k_cosl.c
k_rem_pio2l.c
k_sinl.c
k_tanl.c
s_atanl.c
s_erfl.c
s_expm1l.c
s_log1pl.c
+11 -10
View File
@@ -6,16 +6,17 @@ As of this release, the GNU C library has been ported to the following
configurations:
alpha-dec-osf1
i386-bsd4.3
i386-force_cpu386-none
i386-gnu (for Hurd development only)
i386-isc2.2
i386-isc3
i386-sco3.2
i386-sco3.2v4
i386-sequent-bsd
i386-sysv
i386-sysv4
i[345]86-*-bsd4.3
i[345]86-*-gnu
i[345]86-*-isc2.2
i[345]86-*-isc3
i[345]86-*-linux
i[345]86-*-sco3.2
i[345]86-*-sco3.2v4
i[345]86-*-sysv
i[345]86-*-sysv4
i[345]86-force_cpu386-none
i[345]86-sequent-bsd
i960-nindy960-none
m68k-hp-bsd4.3
m68k-mvme135-none
+31 -12
View File
@@ -49,6 +49,10 @@ ifneq "$(findstring env,$(origin generated))" ""
generated :=
endif
ifneq "$(findstring env,$(origin common-generated))" ""
common-generated :=
endif
ifeq "$(strip $(headers))" ""
ifneq "$(wildcard $(subdir).h)" ""
override headers := $(subdir).h
@@ -62,15 +66,16 @@ subdir_lib: lib-noranlib
# Some subdirs need to install a dummy library.
# They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)".
dep-dummy-lib = $(objpfx)dummy.o
dep-dummy-lib = $(common-objpfx)dummy.o
define make-dummy-lib
$(AR) cr$(verbose) $@ $<
endef
$(objpfx)dummy.o:
@rm -f $(@:.o=.c)
echo 'void __dummy__ () { }' > $(@:.o=.c)
$(CC) -c $(@:.o=.c) -o $@
generated := $(generated) dummy.o dummy.c
$(common-objpfx)dummy.c:
rm -f $@
echo 'void __dummy__ () { }' > $@
$(common-objpfx)empty.c:
cp -f /dev/null $@
common-generated := $(common-generated) dummy.o dummy.c empty.c empty.o
# This makes all the auxilliary and test programs.
@@ -92,13 +97,13 @@ ifneq "$(strip $(tests))" ""
# These are the implicit rules for making test outputs
# from the test programs and whatever input files are present.
$(objpfx)%.out: %.args $(objpfx)% %.input
$(built-program-cmd) `cat $(word 1,$^)` < $(word 3,$^) > $@
$($*-ENV) $(built-program-cmd) `cat $(word 1,$^)` < $(word 3,$^) > $@
$(objpfx)%.out: %.args $(objpfx)%
$(built-program-cmd) `cat $(word 1,$^)` > $@
$($*-ENV) $(built-program-cmd) `cat $(word 1,$^)` > $@
$(objpfx)%.out: %.input $(objpfx)%
$(built-program-cmd) < $(word 1,$^) > $@
$($*-ENV) $(built-program-cmd) < $(word 1,$^) > $@
$(objpfx)%.out: /dev/null $(objpfx)% # Make it 2nd arg for canned sequence.
$(built-program-cmd) > $@
$($*-ENV) $(built-program-cmd) > $@
endif # tests
.PHONY: distclean realclean subdir_distclean subdir_realclean \
@@ -116,7 +121,7 @@ subdir_echo-headers: echo-headers
.PHONY: subdir_echo-distinfo
subdir_echo-distinfo:
@echo $(addprefix +header+,$(headers)) \
$(addprefix +nodist+,$(generated) $(dont_distribute))
$(addprefix +nodist+,$(generated) $(common-generated) $(dont_distribute))
# We want to install everything except the library itself, but update all
# our portions of the library because the parent make will install it later
@@ -130,4 +135,18 @@ subdir_dist: dist
# Convenient target to update all the generated source files.
.PHONY: generated
generated: $(addprefix $(objpfx),$(generated))
generated: $(addprefix $(objpfx),$(generated))
generated: $(addprefix $(common-objpfx),$(common-generated))
ifndef libc.so-version
# Undefine this because it can't work when we libc.so is unversioned.
static-only-routines =
endif
ifdef static-only-routines
# These routines are to be omitted from the shared library object,
# so we replace the PIC objects for them with the empty object file.
$(static-only-routines:%=$(objpfx)%.so): %.so: $(common-objpfx)empty.o
rm -f $@
ln $< $@
endif
Vendored
+3 -2
View File
@@ -3,7 +3,8 @@ dnl which appears in configure.in before the sysdep configure scripts are run.
dnl Each sysdep configure.in does GLIBC_PROVIDES first, to avoid any
dnl AC_REQUIREs or AC_BEFOREs duplicating their code.
dnl
define(AC_FD_MSG,4)dnl Autoconf lossage.
define(AC_FD_MSG,6)dnl Autoconf lossage.
define(AC_FD_CC,5)dnl Autoconf lossage.
AC_DEFUN([GLIBC_PROVIDES], [dnl
AC_PROVIDE([AC_PROG_INSTALL])dnl
AC_PROVIDE([AC_PROG_RANLIB])dnl
@@ -17,7 +18,7 @@ dnl
AC_DEFUN(AC_CHECK_SYMBOL, [dnl
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(ac_cv_check_symbol_$1, [dnl
AC_TRY_LINK(,
AC_TRY_LINK(,
changequote(,)dnl
extern char *$1[]; puts(*$1);,
changequote([,])dnl
+1
View File
@@ -0,0 +1 @@
#include <string/argz.h>
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+2 -3
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -13,7 +13,7 @@ Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -95,4 +95,3 @@ __END_DECLS
#endif /* NDEBUG. */
Executable
+45
View File
@@ -0,0 +1,45 @@
#! /bin/sh
# interlock - wrap program invocation in lock to allow
# parallel builds to work.
# Written by Tom Tromey <tromey@cygnus.com>, Aug 10 1996
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Usage:
# interlock lock-dir-name program args-to-program...
dirname="$1"
program="$2"
shift
shift
while (mkdir $dirname > /dev/null 2>&1 && exit 1 || exit 0); do
# Wait a bit.
sleep 1
done
# Race condition here: if interrupted after the loop but before this
# trap, the lock can be left around.
trap "rmdir $dirname > /dev/null 2>&1" 1 2 3 15
# We have the lock, so run the program.
$program ${1+"$@"}
ret=$?
# Release the lock.
rmdir $dirname > /dev/null 2>&1
exit $ret
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+1 -1
View File
@@ -48,7 +48,7 @@ $(objpfx)lib$(config-vendor).a: $(bare-routines:%=$(objpfx)%.o)
# from scratch each time.
rm -f $@
ifdef objdir
cd $(objdir); $(AR) cq$(verbose) $@ $(^:$(objpfx)%=%)
cd $(objpfx); $(AR) cq$(verbose) $(@:$(objpfx)%=%) $(^:$(objpfx)%=%)
else
$(AR) cq$(verbose) $@ $^
endif
+41
View File
@@ -0,0 +1,41 @@
# Copyright (C) 1996 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
# The GNU C Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
# You should have received a copy of the GNU Library General Public
# License along with the GNU C Library; see the file COPYING.LIB. If
# not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Makefile for catgets.
#
subdir := catgets
headers = nl_types.h
distribute = catgetsinfo.h config.h
routines = catgets open_catalog
others = gencat
install-bin = gencat
gencat-modules = xmalloc
# To find xmalloc.c
vpath %.c ../locale/programs
include ../Rules
$(objpfx)gencat: $(gencat-modules:%=$(objpfx)%.o)
CPPFLAGS := -DNLSPATH='"$(localedir)/%L/%N:$(localedir)/%L/LC_MESSAGES/%N:"' \
-DHAVE_CONFIG_H $(CPPFLAGS)
+163
View File
@@ -0,0 +1,163 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <alloca.h>
#include <nl_types.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include "catgetsinfo.h"
/* Open the catalog and return a descriptor for the catalog. */
nl_catd
catopen (const char *cat_name, int flag)
{
__nl_catd result;
const char *env_var;
result = (__nl_catd) malloc (sizeof (__nl_catd));
if (result == NULL)
/* We cannot get enough memory. */
return (nl_catd) -1;
result->status = closed;
result->cat_name = __strdup (cat_name);
if (result->cat_name == NULL)
{
free (result);
return (nl_catd) -1;
}
if (strchr (cat_name, '/') == NULL)
{
if (flag == NL_CAT_LOCALE)
{
env_var = getenv ("LC_ALL");
if (env_var == NULL)
{
env_var = getenv ("LC_MESSAGES");
if (env_var == NULL)
{
env_var = getenv ("LANG");
if (env_var == NULL)
env_var = "C";
}
}
}
else
{
env_var = getenv ("LANG");
if (env_var == NULL)
env_var = "C";
}
result->env_var = __strdup (env_var);
if (result->env_var == NULL)
{
free ((void *) result->cat_name);
free ((void *) result);
return (nl_catd) -1;
}
if (getenv ("NLSPATH") != NULL)
result->nlspath = __strdup (getenv ("NLSPATH"));
else
result->nlspath = __strdup (NLSPATH);
if (result->nlspath == NULL)
{
free ((void *) result->cat_name);
free ((void *) result->env_var);
free ((void *) result);
return (nl_catd) -1;
}
}
else
{
result->env_var = NULL;
result->nlspath = NULL;
}
return (nl_catd) result;
}
/* Return message from message catalog. */
char *
catgets (nl_catd catalog_desc, int set, int message, const char *string)
{
__nl_catd catalog;
size_t idx;
size_t cnt;
/* Be generous if catalog which failed to be open is used. */
if (catalog_desc == (nl_catd) -1 || ++set <= 0 || message < 0)
return (char *) string;
catalog = (__nl_catd) catalog_desc;
if (catalog->status == closed)
__open_catalog (catalog, 1);
if (catalog->status == nonexisting)
return (char *) string;
idx = ((set * message) % catalog->plane_size) * 3;
cnt = 0;
do
{
if (catalog->name_ptr[idx + 0] == (u_int32_t) set
&& catalog->name_ptr[idx + 1] == (u_int32_t) message)
return (char *) &catalog->strings[catalog->name_ptr[idx + 2]];
idx += catalog->plane_size * 3;
}
while (++cnt < catalog->plane_depth);
return (char *) string;
}
/* Return resources used for loaded message catalog. */
int
catclose (nl_catd catalog_desc)
{
__nl_catd catalog;
catalog = (__nl_catd) catalog_desc;
if (catalog->status == mmaped)
munmap ((void *) catalog->file_ptr, catalog->file_size);
else if (catalog->status == malloced)
free ((void *) catalog->file_ptr);
else if (catalog->status != closed && catalog->status != nonexisting)
return -1;
if (catalog->nlspath)
free ((void *) catalog->nlspath);
if (catalog->env_var)
free ((void *) catalog->env_var);
free ((void *) catalog);
return 0;
}
+59
View File
@@ -0,0 +1,59 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <sys/types.h>
struct catalog_obj
{
u_int32_t magic;
u_int32_t plane_size;
u_int32_t plane_depth;
/* This is in fact two arrays in one: always a pair of name and
pointer into the data area. */
u_int32_t name_ptr[0];
};
/* This structure will be filled after loading the catalog. */
typedef struct catalog_info
{
enum { closed, nonexisting, mmaped, malloced } status;
const char *cat_name;
const char *env_var;
const char *nlspath;
size_t plane_size;
size_t plane_depth;
u_int32_t *name_ptr;
const char *strings;
struct catalog_obj *file_ptr;
size_t file_size;
} *__nl_catd;
/* The magic number to signal we really have a catalog file. */
#define CATGETS_MAGIC 0x960408de
/* Prototypes for helper functions. */
void __open_catalog (__nl_catd __catalog, int __with_path);
+14
View File
@@ -0,0 +1,14 @@
#ifndef _CG_CONFIG_H
#define _CG_CONFIG_H
/* Use the internal textdomain used for libc messages. */
#define PACKAGE _libc_intl_domainname
#ifndef VERSION
/* Get libc version number. */
#include "../version.h"
#endif
#include_next <config.h>
#endif
+1032
View File
File diff suppressed because it is too large Load Diff
+48
View File
@@ -0,0 +1,48 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _NL_TYPES_H
#define _NL_TYPES_H 1
#include <features.h>
/* The default message set used by the gencat program. */
#define NL_SETD 1
/* Value for FLAG parameter of `catgets' to say we want XPG4 compliance. */
#define NL_CAT_LOCALE 1
/* Message catalog descriptor type. */
typedef void *nl_catd;
__BEGIN_DECLS
/* Open message catalog for later use, returning descriptor. */
extern nl_catd catopen __P ((__const char *__cat_name, int __flag));
/* Return translation with NUMBER in SET of CATALOG; if not found
return STRING. */
extern char *catgets __P ((nl_catd __catalog, int __set, int __number,
__const char *__string));
/* Close message CATALOG. */
extern int catclose __P ((nl_catd __catalog));
__END_DECLS
#endif /* nl_types.h */
+263
View File
@@ -0,0 +1,263 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <endian.h>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include "catgetsinfo.h"
#define SWAPU32(w) \
(((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24))
void
__open_catalog (__nl_catd catalog, int with_path)
{
int fd;
struct stat st;
int swapping;
if (strchr (catalog->cat_name, '/') != NULL || !with_path)
fd = open (catalog->cat_name, O_RDONLY);
else
{
const char *run_nlspath = catalog->nlspath;
#define ENOUGH(n) \
if (bufact + (n) >=bufmax) \
{ \
char *old_buf = buf; \
bufmax += 256 + (n); \
buf = (char *) alloca (bufmax); \
memcpy (buf, old_buf, bufact); \
}
/* The RUN_NLSPATH variable contains a colon separated list of
descriptions where we expect to find catalogs. We have to
recognize certain % substitutions and stop when we found the
first existing file. */
char *buf;
size_t bufact;
size_t bufmax;
buf = NULL;
bufmax = 0;
fd = -1;
while (*run_nlspath != '\0')
{
bufact = 0;
while (*run_nlspath != ':' && *run_nlspath != '\0')
if (*run_nlspath == '%')
{
const char *tmp;
++run_nlspath; /* We have seen the `%'. */
switch (*run_nlspath++)
{
case 'N':
/* Use the catalog name. */
ENOUGH (strlen (catalog->cat_name));
bufact = __stpcpy (&buf[bufact], catalog->cat_name) - buf;
break;
case 'L':
/* Use the current locale category value. */
ENOUGH (strlen (catalog->env_var));
bufact = __stpcpy (&buf[bufact], catalog->env_var) - buf;
break;
case 'l':
/* Use language element of locale category value. */
tmp = catalog->env_var;
do
{
ENOUGH (1);
buf[bufact++] = *tmp++;
}
while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
break;
case 't':
/* Use territory element of locale category value. */
tmp = catalog->env_var;
do
++tmp;
while (*tmp != '\0' && *tmp != '_' && *tmp != '.');
if (*tmp == '_')
{
++tmp;
do
{
ENOUGH (1);
buf[bufact++] = *tmp;
}
while (*tmp != '\0' && *tmp != '.');
}
break;
case 'c':
/* Use code set element of locale category value. */
tmp = catalog->env_var;
do
++tmp;
while (*tmp != '\0' && *tmp != '.');
if (*tmp == '.')
{
++tmp;
do
{
ENOUGH (1);
buf[bufact++] = *tmp;
}
while (*tmp != '\0');
}
break;
case '%':
ENOUGH (1);
buf[bufact++] = '%';
break;
default:
/* Unknown variable: ignore this path element. */
bufact = 0;
while (*run_nlspath != '\0' && *run_nlspath != ':')
++run_nlspath;
break;
}
}
else
{
ENOUGH (1);
buf[bufact++] = *run_nlspath++;
}
ENOUGH (1);
buf[bufact] = '\0';
if (bufact != 0)
{
fd = __open (buf, O_RDONLY);
if (fd >= 0)
break;
}
++run_nlspath;
}
}
if (fd < 0 || __fstat (fd, &st) < 0)
{
catalog->status = nonexisting;
return;
}
#ifndef MAP_COPY
/* Linux seems to lack read-only copy-on-write. */
#define MAP_COPY MAP_PRIVATE
#endif
#ifndef MAP_FILE
/* Some systems do not have this flag; it is superfluous. */
#define MAP_FILE 0
#endif
#ifndef MAP_INHERIT
/* Some systems might lack this; they lose. */
#define MAP_INHERIT 0
#endif
catalog->file_size = st.st_size;
catalog->file_ptr =
(struct catalog_obj *) __mmap (NULL, st.st_size, PROT_READ,
MAP_FILE|MAP_COPY|MAP_INHERIT, fd, 0);
if (catalog->file_ptr != (struct catalog_obj *) -1)
/* Tell the world we managed to mmap the file. */
catalog->status = mmaped;
else
{
/* mmap failed perhaps because the system call is not
implemented. Try to load the file. */
size_t todo;
catalog->file_ptr = malloc (st.st_size);
if (catalog->file_ptr == NULL)
{
catalog->status = nonexisting;
return;
}
todo = st.st_size;
/* Save read, handle partial reads. */
do
{
size_t now = __read (fd, (((char *) &catalog->file_ptr)
+ (st.st_size - todo)), todo);
if (now == 0)
{
free ((void *) catalog->file_ptr);
catalog->status = nonexisting;
return;
}
todo -= now;
}
while (todo > 0);
catalog->status = malloced;
}
/* We don't need the file anymore. */
__close (fd);
/* Determine whether the file is a catalog file and if yes whether
it is written using the correct byte order. Else we have to swap
the values. */
if (catalog->file_ptr->magic == CATGETS_MAGIC)
swapping = 0;
else if (catalog->file_ptr->magic == SWAPU32 (CATGETS_MAGIC))
swapping = 1;
else
{
/* Illegal file. Free he resources and mark catalog as not
usable. */
if (catalog->status == mmaped)
__munmap ((void *) catalog->file_ptr, catalog->file_size);
else
free (catalog->file_ptr);
catalog->status = nonexisting;
return;
}
#define SWAP(x) (swapping ? SWAPU32 (x) : (x))
/* Get dimensions of the used hashing table. */
catalog->plane_size = SWAP (catalog->file_ptr->plane_size);
catalog->plane_depth = SWAP (catalog->file_ptr->plane_depth);
/* The file contains two versions of the pointer tables. Pick the
right one for the local byte order. */
#if __BYTE_ORDER == __LITTLE_ENDIAN
catalog->name_ptr = &catalog->file_ptr->name_ptr[0];
#elif __BYTE_ORDER == __BIG_ENDIAN
catalog->name_ptr = &catalog->file_ptr->name_ptr[catalog->plane_size
* catalog->plane_depth
* 3];
#else
# error Cannot handle __BYTE_ORDER byte order
#endif
/* The rest of the file contains all the strings. They are
addressed relative to the position of the first string. */
catalog->strings =
(const char *) &catalog->file_ptr->name_ptr[catalog->plane_size
* catalog->plane_depth * 3 * 2];
}
+48 -19
View File
@@ -51,15 +51,13 @@ trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
alpha:OSF1:[VX]*:*)
# After 1.2, OSF1 uses "V1.3" for uname -r.
# After 4.x, OSF1 uses "X4.x" for uname -r.
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VX]//'`
exit 0 ;;
alpha:OSF1:*:*)
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo alpha-dec-osf${UNAME_RELEASE}
exit 0 ;;
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
exit 0 ;;
@@ -118,10 +116,26 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
mips:*:4*:UMIPS)
echo mips-mips-riscos4sysv
exit 0 ;;
mips:*:5*:RISCos)
mips:*:*:UMIPS | mips:*:*:RISCos)
sed 's/^ //' << EOF >dummy.c
int main (argc, argv) int argc; char **argv; {
#if defined (host_mips) && defined (MIPSEB)
#if defined (SYSTYPE_SYSV)
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_SVR4)
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
#endif
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
#endif
#endif
exit (-1);
}
EOF
${CC-cc} dummy.c -o dummy && ./dummy "${UNAME_RELEASE}" \
&& rm dummy.c dummy && exit 0
rm -f dummy.c dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
@@ -138,8 +152,8 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
exit 0 ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`uname -p`
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88100 ] ; then
UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
echo m88k-dg-dgux${UNAME_RELEASE}
@@ -213,7 +227,7 @@ EOF
echo romp-ibm-bsd4.4
exit 0 ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
exit 0 ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
echo rs6000-bull-bosx
@@ -231,7 +245,7 @@ EOF
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/7?? | 9000/8?[679] ) HP_ARCH=hppa1.1 ;;
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
9000/8?? ) HP_ARCH=hppa1.0 ;;
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
@@ -306,8 +320,10 @@ EOF
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE}
exit 0 ;;
CRAY*C90:*:*:*)
echo c90-cray-unicos${UNAME_RELEASE}
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
exit 0 ;;
CRAY-2:*:*:*)
echo cray2-cray-unicos
@@ -330,6 +346,9 @@ EOF
p*:CYGWIN*:*)
echo powerpcle-unknown-cygwin32
exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
@@ -347,8 +366,12 @@ EOF
echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
echo "powerpc-unknown-linux" ; exit 0
elif test "${UNAME_MACHINE}" = "alpha" ; then
echo alpha-unknown-linux ; exit 0
elif test "${UNAME_MACHINE}" = "sparc" ; then
echo sparc-unknown-linux ; exit 0
else
# Either a pre-BFD a.out linker (linuxoldld) or one that does not give us
# useful --help. Gcc wants to distinguish between linuxoldld and linuxaout.
@@ -416,9 +439,15 @@ EOF
exit 0 ;;
M680[234]0:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
UNAME_REL=4.3
if test -f /etc/.relid; then
UNAME_REL=4.3.`awk '{ print $3 }' /etc/.relid`
fi
uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4.3 && exit 0 ;;
&& echo i486-ncr-sysv$UNAME_REL && exit 0
uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& echo i586-ncr-sysv$UNAME_REL && exit 0 ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
+15 -11
View File
@@ -4,12 +4,19 @@
#undef HAVE_GNU_LD
/* Define if using ELF, which supports weak symbols.
This implies HAVE_WEAK_SYMBOLS; set by --with-elf. */
This implies HAVE_ASM_WEAK_DIRECTIVE and NO_UNDERSCORES; set by
--with-elf. */
#undef HAVE_ELF
/* Define if weak symbols are available in the assembler and
linker being used. Set by --with-weak-symbols. */
#undef HAVE_WEAK_SYMBOLS
/* Define if C symbols are asm symbols. Don't define if C symbols
have a `_' prepended to make the asm symbol. */
#undef NO_UNDERSCORES
/* Define if weak symbols are available via the `.weak' directive. */
#undef HAVE_ASM_WEAK_DIRECTIVE
/* Define if weak symbols are available via the `.weakext' directive. */
#undef HAVE_ASM_WEAKEXT_DIRECTIVE
/* Define if not using ELF, but `.init' and `.fini' sections are available. */
#undef HAVE_INITFINI
@@ -24,13 +31,6 @@
declaring a symbol global (default `.globl'). */
#undef ASM_GLOBAL_DIRECTIVE
/* ELF has weak symbols, and with GNU ld a.out does too. */
#ifndef HAVE_WEAK_SYMBOLS
#if defined (HAVE_ELF) || defined (HAVE_GNU_LD)
#define HAVE_WEAK_SYMBOLS
#endif
#endif
/* Define to use GNU libio instead of GNU stdio.
This is defined by configure under --enable-libio. */
#undef USE_IN_LIBIO
@@ -71,4 +71,8 @@
#define HAVE_STRERROR 1
/* The locale code needs these definitions. */
#define HAVE_REGEX 1
#endif
+9 -1
View File
@@ -8,6 +8,7 @@ exec_prefix = @exec_prefix@
# System configuration.
config-machine = @host_cpu@
base-machine = @base_machine@
config-vendor = @host_vendor@
config-os = @host_os@
config-sysdirs = @sysnames@
@@ -15,9 +16,11 @@ config-sysdirs = @sysnames@
config-defines = @DEFS@
elf = @elf@
weak-symbols = @weak@
have-initfini = @libc_cv_have_initfini@
have-no-whole-archive = @libc_cv_ld_no_whole_archive@
have-no-exceptions = @libc_cv_gcc_no_exceptions@
# Configuration options.
gnu-as = @gnu_as@
gnu-ld = @gnu_ld@
@@ -25,9 +28,12 @@ build-shared = @shared@
build-profile = @profile@
build-omitfp = @omitfp@
stdio = @stdio@
add-ons = @subdirs@
# Build tools.
CC = @CC@
BUILD_CC = @BUILD_CC@
CFLAGS = @CFLAGS@
AR = @AR@
RANLIB = @RANLIB@
AS = $(CC) -c
@@ -36,5 +42,7 @@ AS = $(CC) -c
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
LN_S = @LN_S@
MSGFMT = @MSGFMT@
# More variables may be inserted below by configure.
Vendored
+2 -8
View File
@@ -202,10 +202,6 @@ case $basic_machine in
basic_machine=m68k-apple
os=-aux
;;
aux)
basic_machine=m68k-apple
os=-aux
;;
balance)
basic_machine=ns32k-sequent
os=-dynix
@@ -657,7 +653,7 @@ case $os in
# Each alternative MUST END IN A *, to match a version number.
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[3456]* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
| -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
| -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
@@ -666,7 +662,7 @@ case $os in
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -cygwin32* | -pe* | -psos* | -moss* )
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-sunos5*)
@@ -893,8 +889,6 @@ case $basic_machine in
-aux*)
vendor=apple
;;
-aux*)
vendor=apple
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
Vendored
+516 -184
View File
File diff suppressed because it is too large Load Diff
+162 -54
View File
@@ -1,6 +1,6 @@
Dnl Process this file with autoconf to produce a configure script.
AC_REVISION([$CVSid$])
AC_PREREQ(2.4.2)dnl dnl Minimum Autoconf version required.
AC_PREREQ(2.10)dnl dnl Minimum Autoconf version required.
AC_INIT(features.h)
AC_CONFIG_HEADER(config.h)
@@ -34,7 +34,7 @@ esac
dnl Arguments to specify presence of other packages/features.
AC_ARG_WITH(fp, dnl
--with-fp if using floating-point hardware,
--with-fp if using floating-point hardware [default=yes],
with_fp=$withval, with_fp=yes)
AC_ARG_WITH(gnu-binutils, dnl
--with-gnu-binutils if using GNU binutils (as and ld),
@@ -49,9 +49,6 @@ test $gnu_binutils = yes && gnu_as=yes gnu_ld=yes
AC_ARG_WITH(elf, dnl
--with-elf if using the ELF object format,
elf=$withval, elf=no)
AC_ARG_WITH(weak-symbols, dnl
--with-weak-symbols if weak symbols are available in as and ld,
weak=$withval, weak=no)
AC_ARG_ENABLE(libio, dnl
[ --enable-libio build in GNU libio instead of GNU stdio],
@@ -66,13 +63,20 @@ dnl Arguments to enable or disable building the shared, profiled, and
dnl -fomit-frame-pointer libraries.
AC_ARG_ENABLE(shared, dnl
[ --enable-shared build shared library [default=yes if GNU ld & ELF]],
shared=$enableval, shared=default)
shared=$enableval, shared=default)
AC_ARG_ENABLE(profile, dnl
[ --enable-profile build profiled library [default=yes]],
profile=$enableval, profile=yes)
profile=$enableval, profile=yes)
AC_ARG_ENABLE(omitfp, dnl
[ --enable-omitfp build undebuggable optimized library [default=no]],
omitfp=$enableval, omitfp=no)
[ --enable-omitfp build undebuggable optimized library [default=no]],
omitfp=$enableval, omitfp=no)
dnl Generic infrastructure for drop-in additions to libc.
AC_ARG_ENABLE(add-ons, dnl
[ --enable-add-ons=DIR... configure and build named extra directories],
[add_ons=`echo "$enableval" | sed 's/,/ /g'`],
[add_ons=])
AC_CONFIG_SUBDIRS($add_ons)
AC_CANONICAL_HOST
# We keep the original values in `$config_*' and never modify them, so we
@@ -84,17 +88,17 @@ config_machine=$host_cpu config_vendor=$host_vendor config_os=$host_os
case "$host_os" in
gnu* | linux* | bsd4.4* | netbsd* | freebsd*)
# These systems always use GNU tools.
gnu_ld=yes gnu_as=yes
gnu_ld=yes gnu_as=yes ;;
esac
case "$host_os" in
linux*ecoff*)
;;
gnu* | linux* | sysv4* | solaris2*)
# These systems always use the ELF format.
# These systems (almost) always use the ELF format.
elf=yes
;;
esac
# Compute the list of sysdep directories for this configuration.
sysdep_dir=$srcdir/sysdeps
AC_CACHE_CHECK(sysdep dirs, libc_cv_sysdirs, [dnl
machine=$config_machine
vendor=$config_vendor
os=$config_os
@@ -104,20 +108,28 @@ changequote(,)dnl
# Expand the configuration machine name into a subdirectory by architecture
# type and particular chip.
case "$machine" in
a29k | am29000) machine=a29k ;;
alpha*) machine=alpha/$machine ;;
hppa*) machine=hppa/$machine ;;
i[345]86) machine=i386/$machine ;;
m680?0) machine=m68k/$machine ;;
m68k) machine=m68k/m68020 ;;
m88???) machine=m88k/$machine ;;
m88k) machine=m88k/m88100 ;;
mips*) machine=mips/$machine ;;
mips64*) machine=mips/mips64/$machine ;;
sparc[6789]) machine=sparc/$machine ;;
supersparc) machine=sparc/sparc8 ;;
a29k | am29000) base_machine=a29k machine=a29k ;;
alpha*) base_machine=alpha machine=alpha/$machine ;;
hppa*) base_machine=hppa machine=hppa/$machine ;;
i[3456]86) base_machine=i386 machine=i386/$machine ;;
m680?0) base_machine=m68k machine=m68k/$machine ;;
m68k) base_machine=m68k machine=m68k/m68020 ;;
m88???) base_machine=m88k machine=m88k/$machine ;;
m88k) base_machine=m88k machine=m88k/m88100 ;;
mips*) base_machine=mips machine=mips/$machine ;;
mips64*) base_machine=mips64 machine=mips/mips64/$machine ;;
sparc[6789]) base_machine=sparc machine=sparc/$machine ;;
supersparc) base_machine=sparc machine=sparc/sparc8 ;;
esac
changequote([,])dnl
AC_SUBST(base_machine)
# Compute the list of sysdep directories for this configuration.
# This can take a while to compute.
sysdep_dir=$srcdir/sysdeps
AC_MSG_CHECKING(sysdep dirs)
dnl We need to use [ and ] for other purposes for a while now.
changequote(,)dnl
# Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1.
os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`"
@@ -228,15 +240,26 @@ sysnames="`echo $sysnames | sed -e 's@^/@@' -e 's@ /@ @g'`"
# Expand the list of system names into a full list of directories
# from each element's parent name and Implies file (if present).
set $sysnames
names=
while test $# -gt 0; do
name=$1
shift
case " $names " in *" $name "*)
# Already in the list.
continue
esac
# 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
# 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 "Warning: $name implies nonexistent $x">&2
test -d $sysdep_dir/$x || {
AC_MSG_WARN(sysdeps/$name/Implies specifies nonexistent $x)
}
done
else
implied=
@@ -262,39 +285,29 @@ changequote([,])dnl
done
# Add the default directories.
names="$names generic stub"
sysnames="$names generic stub"
AC_SUBST(sysnames)
# The other names were emitted during the scan.
AC_MSG_RESULT(generic stub)
# Now uniquize the list.
seen=
sysnames=
for name in $names; do
if echo "$seen" | fgrep -x $name >/dev/null; then
# Already in the list.
true;
else
# A new one.
if test -z "$seen"; then
seen="$name" sysnames="$name"
else
seen="$seen
$name"
sysnames="$sysnames $name"
fi
fi
done
libc_cv_sysdirs="$sysnames"])
AC_SUBST(sysnames) sysnames="$libc_cv_sysdirs"
### Locate tools.
AC_PROG_INSTALL
if test "$INSTALL" = "${srcdir}/install-sh"; then
# The makefiles need to use a different form to find it in $srcdir.
INSTALL='$(..)./install-sh'
fi
AC_PROG_LN_S
AC_CHECK_PROGS(MSGFMT, msgfmt gmsgfmt, :)
AC_CHECK_TOOL(CC, gcc)
if test $host != $build; then
AC_CHECK_PROG(BUILD_CC, gcc cc)
fi
AC_PROG_CPP
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
AC_PROG_CPP
AC_CACHE_CHECK(for signed size_t type, libc_cv_signed_size_t, [dnl
echo '#include <stddef.h>
@@ -397,7 +410,8 @@ fi
if test $elf != yes; then
AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
[AC_TRY_COMPILE(, [asm (".section .init");
asm (".section .fini");],
asm (".section .fini");
asm (".text");],
libc_cv_have_initfini=yes,
libc_cv_have_initfini=no)])
AC_SUBST(libc_cv_have_initfini)dnl
@@ -406,6 +420,103 @@ if test $elf != yes; then
fi
fi
if test $elf = yes; then
libc_cv_asm_underscores=no
else
AC_CACHE_CHECK(for _ prefix on C symbol names, libc_cv_asm_underscores,
[AC_TRY_LINK([asm ("_glibc_foobar:");], [glibc_foobar ();],
libc_cv_asm_underscores=yes,
libc_cv_asm_underscores=no)])
fi
if test $libc_cv_asm_underscores = no; then
AC_DEFINE(NO_UNDERSCORES)
fi
if test $elf = yes; then
libc_cv_weak_symbols=yes
libc_cv_asm_weak_directive=yes
libc_cv_asm_weakext_directive=no
else
AC_CACHE_CHECK(for assembler .weak directive, libc_cv_asm_weak_directive,
[dnl
cat > conftest.s <<EOF
.text
${libc_cv_asm_global_directive} foo
foo: .long 0
.weak foo
.weak bar; bar = foo
EOF
if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
libc_cv_asm_weak_directive=yes
else
libc_cv_asm_weak_directive=no
fi
rm -f conftest*])
if test $libc_cv_asm_weak_directive = no; then
AC_CACHE_CHECK(for assembler .weakext directive,
libc_cv_asm_weakext_directive,
[dnl
cat > conftest.s <<EOF
.text
${libc_cv_asm_global_directive} foo
foo: .long 0
.weakext foo
.weakext foo, bar
EOF
if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then
libc_cv_asm_weakext_directive=yes
else
libc_cv_asm_weakext_directive=no
fi
rm -f conftest*])
fi # no .weak
fi # not ELF
if test $libc_cv_asm_weak_directive = yes; then
AC_DEFINE(HAVE_ASM_WEAK_DIRECTIVE)
elif test $libc_cv_asm_weakext_directive = yes; then
AC_DEFINE(HAVE_ASM_WEAKEXT_DIRECTIVE)
fi
AC_CACHE_CHECK(for ld --no-whole-archive, libc_cv_ld_no_whole_archive, [dnl
cat > conftest.c <<\EOF
_start () {}
int __eh_pc;
__throw () {}
EOF
dnl No \ in command here because it ends up inside ''.
if AC_TRY_COMMAND([${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c]); then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
fi
rm -f conftest*])
AC_SUBST(libc_cv_ld_no_whole_archive)dnl
AC_CACHE_CHECK(for gcc -fno-exceptions, libc_cv_gcc_no_exceptions, [dnl
cat > conftest.c <<\EOF
_start () {}
int __eh_pc;
__throw () {}
EOF
dnl No \ in command here because it ends up inside ''.
if AC_TRY_COMMAND([${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fno-exceptions
-o conftest conftest.c]); then
libc_cv_gcc_no_exceptions=yes
else
libc_cv_gcc_no_exceptions=no
fi
rm -f conftest*])
AC_SUBST(libc_cv_gcc_no_exceptions)dnl
### End of automated tests.
### Now run sysdeps configure fragments.
# sysdeps configure fragments may set these with files to be linked below.
libc_link_dests=
libc_link_sources=
@@ -498,7 +609,7 @@ default) stdio=stdio ;;
esac
AC_MSG_RESULT($stdio)
AC_SUBST(gnu_ld) AC_SUBST(gnu_as) AC_SUBST(elf) AC_SUBST(weak)
AC_SUBST(gnu_ld) AC_SUBST(gnu_as) AC_SUBST(elf)
if test $gnu_ld = yes; then
AC_DEFINE(HAVE_GNU_LD)
fi
@@ -508,9 +619,6 @@ fi
if test $elf = yes; then
AC_DEFINE(HAVE_ELF)
fi
if test $weak = yes; then
AC_DEFINE(HAVE_WEAK_SYMBOLS)
fi
AC_SUBST(shared)
if test $shared = default; then
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+3 -2
View File
@@ -27,6 +27,7 @@
subdir := csu
routines = init-first
csu-dummies = $(filter-out $(start-installed-name),crt1.o Mcrt1.o)
extra-objs = start.o gmon-start.o \
$(start-installed-name) g$(start-installed-name) \
@@ -35,7 +36,7 @@ omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \
$(csu-dummies))
install-lib = $(start-installed-name) g$(start-installed-name) \
$(csu-dummies)
distribute = initfini.c
distribute = initfini.c gmon-start.c start.c
all: # Make this the default target; it will be defined in Rules.
@@ -79,7 +80,7 @@ define initfini
-rm -f $(objpfx)crtcommon.tmp
(echo 'cat > crtcommon.tmp <<\EOF_common'; \
$(CC) $< $(CPPFLAGS) $(CFLAGS) \
-fPIC -finhibit-size-directive -g0 -S -o -; \
-fPIC -finhibit-size-directive $(no-exceptions) -g0 -S -o -; \
echo 'EOF_common') | (cd $(@D); $(SHELL))
cat $(objpfx)crtcommon.tmp >> $(objpfx)crti.s-new
cat $(objpfx)crtcommon.tmp >> $(objpfx)crtn.s-new
+42 -8
View File
@@ -1,5 +1,5 @@
/* Special .init and .fini section support.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -57,6 +57,26 @@ rm -f crti.s-new crtn.s-new\n\
mv crtcommon.tmp crti.s-new\n\
cp crti.s-new crtn.s-new");
/* Extract a `.end' if one is produced by the compiler. */
asm ("fgrep .end >/dev/null 2>&1 <<\\EOF.end && need_end=yes");
void
useless_function (void)
{
return;
}
asm ("\nEOF.end\n");
/* Find out how much alignment is produced by the compiler. */
asm ("align=`awk '$1==\".align\" { if ($2>max) max=$2; } END { print max; }' \
<<\\EOF.align");
void
useless_function2 (void (*foo) (void))
{
if (foo)
(*foo) ();
}
asm ("\nEOF.align\n`\n");
/* Append the .init prologue to crti.s-new. */
asm ("cat >> crti.s-new <<\\EOF.crti.init");
@@ -70,18 +90,19 @@ _init (void)
gcrt1.o to reference a symbol which would be defined by some library
module which has a constructor; but then user code's constructors
would come first, and not be profiled. */
extern void __gmon_start__ (void) __attribute__ ((weak));
weak_symbol (__gmon_start__)
extern void __gmon_start__ (void); weak_extern (__gmon_start__)
if (__gmon_start__)
__gmon_start__ ();
/* End the here document containing the .init prologue code.
Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */
asm ("\nEOF.crti.init
\n\
asm ("\n\
EOF.crti.init\n\
test -n \"$align\" && echo .align $align >> crti.s-new\n\
test -n \"$need_end\" && echo .end _init >> crti.s-new\n\
fgrep .init crti.s-new >>crtn.s-new\n\
cat >> crtn.s-new <<\\EOF.crtn.init");
fgrep -v .end >> crtn.s-new <<\\EOF.crtn.init");
}
/* End the here document containing the .init epilogue code.
@@ -97,10 +118,23 @@ _fini (void)
/* End the here document containing the .fini prologue code.
Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */
asm ("\nEOF.crti.fini\
asm ("\nEOF.crti.fini\n\
test -n \"$align\" && echo .align $align >> crti.s-new\n\
test -n \"$need_end\" && echo .end _fini >> crti.s-new\n\
cat > /dev/null <<\\EOF.fini.skip");
{
/* Let GCC know that _fini is not a leaf function by having a dummy
function call here. We arrange for this call to be omitted from
either crt file. */
extern void i_am_not_a_leaf (void);
i_am_not_a_leaf ();
}
asm ("\nEOF.fini.skip\
\n\
fgrep .fini crti.s-new >>crtn.s-new\n\
cat >> crtn.s-new <<\\EOF.crtn.fini");
fgrep -v .end >> crtn.s-new <<\\EOF.crtn.fini");
}
/* End the here document containing the .fini epilogue code.
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+11 -5
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -21,11 +21,17 @@ Cambridge, MA 02139, USA. */
/* Defined in locale/C-ctype.c. */
extern const char _nl_C_LC_CTYPE_class[];
extern const char _nl_C_LC_CTYPE_class32[];
extern const char _nl_C_LC_CTYPE_toupper[];
extern const char _nl_C_LC_CTYPE_tolower[];
extern const char _nl_C_LC_CTYPE_names[];
extern const char _nl_C_LC_CTYPE_width[];
#define b(u,x) (((u int *) _nl_C_LC_CTYPE_##x) + 128);
#define b(t,x,o) (((const t *) _nl_C_LC_CTYPE_##x) + o);
const unsigned short int *__ctype_b = b(unsigned short, class);
const int *__ctype_tolower = b(, tolower);
const int *__ctype_toupper = b(, toupper);
const unsigned short int *__ctype_b = b (unsigned short int, class, 128);
const unsigned int *__ctype32_b = b (unsigned int, class32, 0);
const int *__ctype_tolower = b (int, tolower, 128);
const int *__ctype_toupper = b (int, toupper, 128);
const unsigned int *__ctype_names = b (unsigned int, names, 0);
const unsigned char *__ctype_width = b (unsigned char, width, 0);
+7 -7
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -13,7 +13,7 @@ Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -27,6 +27,7 @@ Cambridge, MA 02139, USA. */
__BEGIN_DECLS
#ifndef _ISbit
/* These are all the characteristics of characters.
If there get to be more than 16 distinct characteristics,
many things must be changed that use `unsigned short int's.
@@ -55,11 +56,9 @@ enum
_ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */
_IScntrl = _ISbit (9), /* Control character. */
_ISpunct = _ISbit (10), /* Punctuation. */
/* The following are defined in POSIX.2 as being combinations of the
classes above. */
_ISalnum = _ISalpha | _ISdigit /* Alphanumeric. */
_ISalnum = _ISbit (11) /* Alphanumeric. */
};
#endif /* ! _ISbit */
/* These are defined in ctype-info.c.
The declarations here must match those in localeinfo.h.
@@ -70,7 +69,8 @@ enum
char' values and for EOF; we also support negative `signed char' values
for broken old programs. The case conversion arrays are of `int's
rather than `unsigned char's because tolower (EOF) must be EOF, which
doesn't fit into an `unsigned char'. */
doesn't fit into an `unsigned char'. But today more important is that
the arrays are also used for multi-byte character sets. */
extern __const unsigned short int *__ctype_b; /* Characteristics. */
extern __const int *__ctype_tolower; /* Case conversions. */
extern __const int *__ctype_toupper; /* Case conversions. */
+37 -27
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1994 Free Software Foundation, Inc.
/* Copyright (C) 1991, 1994, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -45,6 +45,22 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
register unsigned short int c;
int lose = 0;
#define TRYEM do { \
TRY (isascii); \
TRY (isalnum); \
TRY (isalpha); \
TRY (iscntrl); \
TRY (isdigit); \
TRY (isgraph); \
TRY (islower); \
TRY (isprint); \
TRY (ispunct); \
TRY (isspace); \
TRY (isupper); \
TRY (isxdigit); \
TRY (isblank); \
} while (0)
for (c = 0; c <= UCHAR_MAX; ++c)
{
print_char (c);
@@ -55,32 +71,10 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
++lose;
}
if (isascii(c))
fputs(" isascii", stdout);
if (isalnum(c))
fputs(" isalnum", stdout);
if (isalpha(c))
fputs(" isalpha", stdout);
if (iscntrl(c))
fputs(" iscntrl", stdout);
if (isdigit(c))
fputs(" isdigit", stdout);
if (isgraph(c))
fputs(" isgraph", stdout);
if (islower(c))
fputs(" islower", stdout);
if (isprint(c))
fputs(" isprint", stdout);
if (ispunct(c))
fputs(" ispunct", stdout);
if (isspace(c))
fputs(" isspace", stdout);
if (isupper(c))
fputs(" isupper", stdout);
if (isxdigit(c))
fputs(" isxdigit", stdout);
if (isblank(c))
fputs(" isblank", stdout);
#define TRY(isfoo) if (isfoo (c)) fputs (" " #isfoo, stdout)
TRYEM;
#undef TRY
fputs("; lower = ", stdout);
print_char(tolower(c));
fputs("; upper = ", stdout);
@@ -88,5 +82,21 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
putchar('\n');
}
fputs ("EOF", stdout);
if (tolower (EOF) != EOF)
{
++lose;
printf (" tolower BOGUS %d;", tolower (EOF));
}
if (toupper (EOF) != EOF)
{
++lose;
printf (" toupper BOGUS %d;", toupper (EOF));
}
#define TRY(isfoo) if (isfoo (EOF)) fputs (" " #isfoo, stdout), ++lose
TRYEM;
#undef TRY
exit (lose ? EXIT_FAILURE : EXIT_SUCCESS);
}
+1
View File
@@ -0,0 +1 @@
#include <db/db.h>
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+22 -8
View File
@@ -8,14 +8,16 @@ subdir = db
subdir-dirs = btree db hash mpool recno
vpath %.c $(subdir-dirs)
routines := bt_close bt_conv bt_debug bt_delete bt_get bt_open bt_overflow \
bt_page bt_put bt_search bt_seq bt_split bt_utils \
db \
hash hash_bigkey hash_buf hash_func hash_log2 hash_page \
ndbm \
mpool \
rec_close rec_delete rec_get rec_open rec_put rec_search \
rec_seq rec_utils
extra-libs := libdb
libdb-routines := bt_close bt_conv bt_debug bt_delete bt_get \
bt_open bt_overflow bt_page bt_put bt_search \
bt_seq bt_split bt_utils \
db \
hash hash_bigkey hash_buf hash_func hash_log2 hash_page \
ndbm \
mpool \
rec_close rec_delete rec_get rec_open rec_put rec_search \
rec_seq rec_utils
headers := db.h mpool.h ndbm.h
distribute := compat.h \
@@ -23,6 +25,18 @@ distribute := compat.h \
hash/extern.h hash/hash.h hash/page.h \
recno/extern.h recno/recno.h
others := makedb
install-bin := makedb
include ../Rules
CPPFLAGS += -D__DBINTERFACE_PRIVATE
# This file defines some static functions for alternative hash algorithms
# that are not actually used.
CFLAGS-hash_func.c := -Wno-unused
# The db code outsmarts the compiler frequently.
override CFLAGS += -Wno-uninitialized
$(objpfx)makedb: -ldb
+342
View File
@@ -0,0 +1,342 @@
/* makedb -- create simple DB database from textual input.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <db.h>
#include <ctype.h>
#include <errno.h>
#include <error.h>
#include <fcntl.h>
#include <getopt.h>
#include <libintl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Get libc version number. */
#include "../version.h"
/* Long options. */
static const struct option long_options[] =
{
{ "help", no_argument, NULL, 'h' },
{ "fold-case", no_argument, NULL, 'f' },
{ "output", required_argument, NULL, 'o' },
{ "quiet", no_argument, NULL, 'q' },
{ "undo", no_argument, NULL, 'u' },
{ "version", no_argument, NULL, 'V' },
{ NULL, 0, NULL, 0}
};
/* Prototypes for local functions. */
static void usage __P ((int status)) __attribute__ ((noreturn));
static int process_input __P ((FILE *input, const char *inname, DB *output,
int to_lowercase, int be_quiet));
static int print_database __P ((DB *db));
int
main (argc, argv)
int argc;
char *argv[];
{
const char *output_name;
const char *input_name;
FILE *input_file;
DB *db_file;
int do_help;
int do_version;
int to_lowercase;
int do_undo;
int be_quiet;
int status;
int opt;
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
/* Set the text message domain. */
textdomain (_libc_intl_domainname);
/* Initialize local variables. */
do_help = 0;
do_version = 0;
to_lowercase = 0;
do_undo = 0;
be_quiet = 0;
output_name = NULL;
while ((opt = getopt_long (argc, argv, "fho:uV", long_options, NULL)) != EOF)
switch (opt)
{
case '\0': /* Long option. */
break;
case 'h':
do_help = 1;
break;
case 'f':
to_lowercase = 1;
break;
case 'o':
output_name = optarg;
break;
case 'q':
be_quiet = 1;
break;
case 'u':
do_undo = 1;
break;
case 'V':
do_version = 1;
break;
default:
usage (EXIT_FAILURE);
}
/* Version information is requested. */
if (do_version)
printf ("%s - GNU %s %s\n", program_invocation_name, "libc", VERSION);
/* Help is requested. */
if (do_help)
usage (EXIT_SUCCESS);
else if (do_version)
exit (EXIT_SUCCESS);
/* Determine file names. */
if (do_undo || output_name != NULL)
{
if (optind + 1 != argc)
{
wrong_arguments:
error (0, 0, gettext ("wrong number of arguments"));
usage (EXIT_FAILURE);
}
input_name = argv[optind];
}
else
{
if (optind + 2 != argc)
goto wrong_arguments;
input_name = argv[optind++];
output_name = argv[optind];
}
/* Special handling if we are asked to print the database. */
if (do_undo)
{
db_file = dbopen (input_name, O_RDONLY, 0666, DB_BTREE, NULL);
if (db_file == NULL)
error (EXIT_FAILURE, 0, gettext ("cannot open database file `%s': %s"),
input_name,
errno == EFTYPE ? gettext ("incorrectly formatted file")
: strerror (errno));
status = print_database (db_file);
db_file->close (db_file);
return status;
}
/* Open input file. */
if (strcmp (input_name, "-") == 0 || strcmp (input_name, "/dev/stdin") == 0)
input_file = stdin;
else
{
input_file = fopen (input_name, "r");
if (input_file == NULL)
error (EXIT_FAILURE, errno, gettext ("cannot open input file `%s'"),
input_name);
}
/* Open output file. This must not be standard output so we don't
handle "-" and "/dev/stdout" special. */
db_file = dbopen (output_name, O_CREAT | O_RDWR | O_TRUNC, 0666,
DB_BTREE, NULL);
if (db_file == NULL)
error (EXIT_FAILURE, errno, gettext ("cannot open output file `%s'"));
/* Start the real work. */
status = process_input (input_file, input_name, db_file, to_lowercase,
be_quiet);
/* Close files. */
if (input_file != stdin)
fclose (input_file);
db_file->close (db_file);
return status;
}
static void
usage (status)
int status;
{
if (status != EXIT_SUCCESS)
fprintf (stderr, gettext ("Try `%s --help' for more information.\n"),
program_invocation_name);
else
printf (gettext ("\
Usage: %s [OPTION]... INPUT-FILE OUTPUT-FILE\n\
%s [OPTION]... -o OUTPUT-FILE INPUT-FILE\n\
%s [OPTION]... -u INPUT-FILE\n\
Mandatory arguments to long options are mandatory for short options too.\n\
-f, --fold-case convert key to lower case\n\
-h, --help display this help and exit\n\
-o, --output=NAME write output to file NAME\n\
--quiet don't print messages while building database\n\
-u, --undo print content of database file, one entry a line\n\
-V, --version output version information and exit\n\
If INPUT-FILE is -, input is read from standard input.\n\
Report bugs to <bug-glibc@gnu.ai.mit.edu>.\n"),
program_invocation_name, program_invocation_name,
program_invocation_name);
exit (status);
}
static int
process_input (input, inname, output, to_lowercase, be_quiet)
FILE *input;
const char *inname;
DB *output;
int to_lowercase;
int be_quiet;
{
char *line;
size_t linelen;
int status;
size_t linenr;
line = NULL;
linelen = 0;
status = EXIT_SUCCESS;
linenr = 0;
while (!feof (input))
{
DBT key;
DBT val;
char *cp;
int n;
n = getline (&line, &linelen, input);
if (n < 0)
/* This means end of file or some bug. */
break;
if (n == 0)
/* Short read. Probably interrupted system call. */
continue;
++linenr;
if (line[n - 1] == '\n')
/* Remove trailing newline. */
line[--n] = '\0';
cp = line;
while (isspace (*cp))
++cp;
if (*cp == '#')
/* First non-space character in line '#': it's a comment. */
continue;
key.data = cp;
while (*cp != '\0' && !isspace (*cp))
{
if (to_lowercase)
*cp = tolower (*cp);
++cp;
}
if (key.data == cp)
/* It's an empty line. */
continue;
key.size = cp - (char *) key.data;
while (isspace (*cp))
++cp;
val.data = cp;
val.size = &line[n] - cp;
/* Store the value. */
status = output->put (output, &key, &val, R_NOOVERWRITE);
if (status != 0)
{
if (status == 1)
{
if (!be_quiet)
error_at_line (0, 0, inname, linenr,
gettext ("duplicate key"));
/* This is no real error. Just give a warning. */
status = 0;
}
else
error (0, errno, gettext ("while writing data base file"));
status = status ? EXIT_FAILURE : EXIT_SUCCESS;
clearerr (input);
break;
}
}
if (ferror (input))
{
error (0, 0, gettext ("problems while reading `%s'"));
status = EXIT_FAILURE;
}
return status;
}
static int
print_database (db)
DB *db;
{
DBT key;
DBT val;
int no_more;
no_more = db->seq (db, &key, &val, R_FIRST);
while (!no_more)
{
printf ("%.*s %.*s\n", (int) key.size, (char *) key.data, (int) val.size,
(char *) val.data);
no_more = db->seq (db, &key, &val, R_NEXT);
}
if (no_more == -1)
{
error (0, errno, gettext ("while reading database"));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
+1 -1
View File
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
#ifndef lint
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)rec_seq.c 8.3 (Berkeley) 7/14/94";
#endif /* not lint */
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+11 -4
View File
@@ -13,7 +13,7 @@ Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -35,12 +35,16 @@ __BEGIN_DECLS
member that gives the length of `d_name'.
It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
member that gives the size of the entire directory entry. */
member that gives the size of the entire directory entry.
It defines the macro `_DIRENT_HAVE_D_OFF' iff there is a `d_off'
member that gives the file offset of the next directory entry.
*/
#include <direntry.h>
#if defined(__USE_BSD) || defined(__USE_MISC)
#define d_ino d_fileno /* Backward compatibility. */
#if (defined(__USE_BSD) || defined(__USE_MISC)) && !defined(d_fileno)
#define d_ino d_fileno /* Backward compatibility. */
#endif
/* These macros extract size information from a `struct dirent *'.
@@ -97,16 +101,19 @@ typedef struct __dirstream DIR;
/* Open a directory stream on NAME.
Return a DIR stream on the directory, or NULL if it could not be opened. */
extern DIR *__opendir __P ((__const char *__name));
extern DIR *opendir __P ((__const char *__name));
/* Close the directory stream DIRP.
Return 0 if successful, -1 if not. */
extern int __closedir __P ((DIR * __dirp));
extern int closedir __P ((DIR * __dirp));
/* Read a directory entry from DIRP.
Return a pointer to a `struct dirent' describing the entry,
or NULL for EOF or error. The storage returned may be overwritten
by a later readdir call on the same DIR stream. */
extern struct dirent *__readdir __P ((DIR * __dirp));
extern struct dirent *readdir __P ((DIR * __dirp));
/* Rewind DIRP to the beginning of the directory. */
+3 -1
View File
@@ -14,7 +14,7 @@ main ()
dirp = opendir(".");
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
{
/* save position 3 (fourth entry) */
/* save position 3 (after fourth entry) */
if (i++ == 3)
save3 = telldir(dirp);
@@ -26,6 +26,8 @@ main ()
break;
}
printf("going back past 4-th entry...\n");
/* go back to saved entry */
seekdir (dirp, save3);
+1
View File
@@ -0,0 +1 @@
#include <elf/dlfcn.h>
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+61 -37
View File
@@ -1,6 +1,6 @@
# Makefile for elf subdirectory of GNU C Library.
# Copyright (C) 1995 Free Software Foundation, Inc.
# Copyright (C) 1995, 1996 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
@@ -20,18 +20,26 @@
subdir := elf
headers := elf.h libelf.h link.h dlfcn.h
routines := init-first
headers = elf.h elfclass.h link.h dlfcn.h
routines = $(dl-routines) dl-open dl-close dl-symbol dl-support \
enbl-secure
extra-libs = libelf libdl
libelf-routines := elf_hash
libdl-routines := dlopen dlclose dlsym dlerror
libdl-inhibit-o = $(filter-out .so,$(object-suffixes)) # Build only shared.
# The core dynamic linking functions are in libc for the static and
# profiled libraries.
dl-routines = $(addprefix dl-,load cache lookup object reloc deps \
runtime error init fini debug)
# But they are absent from the shared libc, because that code is in ld.so.
elide-routines.so = $(dl-routines) dl-support enbl-secure
# ld.so uses those routines, plus some special stuff for being the program
# interpreter and operating independent of libc.
rtld-routines := rtld $(dl-routines) dl-sysdep dl-minimal
distribute = $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
soinit.c sofini.c ldd.sh.in eval.c
extra-libs = libdl
libdl-routines := dlopen dlclose dlsym dlerror dladdr
rtld-routines := rtld $(addprefix dl-,minimal load lookup object reloc \
runtime sysdep error init fini)
distribute = $(rtld-routines:=.c) dynamic-link.h do-rel.h \
soinit.c sofini.c ldd.sh.in linux-compat.c
all: # Make this the default target; it will be defined in Rules.
@@ -39,47 +47,63 @@ include ../Makeconfig
ifeq (yes,$(build-shared))
extra-objs = $(rtld-routines:=.so) soinit.so sofini.so
generated = librtld.so
generated = librtld.so dl-allobjs.so
install-others = $(slibdir)/$(rtld-installed-name)
install-bin = ldd
ifneq (,$(filter linux%,$(config-os)))
extra-objs += linux-compat.so
install-others += $(slibdir)/ld-linux.so.1
endif
endif
include ../Rules
ifeq (yes, $(build-shared))
# Make sure these things are built in the `make lib' pass so they can be used
# to run programs during the `make others' pass.
lib-noranlib: $(objpfx)$(rtld-installed-name) \
$(addprefix $(objpfx),$(extra-objs))
endif
# Command to link into a larger single relocatable object.
reloc-link = $(LINK.o) -nostdlib -nostartfiles -r -o $@
$(objpfx)dl-allobjs.so: $(rtld-routines:%=$(objpfx)%.so)
$(reloc-link) $^
# Link together the dynamic linker into a single relocatable object.
# We use this to produce both the ABI-compliant and Linux-compatible
# dynamic linker shared objects below.
$(objpfx)librtld.so: $(rtld-routines:%=$(objpfx)%.so) \
$(patsubst %,$(common-objpfx)lib%_pic.a,\
elf c $(LDLIBS-c.so:-l%=%))
$(LINK.o) -nostdlib -nostartfiles -r -o $@ \
'-Wl,-(' $^ -lgcc '-Wl,-)'
$(objpfx)librtld.so: $(objpfx)dl-allobjs.so $(common-objpfx)libc_pic.a
$(reloc-link) '-Wl,-(' $^ -lgcc '-Wl,-)'
$(objpfx)ld.so $(objpfx)ld-linux.so.1: $(objpfx)librtld.so
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
-Wl,-rpath=$(default-rpath) $^
$(objpfx)ld.so: $(objpfx)librtld.so
$(rtld-link) -Wl,-soname=$(rtld-installed-name)
# The Linux-compatible dynamic linker shared object is just the same
# with one object file of compatibility initialization code added.
$(objpfx)ld-linux.so.1: $(objpfx)linux-compat.so
define rtld-link
$(LINK.o) -nostdlib -nostartfiles -shared -o $@ \
-Wl,-rpath=$(default-rpath) $^
endef
# The dl code in the static libc needs a default library path.
CFLAGS-dl-support.c = -D'DEFAULT_RPATH="$(default-rpath)"'
ifneq (ld.so, $(rtld-installed-name))
# Make sure ld-gnu.so.1 exists in the build directory so we can link
# against it.
$(objpfx)$(rtld-installed-name): $(objpfx)ld.so
rm -f $@
ln -s $(<F) $@
endif
# Specify the dependencies of libdl.so; its commands come from the generic
# rule to build a shared library.
$(objpfx)libdl.so: $(objpfx)libdl_pic.a $(common-objpfx)libc.so $(objpfx)ld.so
$(patsubst %/,cd %;,$(objpfx)) \
$(LINK.o) -shared -o $(@:$(objpfx)%=%) \
$(LDFLAGS.so) $(LDFLAGS-dl.so) \
-Wl,--whole-archive $(^:$(objpfx)%=%)
$(slibdir)/$(rtld-installed-name): $(objpfx)ld.so; $(do-install-program)
$(slibdir)/ld-linux.so.1: $(objpfx)ld-linux.so.1; $(do-install-program)
$(objpfx)ldd: ldd.sh.in
sed 's%@RTLD@%$(libdir)/$(rtld-installed-name)%g' < $< > $@.new
$(objpfx)ldd: ldd.sh.in Makefile
sed 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' < $< > $@.new
chmod 555 $@.new
mv -f $@.new $@
# muwahaha
LDFLAGS-dl.so = -Wl,-dynamic-linker,$(slibdir)/$(rtld-installed-name)
$(objpfx)libdl.so: $(objpfx)eval.so
+86
View File
@@ -0,0 +1,86 @@
/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <stddef.h>
#include <sys/mman.h>
/* System-dependent function to read a file's whole contents
in the most convenient manner available. */
extern void *_dl_sysdep_read_whole_file (const char *filename,
size_t *filesize_ptr,
int mmap_prot);
#define CACHEMAGIC "ld.so-1.7.0"
struct cache_file
{
char magic[sizeof CACHEMAGIC - 1];
unsigned int nlibs;
struct
{
int flags; /* This is 1 for an ELF library. */
unsigned int key, value; /* String table indices. */
} libs[0];
};
/* Look up NAME in ld.so.cache and return the file name stored there,
or null if none is found. */
const char *
_dl_load_cache_lookup (const char *name)
{
static struct cache_file *cache;
static size_t cachesize;
unsigned int i;
if (cache == (void *) -1)
/* Previously looked for the cache file and didn't find it. */
return NULL;
if (cache == NULL)
{
/* Read the contents of the file. */
void *file = _dl_sysdep_read_whole_file ("/etc/ld.so.cache", &cachesize,
PROT_READ);
if (file && cachesize > sizeof *cache &&
!memcmp (file, CACHEMAGIC, sizeof CACHEMAGIC - 1))
/* Looks ok. */
cache = file;
else
{
if (file)
__munmap (file, cachesize);
cache = (void *) -1;
return NULL;
}
}
for (i = 0; i < cache->nlibs; ++i)
if (cache->libs[i].flags == 1 && /* ELF library entry. */
/* Make sure string table indices are not bogus before using them. */
cache->libs[i].key < cachesize - sizeof *cache &&
cache->libs[i].value < cachesize - sizeof *cache &&
/* Does the name match? */
! strcmp (name, ((const char *) &cache->libs[cache->nlibs] +
cache->libs[i].key)))
return (const char *) &cache->libs[cache->nlibs] + cache->libs[i].value;
return NULL;
}
+116
View File
@@ -0,0 +1,116 @@
/* _dl_close -- Close a shared object opened by `_dl_open'.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/mman.h>
#define LOSE(s) _dl_signal_error (0, map->l_name, s)
void
_dl_close (struct link_map *map)
{
struct link_map **list;
unsigned int i;
if (map->l_opencount == 0)
LOSE ("shared object not open");
/* Decrement the reference count. */
if (--map->l_opencount > 0 || map->l_type != lt_loaded)
/* There are still references to this object. Do nothing more. */
return;
/* 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)
--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)
{
struct link_map *map = list[i];
if (map->l_opencount == 0 && map->l_type == lt_loaded)
{
/* That was the last reference, and this was a dlopen-loaded
object. We can unmap it. */
const ElfW(Phdr) *ph;
if (map->l_info[DT_FINI])
/* Call its termination function. */
(*(void (*) (void)) ((void *) map->l_addr +
map->l_info[DT_FINI]->d_un.d_ptr)) ();
if (map->l_global)
{
/* This object is in the global scope list. Remove it. */
struct link_map **tail = _dl_global_scope_end;
do
--tail;
while (*tail != map);
--_dl_global_scope_end;
memcpy (tail, tail + 1, _dl_global_scope_end - tail);
_dl_global_scope_end[0] = NULL;
_dl_global_scope_end[1] = NULL;
}
/* Unmap the segments. */
for (ph = map->l_phdr; ph < &map->l_phdr[map->l_phnum]; ++ph)
if (ph->p_type == PT_LOAD)
{
ElfW(Addr) mapstart = ph->p_vaddr & ~(ph->p_align - 1);
ElfW(Addr) mapend = ((ph->p_vaddr + ph->p_memsz
+ ph->p_align - 1)
& ~(ph->p_align - 1));
__munmap ((caddr_t) mapstart, mapend - mapstart);
}
/* Finally, unlink the data structure and free it. */
map->l_prev->l_next = map->l_next;
if (map->l_next)
map->l_next->l_prev = map->l_prev;
if (map->l_searchlist)
free (map->l_searchlist);
free (map);
}
}
free (list);
/* Notify the debugger those objects are finalized and gone. */
_r_debug.r_state = RT_CONSISTENT;
_dl_debug_state ();
}
+56
View File
@@ -0,0 +1,56 @@
/* Communicate dynamic linker state to the debugger at runtime.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
/* This structure communicates dl state to the debugger. The debugger
normally finds it via the DT_DEBUG entry in the dynamic section, but in
a statically-linked program there is no dynamic section for the debugger
to examine and it looks for this particular symbol name. */
struct r_debug _r_debug;
/* Initialize _r_debug if it has not already been done. The argument is
the run-time load address of the dynamic linker, to be put in
_r_debug.r_ldbase. Returns the address of _r_debug. */
struct r_debug *
_dl_debug_initialize (ElfW(Addr) ldbase)
{
if (_r_debug.r_brk == 0)
{
/* Tell the debugger where to find the map of loaded objects. */
_r_debug.r_version = 1 /* R_DEBUG_VERSION XXX */;
_r_debug.r_ldbase = ldbase;
_r_debug.r_map = _dl_loaded;
_r_debug.r_brk = (ElfW(Addr)) &_dl_debug_state;
}
return &_r_debug;
}
/* This function exists solely to have a breakpoint set on it by the
debugger. The debugger is supposed to find this function's address by
examining the r_brk member of struct r_debug, but GDB 4.15 in fact looks
for this particular symbol name in the PT_INTERP file. */
void
_dl_debug_state (void)
{
}
+114
View File
@@ -0,0 +1,114 @@
/* Load the dependencies of a mapped object.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <errno.h>
#include <dlfcn.h>
#include <stdlib.h>
void
_dl_map_object_deps (struct link_map *map,
struct link_map **preloads, unsigned int npreloads)
{
struct list
{
struct link_map *map;
struct list *next;
};
struct list head[1 + npreloads], *tailp, *scanp;
unsigned int nlist;
/* Start the search list with one element: MAP itself. */
head[0].map = map;
/* Add the preloaded items after MAP but before any of its dependencies. */
for (nlist = 0; nlist < npreloads; ++nlist)
{
head[nlist].next = &head[nlist + 1];
head[nlist + 1].map = preloads[nlist];
}
/* Terminate the list. */
head[nlist].next = NULL;
/* Start here for adding dependencies to the list. */
tailp = &head[nlist++];
/* We use `l_reserved' as a mark bit to detect objects we have already
put in the search list and avoid adding duplicate elements later in
the list. */
map->l_reserved = 1;
/* Process each element of the search list, loading each of its immediate
dependencies and appending them to the list as we step through it.
This produces a flat, ordered list that represents a breadth-first
search of the dependency tree. */
for (scanp = head; scanp; scanp = scanp->next)
{
struct link_map *l = scanp->map;
if (l->l_info[DT_NEEDED])
{
const char *strtab
= ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
const ElfW(Dyn) *d;
for (d = l->l_ld; d->d_tag != DT_NULL; ++d)
if (d->d_tag == DT_NEEDED)
{
/* Map in the needed object. */
struct link_map *dep
= _dl_map_object (l, strtab + d->d_un.d_val,
l->l_type == lt_executable ? lt_library :
l->l_type);
if (dep->l_reserved)
/* This object is already in the search list we are
building. Don't add a duplicate pointer. Release the
reference just added by _dl_map_object. */
--dep->l_opencount;
else
{
/* Append DEP to the search list. */
tailp->next = alloca (sizeof *tailp);
tailp = tailp->next;
tailp->map = dep;
tailp->next = NULL;
++nlist;
/* Set the mark bit that says it's already in the list. */
dep->l_reserved = 1;
}
}
}
}
/* Store the search list we built in the object. It will be used for
searches in the scope of this object. */
map->l_searchlist = malloc (nlist * sizeof (struct link_map *));
map->l_nsearchlist = nlist;
nlist = 0;
for (scanp = head; scanp; scanp = scanp->next)
{
map->l_searchlist[nlist++] = scanp->map;
/* Now clear all the mark bits we set in the objects on the search list
to avoid duplicates, so the next call starts fresh. */
scanp->map->l_reserved = 0;
}
}
+51 -12
View File
@@ -1,5 +1,5 @@
/* Error handling for runtime dynamic linker.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -20,38 +20,77 @@ Cambridge, MA 02139, USA. */
#include <stddef.h>
#include <link.h>
#include <setjmp.h>
#include <stdlib.h>
#include <string.h>
/* This structure communicates state between _dl_catch_error and
_dl_signal_error. */
struct catch
{
char *errstring; /* Error detail filled in here. */
const char *objname;
jmp_buf env; /* longjmp here on error. */
};
/* This points to such a structure during a call to _dl_catch_error.
During implicit startup and run-time work for needed shared libraries,
this is null. */
static struct catch *catch;
static jmp_buf catch_env;
static const char *signalled_errstring, *signalled_objname;
void
_dl_signal_error (int errcode,
const char *objname,
const char *errstring)
{
signalled_errstring = errstring ?: "DYNAMIC LINKER BUG!!!";
signalled_objname = objname;
longjmp (catch_env, errcode ?: -1);
if (! errstring)
errstring = "DYNAMIC LINKER BUG!!!";
if (catch)
{
/* We are inside _dl_catch_error. Return to it. We have to
duplicate the error string since it might be allocated on the
stack. */
size_t len = strlen (errstring) + 1;
catch->errstring = malloc (len);
if (catch->errstring != NULL)
memcpy (catch->errstring, errstring, len);
catch->objname = objname;
longjmp (catch->env, errcode ?: -1);
}
else
{
/* Lossage while resolving the program's own symbols is always fatal. */
extern char **_dl_argv; /* Set in rtld.c at startup. */
_dl_sysdep_fatal (_dl_argv[0] ?: "<program name unknown>",
": error in loading shared libraries\n",
objname ?: "", objname ? ": " : "",
errstring, errcode ? ": " : "",
errcode ? strerror (errcode) : "", "\n", NULL);
}
}
int
_dl_catch_error (const char **errstring,
_dl_catch_error (char **errstring,
const char **objname,
void (*operate) (void))
{
int errcode;
struct catch c = { errstring: NULL, objname: NULL };
signalled_errstring = signalled_objname = NULL;
errcode = setjmp (catch_env);
errcode = setjmp (c.env);
if (errcode == 0)
{
catch = &c;
(*operate) ();
*errstring = *objname = NULL;
catch = NULL;
*errstring = NULL;
*objname = NULL;
return 0;
}
/* We get here only if we longjmp'd out of OPERATE. */
*errstring = signalled_errstring;
*objname = signalled_objname;
*errstring = c.errstring;
*objname = c.objname;
return errcode == -1 ? 0 : errcode;
}
+9 -3
View File
@@ -1,5 +1,5 @@
/* Call the termination functions of loaded shared objects.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,6 +25,12 @@ _dl_fini (void)
struct link_map *l;
for (l = _dl_loaded; l; l = l->l_next)
if (l->l_init_called && l->l_info[DT_FINI])
(*(void (*) (void)) (l->l_addr + l->l_info[DT_FINI]->d_un.d_ptr)) ();
if (l->l_init_called)
{
if (l->l_info[DT_FINI] &&
!(l->l_name[0] == '\0' && l->l_type == lt_executable))
(*(void (*) (void)) (l->l_addr + l->l_info[DT_FINI]->d_un.d_ptr)) ();
/* Make sure nothing happens if we are called twice. */
l->l_init_called = 0;
}
}
+25 -40
View File
@@ -1,5 +1,5 @@
/* Return the next shared object initializer function not yet run.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -21,45 +21,35 @@ Cambridge, MA 02139, USA. */
#include <link.h>
Elf32_Addr
_dl_init_next (void)
{
struct link_map *l;
Elf32_Addr init;
/* Run initializers for MAP and its dependencies, in inverse dependency
order (that is, leaf nodes first). */
Elf32_Addr next_init (struct link_map *l)
ElfW(Addr)
_dl_init_next (struct link_map *map)
{
unsigned int i;
/* The search list for symbol lookup is a flat list in top-down
dependency order, so processing that list from back to front gets us
breadth-first leaf-to-root order. */
i = map->l_nsearchlist;
while (i-- > 0)
{
struct link_map *l = map->l_searchlist[i];
if (l->l_init_called)
/* This object is all done. */
return 0;
continue;
if (l->l_init_running)
{
/* This object's initializer was just running.
Now mark it as having run, so this object
will be skipped in the future. */
l->l_init_called = 1;
l->l_init_running = 0;
return 0;
}
if (l->l_info[DT_NEEDED])
{
/* Find each dependency in order, and see if it
needs to run an initializer. */
const char *strtab
= ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
const Elf32_Dyn *d;
for (d = l->l_ld; d->d_tag != DT_NULL; ++d)
if (d->d_tag == DT_NEEDED)
{
struct link_map *needed
= _dl_map_object (l, strtab + d->d_un.d_val);
Elf32_Addr init;
--needed->l_opencount;
init = next_init (needed); /* Recurse on this dependency. */
if (init != 0)
return init;
}
l->l_init_called = 1;
continue;
}
if (l->l_info[DT_INIT] &&
@@ -73,17 +63,12 @@ _dl_init_next (void)
/* No initializer for this object.
Mark it so we will skip it in the future. */
l->l_init_called = 1;
return 0;
}
/* Look for the first initializer not yet called. */
l = _dl_loaded;
do
{
init = next_init (l);
l = l->l_next;
}
while (init == 0 && l);
return init;
/* Notify the debugger all new objects are now ready to go. */
_r_debug.r_state = RT_CONSISTENT;
_dl_debug_state ();
return 0;
}
+292 -157
View File
@@ -59,119 +59,28 @@ Cambridge, MA 02139, USA. */
#define STRING(x) #x
#ifdef MAP_ANON
/* The fd is not examined when using MAP_ANON. */
#define ANONFD -1
#else
int _dl_zerofd = -1;
#define ANONFD _dl_zerofd
#endif
size_t _dl_pagesize;
/* Try to open NAME in one of the directories in DIRPATH.
Return the fd, or -1. If successful, fill in *REALNAME
with the malloc'd full directory name. */
static int
open_path (const char *name, size_t namelen,
const char *dirpath,
char **realname)
/* Local version of `strdup' function. */
static inline char *
local_strdup (const char *s)
{
char *buf;
const char *p;
int fd;
size_t len = strlen (s) + 1;
void *new = malloc (len);
p = dirpath;
if (p == NULL || *p == '\0')
{
errno = ENOENT;
return -1;
}
if (new == NULL)
return NULL;
buf = alloca (strlen (dirpath) + 1 + namelen);
do
{
dirpath = p;
p = strpbrk (dirpath, ":;");
if (p == NULL)
p = strchr (dirpath, '\0');
if (p == dirpath)
/* Two adjacent colons, or a colon at the beginning or the end of
the path means to search the current directory. */
(void) memcpy (buf, name, namelen);
else
{
/* Construct the pathname to try. */
(void) memcpy (buf, dirpath, p - dirpath);
buf[p - dirpath] = '/';
(void) memcpy (&buf[(p - dirpath) + 1], name, namelen);
}
fd = open (buf, O_RDONLY);
if (fd != -1)
{
*realname = strdup (buf);
return fd;
}
if (errno != ENOENT && errno != EACCES)
/* The file exists and is readable, but something went wrong. */
return -1;
}
while (*p++ != '\0');
return -1;
}
/* Map in the shared object file NAME. */
struct link_map *
_dl_map_object (struct link_map *loader, const char *name)
{
int fd;
char *realname;
struct link_map *l;
/* Look for this name among those already loaded. */
for (l = _dl_loaded; l; l = l->l_next)
if (! strcmp (name, l->l_libname))
{
/* The object is already loaded.
Just bump its reference count and return it. */
++l->l_opencount;
return l;
}
if (strchr (name, '/') == NULL)
{
/* Search for NAME in several places. */
size_t namelen = strlen (name) + 1;
inline void trypath (const char *dirpath)
{
fd = open_path (name, namelen, dirpath, &realname);
}
fd = -1;
if (loader && loader->l_info[DT_RPATH])
trypath ((const char *) (loader->l_addr +
loader->l_info[DT_STRTAB]->d_un.d_ptr +
loader->l_info[DT_RPATH]->d_un.d_val));
if (fd == -1 && ! _dl_secure)
trypath (getenv ("LD_LIBRARY_PATH"));
if (fd == -1)
{
extern const char *_dl_rpath; /* Set in rtld.c. */
trypath (_dl_rpath);
}
}
else
{
fd = open (name, O_RDONLY);
if (fd != -1)
realname = strdup (name);
}
if (fd == -1)
_dl_signal_error (errno, name, "cannot open shared object file");
return _dl_map_object_from_fd (name, fd, realname);
return (char *) memcpy (new, s, len);
}
@@ -179,28 +88,39 @@ _dl_map_object (struct link_map *loader, const char *name)
opened on FD. */
struct link_map *
_dl_map_object_from_fd (const char *name, int fd, char *realname)
_dl_map_object_from_fd (char *name, int fd, char *realname,
struct link_map *loader, int l_type)
{
struct link_map *l = NULL;
const size_t pagesize = getpagesize ();
void *file_mapping = NULL;
size_t mapping_size = 0;
#define LOSE(s) lose (0, (s))
void lose (int code, const char *msg)
{
(void) close (fd);
(void) __close (fd);
if (file_mapping)
munmap (file_mapping, mapping_size);
_dl_signal_error (code, l ? l->l_name : name, msg);
__munmap (file_mapping, mapping_size);
if (l)
{
/* Remove the stillborn object from the list and free it. */
if (l->l_prev)
l->l_prev->l_next = l->l_next;
if (l->l_next)
l->l_next->l_prev = l->l_prev;
free (l);
}
free (name);
free (realname);
_dl_signal_error (code, name, msg);
}
inline caddr_t map_segment (Elf32_Addr mapstart, size_t len,
inline caddr_t map_segment (ElfW(Addr) mapstart, size_t len,
int prot, int fixed, off_t offset)
{
caddr_t mapat = mmap ((caddr_t) mapstart, len, prot,
fixed|MAP_COPY|MAP_FILE,
fd, offset);
caddr_t mapat = __mmap ((caddr_t) mapstart, len, prot,
fixed|MAP_COPY|MAP_FILE,
fd, offset);
if (mapat == (caddr_t) -1)
lose (errno, "failed to map segment from shared object");
return mapat;
@@ -213,11 +133,11 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
{
void *result;
if (file_mapping)
munmap (file_mapping, mapping_size);
mapping_size = (location + size + 1 + pagesize - 1);
mapping_size &= ~(pagesize - 1);
result = mmap (file_mapping, mapping_size, PROT_READ,
MAP_COPY|MAP_FILE, fd, 0);
__munmap (file_mapping, mapping_size);
mapping_size = (location + size + 1 + _dl_pagesize - 1);
mapping_size &= ~(_dl_pagesize - 1);
result = __mmap (file_mapping, mapping_size, PROT_READ,
MAP_COPY|MAP_FILE, fd, 0);
if (result == (void *) -1)
lose (errno, "cannot map file data");
file_mapping = result;
@@ -225,9 +145,9 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
return file_mapping + location;
}
const Elf32_Ehdr *header;
const Elf32_Phdr *phdr;
const Elf32_Phdr *ph;
const ElfW(Ehdr) *header;
const ElfW(Phdr) *phdr;
const ElfW(Phdr) *ph;
int type;
/* Look again to see if the real name matched another already loaded. */
@@ -236,12 +156,16 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
{
/* The object is already loaded.
Just bump its reference count and return it. */
close (fd);
__close (fd);
free (name);
free (realname);
++l->l_opencount;
return l;
}
if (_dl_pagesize == 0)
_dl_pagesize = __getpagesize ();
/* Map in the first page to read the header. */
header = map (0, sizeof *header);
@@ -260,8 +184,10 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
#endif
)
LOSE ("invalid ELF header");
if (header->e_ident[EI_CLASS] != ELFCLASS32)
LOSE ("ELF file class not 32-bit");
#define ELF32_CLASS ELFCLASS32
#define ELF64_CLASS ELFCLASS64
if (header->e_ident[EI_CLASS] != ELFW(CLASS))
LOSE ("ELF file class not " STRING(__ELF_WORDSIZE) "-bit");
if (header->e_ident[EI_DATA] != byteorder)
LOSE ("ELF file data encoding not " byteorder_name);
if (header->e_ident[EI_VERSION] != EV_CURRENT)
@@ -270,32 +196,41 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
LOSE ("ELF file version not " STRING(EV_CURRENT));
if (! elf_machine_matches_host (header->e_machine))
LOSE ("ELF file machine architecture not " ELF_MACHINE_NAME);
if (header->e_phentsize != sizeof (Elf32_Phdr))
if (header->e_phentsize != sizeof (ElfW(Phdr)))
LOSE ("ELF file's phentsize not the expected size");
/* Enter the new object in the list of loaded objects. */
l = _dl_new_object (realname, name, lt_loaded);
l->l_opencount = 1;
#ifndef MAP_ANON
#define MAP_ANON 0
if (_dl_zerofd == -1)
{
_dl_zerofd = _dl_sysdep_open_zero_fill ();
if (_dl_zerofd == -1)
_dl_signal_error (errno, NULL, "cannot open zero fill device");
{
__close (fd);
_dl_signal_error (errno, NULL, "cannot open zero fill device");
}
}
#endif
/* Enter the new object in the list of loaded objects. */
l = _dl_new_object (realname, name, l_type);
if (! l)
lose (ENOMEM, "cannot create shared object descriptor");
l->l_opencount = 1;
l->l_loader = loader;
/* Extract the remaining details we need from the ELF header
and then map in the program header table. */
l->l_entry = header->e_entry;
type = header->e_type;
l->l_phnum = header->e_phnum;
phdr = map (header->e_phoff, l->l_phnum * sizeof (Elf32_Phdr));
phdr = map (header->e_phoff, l->l_phnum * sizeof (ElfW(Phdr)));
{
/* Scan the program header table, collecting its load commands. */
struct loadcmd
{
Elf32_Addr mapstart, mapend, dataend, allocend;
ElfW(Addr) mapstart, mapend, dataend, allocend;
off_t mapoff;
int prot;
} loadcmds[l->l_phnum], *c;
@@ -320,15 +255,15 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
case PT_LOAD:
/* A load command tells us to map in part of the file.
We record the load commands and process them all later. */
if (ph->p_align % pagesize != 0)
if (ph->p_align % _dl_pagesize != 0)
LOSE ("ELF load command alignment not page-aligned");
if ((ph->p_vaddr - ph->p_offset) % ph->p_align)
LOSE ("ELF load command address/offset not properly aligned");
{
struct loadcmd *c = &loadcmds[nloadcmds++];
c->mapstart = ph->p_vaddr & ~(ph->p_align - 1);
c->mapend = ((ph->p_vaddr + ph->p_filesz + pagesize - 1)
& ~(pagesize - 1));
c->mapend = ((ph->p_vaddr + ph->p_filesz + _dl_pagesize - 1)
& ~(_dl_pagesize - 1));
c->dataend = ph->p_vaddr + ph->p_filesz;
c->allocend = ph->p_vaddr + ph->p_memsz;
c->mapoff = ph->p_offset & ~(ph->p_align - 1);
@@ -344,7 +279,7 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
}
/* We are done reading the file's headers now. Unmap them. */
munmap (file_mapping, mapping_size);
__munmap (file_mapping, mapping_size);
/* Now process the load commands and map segments into memory. */
c = loadcmds;
@@ -362,16 +297,16 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
mapat = map_segment (c->mapstart,
loadcmds[nloadcmds - 1].allocend - c->mapstart,
c->prot, 0, c->mapoff);
l->l_addr = (Elf32_Addr) mapat - c->mapstart;
l->l_addr = (ElfW(Addr)) mapat - c->mapstart;
/* Change protection on the excess portion to disallow all access;
the portions we do not remap later will be inaccessible as if
unallocated. Then jump into the normal segment-mapping loop to
handle the portion of the segment past the end of the file
mapping. */
mprotect (mapat + c->mapend,
loadcmds[nloadcmds - 1].allocend - c->mapend,
0);
__mprotect ((caddr_t) (l->l_addr + c->mapend),
loadcmds[nloadcmds - 1].allocend - c->mapend,
0);
goto postmap;
}
@@ -387,11 +322,11 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
{
/* Extra zero pages should appear at the end of this segment,
after the data mapped from the file. */
Elf32_Addr zero, zeroend, zeropage;
ElfW(Addr) zero, zeroend, zeropage;
zero = l->l_addr + c->dataend;
zeroend = l->l_addr + c->allocend;
zeropage = (zero + pagesize - 1) & ~(pagesize - 1);
zeropage = (zero + _dl_pagesize - 1) & ~(_dl_pagesize - 1);
if (zeroend < zeropage)
/* All the extra data is in the last page of the segment.
@@ -404,23 +339,23 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
if ((c->prot & PROT_WRITE) == 0)
{
/* Dag nab it. */
if (mprotect ((caddr_t) (zero & ~(pagesize - 1)),
pagesize, c->prot|PROT_WRITE) < 0)
if (__mprotect ((caddr_t) (zero & ~(_dl_pagesize - 1)),
_dl_pagesize, c->prot|PROT_WRITE) < 0)
lose (errno, "cannot change memory protections");
}
memset ((void *) zero, 0, zeropage - zero);
if ((c->prot & PROT_WRITE) == 0)
mprotect ((caddr_t) (zero & ~(pagesize - 1)),
pagesize, c->prot);
__mprotect ((caddr_t) (zero & ~(_dl_pagesize - 1)),
_dl_pagesize, c->prot);
}
if (zeroend > zeropage)
{
/* Map the remaining zero pages in from the zero fill FD. */
caddr_t mapat;
mapat = mmap ((caddr_t) zeropage, zeroend - zeropage, c->prot,
MAP_ANON|MAP_PRIVATE|MAP_FIXED,
_dl_zerofd, 0);
mapat = __mmap ((caddr_t) zeropage, zeroend - zeropage,
c->prot, MAP_ANON|MAP_PRIVATE|MAP_FIXED,
ANONFD, 0);
if (mapat == (caddr_t) -1)
lose (errno, "cannot map zero-fill pages");
}
@@ -428,9 +363,26 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
++c;
}
if (l->l_phdr == 0)
{
/* There was no PT_PHDR specified. We need to find the phdr in the
load image ourselves. We assume it is in fact in the load image
somewhere, and that the first load command starts at the
beginning of the file and thus contains the ELF file header. */
ElfW(Addr) bof = l->l_addr + loadcmds[0].mapstart;
assert (loadcmds[0].mapoff == 0);
l->l_phdr = (void *) (bof + ((const ElfW(Ehdr) *) bof)->e_phoff);
}
else
/* Adjust the PT_PHDR value by the runtime load address. */
(ElfW(Addr)) l->l_phdr += l->l_addr;
}
if (type == ET_EXEC)
/* We are done mapping in the file. We no longer need the descriptor. */
__close (fd);
if (l->l_type == lt_library && type == ET_EXEC)
l->l_type = lt_executable;
if (l->l_ld == 0)
@@ -439,11 +391,9 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
LOSE ("object file has no dynamic section");
}
else
(Elf32_Addr) l->l_ld += l->l_addr;
(ElfW(Addr)) l->l_ld += l->l_addr;
if (l->l_phdr == 0)
l->l_phdr = (void *) ((const Elf32_Ehdr *) l->l_addr)->e_phoff;
(Elf32_Addr) l->l_phdr += l->l_addr;
l->l_entry += l->l_addr;
elf_get_dynamic_info (l->l_ld, l->l_info);
if (l->l_info[DT_HASH])
@@ -451,3 +401,188 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname)
return l;
}
/* Try to open NAME in one of the directories in DIRPATH.
Return the fd, or -1. If successful, fill in *REALNAME
with the malloc'd full directory name. */
static int
open_path (const char *name, size_t namelen,
const char *dirpath,
char **realname)
{
char *buf;
const char *p;
int fd;
p = dirpath;
if (p == NULL || *p == '\0')
{
errno = ENOENT;
return -1;
}
buf = __alloca (strlen (dirpath) + 1 + namelen);
do
{
size_t buflen;
dirpath = p;
p = strpbrk (dirpath, ":;");
if (p == NULL)
p = strchr (dirpath, '\0');
if (p == dirpath)
{
/* Two adjacent colons, or a colon at the beginning or the end of
the path means to search the current directory. */
(void) memcpy (buf, name, namelen);
buflen = namelen;
}
else
{
/* Construct the pathname to try. */
(void) memcpy (buf, dirpath, p - dirpath);
buf[p - dirpath] = '/';
(void) memcpy (&buf[(p - dirpath) + 1], name, namelen);
buflen = p - dirpath + 1 + namelen;
}
fd = __open (buf, O_RDONLY);
if (fd != -1)
{
*realname = malloc (buflen);
if (*realname)
{
memcpy (*realname, buf, buflen);
return fd;
}
else
{
/* No memory for the name, we certainly won't be able
to load and link it. */
__close (fd);
return -1;
}
}
if (errno != ENOENT && errno != EACCES)
/* The file exists and is readable, but something went wrong. */
return -1;
}
while (*p++ != '\0');
return -1;
}
/* Map in the shared object file NAME. */
struct link_map *
_dl_map_object (struct link_map *loader, const char *name, int type)
{
int fd;
char *realname;
char *name_copy;
struct link_map *l;
/* Look for this name among those already loaded. */
for (l = _dl_loaded; l; l = l->l_next)
if (! strcmp (name, l->l_libname) || /* NAME was requested before. */
! strcmp (name, l->l_name) || /* NAME was found before. */
/* If the requested name matches the soname of a loaded object,
use that object. */
(l->l_info[DT_SONAME] &&
! strcmp (name, (const char *) (l->l_addr +
l->l_info[DT_STRTAB]->d_un.d_ptr +
l->l_info[DT_SONAME]->d_un.d_val))))
{
/* The object is already loaded.
Just bump its reference count and return it. */
++l->l_opencount;
return l;
}
if (strchr (name, '/') == NULL)
{
/* Search for NAME in several places. */
size_t namelen = strlen (name) + 1;
inline void trypath (const char *dirpath)
{
fd = open_path (name, namelen, dirpath, &realname);
}
fd = -1;
/* First try the DT_RPATH of the dependent object that caused NAME
to be loaded. Then that object's dependent, and on up. */
for (l = loader; fd == -1 && l; l = l->l_loader)
if (l && l->l_info[DT_RPATH])
trypath ((const char *) (l->l_addr +
l->l_info[DT_STRTAB]->d_un.d_ptr +
l->l_info[DT_RPATH]->d_un.d_val));
/* If dynamically linked, try the DT_RPATH of the executable itself. */
l = _dl_loaded;
if (fd == -1 && l && l->l_type != lt_loaded && l->l_info[DT_RPATH])
trypath ((const char *) (l->l_addr +
l->l_info[DT_STRTAB]->d_un.d_ptr +
l->l_info[DT_RPATH]->d_un.d_val));
/* Try an environment variable (unless setuid). */
if (fd == -1 && ! __libc_enable_secure)
trypath (getenv ("LD_LIBRARY_PATH"));
if (fd == -1)
{
/* Check the list of libraries in the file /etc/ld.so.cache,
for compatibility with Linux's ldconfig program. */
extern const char *_dl_load_cache_lookup (const char *name);
const char *cached = _dl_load_cache_lookup (name);
if (cached)
{
fd = __open (cached, O_RDONLY);
if (fd != -1)
{
realname = local_strdup (cached);
if (realname == NULL)
{
__close (fd);
fd = -1;
}
}
}
}
/* Finally, try the default path. */
if (fd == -1)
{
extern const char *_dl_rpath; /* Set in rtld.c. */
trypath (_dl_rpath);
}
}
else
{
fd = __open (name, O_RDONLY);
if (fd != -1)
{
realname = local_strdup (name);
if (realname == NULL)
{
__close (fd);
fd = -1;
}
}
}
if (fd != -1)
{
name_copy = local_strdup (name);
if (name_copy == NULL)
{
__close (fd);
fd = -1;
}
}
if (fd == -1)
_dl_signal_error (errno, name, "cannot open shared object file");
return _dl_map_object_from_fd (name_copy, fd, realname, loader, type);
}
+113 -78
View File
@@ -1,5 +1,5 @@
/* Look up a symbol in the loaded objects.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,94 +18,129 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <stddef.h>
#include <libelf.h>
#include <link.h>
#include <assert.h>
#include <string.h>
/* Search loaded objects' symbol tables for a definition of
the symbol UNDEF_NAME. If NOSELF is nonzero, then *REF
cannot satisfy the reference itself; some different binding
must be found. */
Elf32_Addr
_dl_lookup_symbol (const char *undef_name, const Elf32_Sym **ref,
struct link_map *symbol_scope,
const char *reference_name,
int noself)
/* This is the hashing function specified by the ELF ABI. */
static inline unsigned
_dl_elf_hash (const char *name)
{
unsigned long int hash = elf_hash (undef_name);
struct link_map *map;
struct
unsigned long int hash = 0;
while (*name != '\0')
{
Elf32_Addr a;
const Elf32_Sym *s;
} weak_value = { 0, NULL };
/* Search the relevant loaded objects for a definition. */
for (map = symbol_scope; map; map = map->l_next)
{
const Elf32_Sym *symtab;
const char *strtab;
Elf32_Word symidx;
symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
/* Search the appropriate hash bucket in this object's symbol table
for a definition for the same symbol name. */
for (symidx = map->l_buckets[hash % map->l_nbuckets];
symidx != STN_UNDEF;
symidx = map->l_chain[symidx])
unsigned long int hi;
hash = (hash << 4) + *name++;
hi = hash & 0xf0000000;
if (hi != 0)
{
const Elf32_Sym *sym = &symtab[symidx];
if (sym->st_value == 0 || /* No value. */
sym->st_shndx == SHN_UNDEF || /* PLT entry. */
(noself && sym == *ref)) /* The reference can't define it. */
continue;
switch (ELF32_ST_TYPE (sym->st_info))
{
case STT_NOTYPE:
case STT_FUNC:
case STT_OBJECT:
break;
default:
/* Not a code/data definition. */
continue;
}
if (sym != *ref && strcmp (strtab + sym->st_name, undef_name))
/* Not the symbol we are looking for. */
continue;
switch (ELF32_ST_BIND (sym->st_info))
{
case STB_GLOBAL:
/* Global definition. Just what we need. */
*ref = sym;
return map->l_addr;
case STB_WEAK:
/* Weak definition. Use this value if we don't find another. */
if (! weak_value.s)
{
weak_value.s = sym;
weak_value.a = map->l_addr;
}
break;
default:
/* Local symbols are ignored. */
break;
}
hash ^= hi >> 24;
/* The ELF ABI says `hash &= ~hi', but this is equivalent
in this case and on some machines one insn instead of two. */
hash ^= hi;
}
}
return hash;
}
if (weak_value.s == NULL && ELF32_ST_BIND ((*ref)->st_info) != STB_WEAK)
/* Search loaded objects' symbol tables for a definition of the symbol
UNDEF_NAME. FLAGS is a set of flags. If DL_LOOKUP_NOEXEC is set,
then don't search the executable for a definition; this used for
copy relocs. If DL_LOOKUP_NOPLT is set, then a PLT entry cannot
satisfy the reference; some different binding must be found. */
ElfW(Addr)
_dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref,
struct link_map *symbol_scope[],
const char *reference_name,
int flags)
{
const unsigned long int hash = _dl_elf_hash (undef_name);
struct
{
ElfW(Addr) a;
const ElfW(Sym) *s;
} weak_value = { 0, NULL };
size_t i;
struct link_map **scope, *map;
/* Search the relevant loaded objects for a definition. */
for (scope = symbol_scope; *scope; ++scope)
for (i = 0; i < (*scope)->l_nsearchlist; ++i)
{
const ElfW(Sym) *symtab;
const char *strtab;
ElfW(Symndx) symidx;
map = (*scope)->l_searchlist[i];
/* Don't search the executable when resolving a copy reloc. */
if (flags & DL_LOOKUP_NOEXEC && map->l_type == lt_executable)
continue;
symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr);
/* Search the appropriate hash bucket in this object's symbol table
for a definition for the same symbol name. */
for (symidx = map->l_buckets[hash % map->l_nbuckets];
symidx != STN_UNDEF;
symidx = map->l_chain[symidx])
{
const ElfW(Sym) *sym = &symtab[symidx];
if (sym->st_value == 0 || /* No value. */
((flags & DL_LOOKUP_NOPLT) != 0 /* Reject PLT entry. */
&& sym->st_shndx == SHN_UNDEF))
continue;
switch (ELFW(ST_TYPE) (sym->st_info))
{
case STT_NOTYPE:
case STT_FUNC:
case STT_OBJECT:
break;
default:
/* Not a code/data definition. */
continue;
}
if (sym != *ref && strcmp (strtab + sym->st_name, undef_name))
/* Not the symbol we are looking for. */
continue;
switch (ELFW(ST_BIND) (sym->st_info))
{
case STB_GLOBAL:
/* Global definition. Just what we need. */
*ref = sym;
return map->l_addr;
case STB_WEAK:
/* Weak definition. Use this value if we don't find
another. */
if (! weak_value.s)
{
weak_value.s = sym;
weak_value.a = map->l_addr;
}
break;
default:
/* Local symbols are ignored. */
break;
}
}
}
if (weak_value.s == NULL &&
(*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK))
{
/* We could find no value for a strong reference. */
const char msg[] = "undefined symbol: ";
char buf[sizeof msg + strlen (undef_name)];
const size_t len = strlen (undef_name);
char buf[sizeof msg + len];
memcpy (buf, msg, sizeof msg - 1);
memcpy (&buf[sizeof msg - 1], undef_name, sizeof buf - sizeof msg + 1);
memcpy (&buf[sizeof msg - 1], undef_name, len + 1);
_dl_signal_error (0, reference_name, buf);
}
@@ -119,8 +154,8 @@ _dl_lookup_symbol (const char *undef_name, const Elf32_Sym **ref,
void
_dl_setup_hash (struct link_map *map)
{
Elf32_Word *hash = (void *) map->l_addr + map->l_info[DT_HASH]->d_un.d_ptr;
Elf32_Word nchain;
ElfW(Symndx) *hash = (void *)(map->l_addr + map->l_info[DT_HASH]->d_un.d_ptr);
ElfW(Symndx) nchain;
map->l_nbuckets = *hash++;
nchain = *hash++;
map->l_buckets = hash;
+33 -30
View File
@@ -1,5 +1,5 @@
/* Minimal replacements for basic facilities used in the dynamic linker.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -30,25 +30,29 @@ Cambridge, MA 02139, USA. */
static void *alloc_ptr, *alloc_end, *alloc_last_block;
void *
void * weak_function
malloc (size_t n)
{
#ifdef MAP_ANON
#define _dl_zerofd (-1)
#else
extern int _dl_zerofd;
static size_t pagesize;
if (pagesize == 0)
pagesize = __getpagesize ();
if (_dl_zerofd == -1)
_dl_zerofd = _dl_sysdep_open_zero_fill ();
#define MAP_ANON 0
#endif
if (_dl_pagesize == 0)
_dl_pagesize = __getpagesize ();
if (alloc_end == 0)
{
/* Consume any unused space in the last page of our data segment. */
extern int _end;
alloc_ptr = &_end;
alloc_end = (void *) 0 + (((alloc_ptr - (void *) 0) + pagesize - 1)
& ~(pagesize - 1));
alloc_end = (void *) 0 + (((alloc_ptr - (void *) 0) + _dl_pagesize - 1)
& ~(_dl_pagesize - 1));
}
/* Make sure the allocation pointer is ideally aligned. */
@@ -59,60 +63,61 @@ malloc (size_t n)
{
/* Insufficient space left; allocate another page. */
caddr_t page;
assert (n <= pagesize);
page = mmap (0, pagesize, PROT_READ|PROT_WRITE,
MAP_ANON|MAP_PRIVATE, _dl_zerofd, 0);
assert (n <= _dl_pagesize);
page = __mmap (0, _dl_pagesize, PROT_READ|PROT_WRITE,
MAP_ANON|MAP_PRIVATE, _dl_zerofd, 0);
assert (page != (caddr_t) -1);
if (page != alloc_end)
alloc_ptr = page;
alloc_end = page + pagesize;
alloc_end = page + _dl_pagesize;
}
alloc_last_block = (void *) alloc_ptr;
alloc_ptr += n;
return alloc_last_block;
}
weak_symbol (malloc)
/* This will rarely be called. */
void
void weak_function
free (void *ptr)
{
/* We can free only the last block allocated. */
if (ptr == alloc_last_block)
alloc_ptr = alloc_last_block;
}
weak_symbol (free)
/* This is never called. */
void *
/* This is only called with the most recent block returned by malloc. */
void * weak_function
realloc (void *ptr, size_t n)
{ ptr += n; abort (); }
weak_symbol (realloc)
{
void *new;
assert (ptr == alloc_last_block);
alloc_ptr = alloc_last_block;
new = malloc (n);
assert (new == ptr);
return new;
}
/* Avoid signal frobnication in setjmp/longjmp. Keeps things smaller. */
#include <setjmp.h>
int __sigjmp_save (sigjmp_buf env, int savemask)
int weak_function
__sigjmp_save (sigjmp_buf env, int savemask)
{ env[0].__mask_was_saved = savemask; return 0; }
weak_symbol (__sigjmp_save)
void
void weak_function
longjmp (jmp_buf env, int val) { __longjmp (env[0].__jmpbuf, val); }
weak_symbol (longjmp)
/* Define our own stub for the localization function used by strerror.
English-only in the dynamic linker keeps it smaller. */
char *
char * weak_function
__dgettext (const char *domainname, const char *msgid)
{
assert (domainname == _libc_intl_domainname);
return (char *) msgid;
}
weak_symbol (__dgettext)
weak_alias (__dgettext, dgettext)
#ifndef NDEBUG
@@ -121,7 +126,7 @@ weak_alias (__dgettext, dgettext)
If we are linked into the user program (-ldl), the normal __assert_fail
defn can override this one. */
void
void weak_function
__assert_fail (const char *assertion,
const char *file, unsigned int line, const char *function)
{
@@ -134,9 +139,8 @@ __assert_fail (const char *assertion,
NULL);
}
weak_symbol (__assert_fail)
void
void weak_function
__assert_perror_fail (int errnum,
const char *file, unsigned int line,
const char *function)
@@ -149,6 +153,5 @@ __assert_perror_fail (int errnum,
"Unexpected error: ", strerror (errnum), "\n", NULL);
}
weak_symbol (__assert_perror_fail)
#endif
+4 -8
View File
@@ -1,5 +1,5 @@
/* Storage management for the chain of loaded shared objects.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -24,11 +24,8 @@ Cambridge, MA 02139, USA. */
#include <errno.h>
/* List of objects currently loaded. */
struct link_map *_dl_loaded;
/* Tail of that list which were loaded at startup. */
struct link_map *_dl_startup_loaded;
/* List of objects currently loaded is [2] of this, aka _dl_loaded. */
struct link_map *_dl_default_scope[5];
/* Allocate a `struct link_map' for a new object being loaded,
and enter it into the _dl_loaded list. */
@@ -38,8 +35,7 @@ _dl_new_object (char *realname, const char *libname, int type)
{
struct link_map *new = malloc (sizeof *new);
if (! new)
_dl_signal_error (ENOMEM, libname,
"cannot allocate shared object descriptor");
return NULL;
memset (new, 0, sizeof *new);
new->l_name = realname;
+154
View File
@@ -0,0 +1,154 @@
/* Load a shared object at runtime, relocate it, and run its initializer.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <errno.h>
extern void _dl_start (void); weak_extern (_dl_start)
extern int __libc_multiple_libcs; /* Defined in init-first.c. */
extern int __libc_argc;
extern char **__libc_argv;
extern char **__libc_envp;
size_t _dl_global_scope_alloc;
struct link_map *
_dl_open (const char *file, int mode)
{
struct link_map *new, *l;
ElfW(Addr) init;
struct r_debug *r;
/* To decide whether we are the static libc or not. We must use
this variable since gcc would otherwise optimize the test away. */
void (*dl_start_ptr) (void) = &_dl_start;
/* Load the named object. */
new = _dl_map_object (NULL, file, lt_loaded);
if (new->l_searchlist)
/* It was already open. */
return new;
/* Load that object's dependencies. */
_dl_map_object_deps (new, NULL, 0);
/* Relocate the objects loaded. We do this in reverse order so that copy
relocs of earlier objects overwrite the data written by later objects. */
l = new;
while (l->l_next)
l = l->l_next;
while (1)
{
if (! l->l_relocated)
{
/* We use an indirect call call for _dl_relocate_object because
we must avoid using the PLT in the call. If our PLT entry for
_dl_relocate_object hasn't been used yet, then the dynamic
linker fixup routine will clobber _dl_global_scope during its
work. We must be sure that nothing will require a PLT fixup
between when _dl_object_relocation_scope returns and when we
enter the dynamic linker's code (_dl_relocate_object). */
__typeof (_dl_relocate_object) *reloc = &_dl_relocate_object;
(*reloc) (l, _dl_object_relocation_scope (l),
(mode & RTLD_BINDING_MASK) == RTLD_LAZY);
*_dl_global_scope_end = NULL;
}
if (l == new)
break;
l = l->l_prev;
}
new->l_global = (mode & RTLD_GLOBAL);
if (new->l_global)
{
/* The symbols of the new object and its dependencies are to be
introduced into the global scope that will be used to resolve
references from other dynamically-loaded objects. */
if (_dl_global_scope_alloc == 0)
{
/* This is the first dynamic object given global scope. */
_dl_global_scope_alloc = 8;
_dl_global_scope = malloc (8 * sizeof (struct link_map *));
if (! _dl_global_scope)
{
_dl_global_scope = _dl_default_scope;
nomem:
_dl_close (new);
_dl_signal_error (ENOMEM, file, "cannot extend global scope");
}
_dl_global_scope[2] = _dl_default_scope[2];
_dl_global_scope[3] = new;
_dl_global_scope[4] = NULL;
_dl_global_scope[5] = NULL;
}
else
{
if (_dl_global_scope_alloc <
(size_t) (_dl_global_scope_end - _dl_global_scope + 2))
{
/* Must extend the list. */
struct link_map **new = realloc (_dl_global_scope,
_dl_global_scope_alloc * 2);
if (! new)
goto nomem;
_dl_global_scope_end = new + (_dl_global_scope_end -
_dl_global_scope);
_dl_global_scope = new;
_dl_global_scope_alloc *= 2;
}
/* Append the new object and re-terminate the list. */
*_dl_global_scope_end++ = new;
/* We keep the list double-terminated so the last element
can be filled in for symbol lookups. */
_dl_global_scope_end[0] = NULL;
_dl_global_scope_end[1] = NULL;
}
}
/* Notify the debugger we have added some objects. We need to call
_dl_debug_initialize in a static program in case dynamic linking has
not been used before. */
r = _dl_debug_initialize (0);
r->r_state = RT_ADD;
_dl_debug_state ();
/* Run the initializer functions of new objects. */
while (init = _dl_init_next (new))
(*(void (*) (int, char **, char **)) init) (__libc_argc, __libc_argv,
__libc_envp);
if (dl_start_ptr == NULL)
/* We must be the static _dl_open in libc.a because ld.so.1 is not
in scope. A static program that has loaded a dynamic object
now has competition. */
__libc_multiple_libcs = 1;
return new;
}
+23 -51
View File
@@ -24,12 +24,9 @@ Cambridge, MA 02139, USA. */
#include <errno.h>
#include "dynamic-link.h"
void
_dl_relocate_object (struct link_map *l, int lazy)
_dl_relocate_object (struct link_map *l, struct link_map *scope[], int lazy)
{
const size_t pagesize = getpagesize ();
if (l->l_relocated)
return;
@@ -37,89 +34,64 @@ _dl_relocate_object (struct link_map *l, int lazy)
{
/* Bletch. We must make read-only segments writable
long enough to relocate them. */
const Elf32_Phdr *ph;
const ElfW(Phdr) *ph;
for (ph = l->l_phdr; ph < &l->l_phdr[l->l_phnum]; ++ph)
if (ph->p_type == PT_LOAD && (ph->p_flags & PF_W) == 0)
{
caddr_t mapstart = ((caddr_t) l->l_addr +
(ph->p_vaddr & ~(pagesize - 1)));
(ph->p_vaddr & ~(_dl_pagesize - 1)));
caddr_t mapend = ((caddr_t) l->l_addr +
((ph->p_vaddr + ph->p_memsz + pagesize - 1)
& ~(pagesize - 1)));
if (mprotect (mapstart, mapend - mapstart,
PROT_READ|PROT_WRITE) < 0)
((ph->p_vaddr + ph->p_memsz + _dl_pagesize - 1)
& ~(_dl_pagesize - 1)));
if (__mprotect (mapstart, mapend - mapstart,
PROT_READ|PROT_WRITE) < 0)
_dl_signal_error (errno, l->l_name,
"cannot make segment writable for relocation");
}
}
{
struct link_map *real_next, *scope;
/* Do the actual relocation of the object's GOT and other data. */
const char *strtab
const char *strtab /* String table object symbols. */
= ((void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
/* This macro is used as a callback from the ELF_DYNAMIC_RELOCATE code. */
#define RESOLVE(ref, flags) \
(_dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope, \
l->l_name, flags))
Elf32_Addr resolve (const Elf32_Sym **ref, Elf32_Addr r_offset)
{
return _dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope,
l->l_name, (*ref)->st_value == r_offset);
}
real_next = l->l_next;
if (l->l_info[DT_SYMBOLIC])
{
if (l->l_prev)
l->l_prev->l_next = real_next;
l->l_next = _dl_loaded;
scope = l;
}
else
scope = _dl_loaded;
if (l->l_type == lt_interpreter)
/* We cannot be lazy when relocating the dynamic linker itself. It
was previously relocated eagerly (allowing us to be running now),
and needs always to be fully relocated so it can run without the
aid of run-time fixups (because it's the one to do them), so we
must always re-relocate its PLT eagerly. */
lazy = 0;
ELF_DYNAMIC_RELOCATE (l, lazy, resolve);
/* Restore list frobnication done above for DT_SYMBOLIC. */
l->l_next = real_next;
if (l->l_prev)
l->l_prev->l_next = l;
#include "dynamic-link.h"
ELF_DYNAMIC_RELOCATE (l, lazy);
}
/* Set up the PLT so its unrelocated entries will
jump to _dl_runtime_resolve, which will relocate them. */
/* Set up the PLT so its unrelocated entries will jump to
_dl_runtime_resolve (dl-runtime.c), which will relocate them. */
elf_machine_runtime_setup (l, lazy);
/* Mark the object so we know ths work has been done. */
l->l_relocated = 1;
if (l->l_info[DT_TEXTREL])
{
/* Undo the protection change we made before relocating. */
const Elf32_Phdr *ph;
const ElfW(Phdr) *ph;
for (ph = l->l_phdr; ph < &l->l_phdr[l->l_phnum]; ++ph)
if (ph->p_type == PT_LOAD && (ph->p_flags & PF_W) == 0)
{
caddr_t mapstart = ((caddr_t) l->l_addr +
(ph->p_vaddr & ~(pagesize - 1)));
(ph->p_vaddr & ~(_dl_pagesize - 1)));
caddr_t mapend = ((caddr_t) l->l_addr +
((ph->p_vaddr + ph->p_memsz + pagesize - 1)
& ~(pagesize - 1)));
((ph->p_vaddr + ph->p_memsz + _dl_pagesize - 1)
& ~(_dl_pagesize - 1)));
int prot = 0;
if (ph->p_flags & PF_R)
prot |= PROT_READ;
if (ph->p_flags & PF_X)
prot |= PROT_EXEC;
if (mprotect (mapstart, mapend - mapstart, prot) < 0)
if (__mprotect (mapstart, mapend - mapstart, prot) < 0)
_dl_signal_error (errno, l->l_name,
"can't restore segment prot after reloc");
}
}
}
+72 -34
View File
@@ -18,15 +18,65 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <stddef.h>
/* The global scope we will use for symbol lookups.
This will be modified by _dl_open if RTLD_GLOBAL is used. */
struct link_map **_dl_global_scope = _dl_default_scope;
struct link_map **_dl_global_scope_end = &_dl_default_scope[3];
/* Hack _dl_global_scope[0] and [1] as necessary, and return a pointer into
_dl_global_scope that should be passed to _dl_lookup_symbol for symbol
references made in the object L's relocations. */
inline struct link_map **
_dl_object_relocation_scope (struct link_map *l)
{
if (l->l_info[DT_SYMBOLIC])
{
/* This object's global references are to be resolved first
in the object itself, and only secondarily in more global
scopes. */
if (! l->l_searchlist)
/* We must construct the searchlist for this object. */
_dl_map_object_deps (l, NULL, 0);
/* The primary scope is this object itself and its
dependencies. */
_dl_global_scope[0] = l;
/* Secondary is the dependency tree that reached L; the object
requested directly by the user is at the root of that tree. */
while (l->l_loader)
l = l->l_loader;
_dl_global_scope[1] = l;
/* Finally, the global scope follows. */
return _dl_global_scope;
}
else
{
/* Use first the global scope, and then the scope of the root of the
dependency tree that first caused this object to be loaded. */
while (l->l_loader)
l = l->l_loader;
*_dl_global_scope_end = l;
return &_dl_global_scope[2];
}
}
#include "dynamic-link.h"
/* Figure out the right type, Rel or Rela. */
#define elf_machine_rel 1
#define elf_machine_rela 2
#if elf_machine_relplt == elf_machine_rel
#define PLTREL Elf32_Rel
#define PLTREL ElfW(Rel)
#elif elf_machine_relplt == elf_machine_rela
#define PLTREL Elf32_Rela
#define PLTREL ElfW(Rela)
#else
#error "dl-machine.h bug: elf_machine_relplt not rel or rela"
#endif
@@ -37,11 +87,11 @@ Cambridge, MA 02139, USA. */
in the trampoline code will be a local PC-relative call. Tell the
compiler not to worry that the function appears not to be called. */
static Elf32_Addr fixup (
static ElfW(Addr) fixup (
#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
ELF_MACHINE_RUNTIME_FIXUP_ARGS,
#endif
struct link_map *l, Elf32_Word reloc_offset)
struct link_map *l, ElfW(Word) reloc_offset)
__attribute__ ((unused));
/* This function is called through a special trampoline from the PLT the
@@ -51,15 +101,15 @@ static Elf32_Addr fixup (
to that address. Future calls will bounce directly from the PLT to the
function. */
static Elf32_Addr
static ElfW(Addr)
fixup (
#ifdef ELF_MACHINE_RUNTIME_FIXUP_ARGS
ELF_MACHINE_RUNTIME_FIXUP_ARGS,
#endif
struct link_map *l, Elf32_Word reloc_offset)
struct link_map *l, ElfW(Word) reloc_offset)
{
const Elf32_Sym *const symtab
= (const Elf32_Sym *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);
const ElfW(Sym) *const symtab
= (const ElfW(Sym) *) (l->l_addr + l->l_info[DT_SYMTAB]->d_un.d_ptr);
const char *strtab =
(const char *) (l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr);
@@ -67,36 +117,24 @@ fixup (
= (const void *) (l->l_addr + l->l_info[DT_JMPREL]->d_un.d_ptr +
reloc_offset);
const Elf32_Sym *definer;
Elf32_Addr loadbase;
struct link_map *scope, *real_next;
/* Set up the scope to find symbols referenced by this object. */
struct link_map **scope = _dl_object_relocation_scope (l);
/* Look up the symbol's run-time value. */
{
/* This macro is used as a callback from the elf_machine_relplt code. */
#define RESOLVE(ref, flags) \
(_dl_lookup_symbol (strtab + (*ref)->st_name, ref, scope, \
l->l_name, flags))
#include "dynamic-link.h"
real_next = l->l_next;
if (l->l_info[DT_SYMBOLIC])
{
l->l_next = _dl_loaded;
if (l->l_prev)
l->l_prev->l_next = real_next;
scope = l;
}
else
scope = _dl_loaded;
/* Perform the specified relocation. */
elf_machine_relplt (l, reloc, &symtab[ELFW(R_SYM) (reloc->r_info)]);
}
definer = &symtab[ELF32_R_SYM (reloc->r_info)];
loadbase = _dl_lookup_symbol (strtab + definer->st_name, &definer,
scope, l->l_name, 0);
*_dl_global_scope_end = NULL;
/* Restore list frobnication done above for DT_SYMBOLIC. */
l->l_next = real_next;
if (l->l_prev)
l->l_prev->l_next = l;
/* Apply the relocation with that value. */
elf_machine_relplt (l, reloc, loadbase, definer);
return *(Elf32_Addr *) (l->l_addr + reloc->r_offset);
/* Return the address that was written by the relocation. */
return *(ElfW(Addr) *) (l->l_addr + reloc->r_offset);
}
+85
View File
@@ -0,0 +1,85 @@
/* Support for dynamic linking code in static libc.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <assert.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
/* This file defines some things that for the dynamic linker are defined in
rtld.c and dl-sysdep.c in ways appropriate to bootstrap dynamic linking. */
extern char *__progname;
char **_dl_argv = &__progname; /* This is checked for some error messages. */
/* This defines the default search path for libraries.
For the dynamic linker it is set by -rpath when linking. */
const char *_dl_rpath = DEFAULT_RPATH;
/* This is the only dl-sysdep.c function that is actually needed at run-time
by _dl_map_object. */
int
_dl_sysdep_open_zero_fill (void)
{
return __open ("/dev/zero", O_RDONLY);
}
/* This should never be called. */
void
_dl_sysdep_fatal (void)
{
assert (! "_dl_sysdep_fatal called");
}
/* Read the whole contents of FILE into new mmap'd space with given
protections. *SIZEP gets the size of the file. */
void *
_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
{
void *result;
struct stat st;
int fd = __open (file, O_RDONLY);
if (fd < 0)
return NULL;
if (__fstat (fd, &st) < 0)
result = NULL;
else
{
/* Map a copy of the file contents. */
result = __mmap (0, st.st_size, prot,
#ifdef MAP_COPY
MAP_COPY
#else
MAP_PRIVATE
#endif
#ifdef MAP_FILE
| MAP_FILE
#endif
, fd, 0);
if (result == (void *) -1)
result = NULL;
else
*sizep = st.st_size;
}
__close (fd);
return result;
}
+13 -22
View File
@@ -1,4 +1,5 @@
/* Copyright (C) 1991 Free Software Foundation, Inc.
/* Look up a symbol's run-time value in the scope of a loaded object.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -16,27 +17,17 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <errno.h>
#include <math.h>
#include <stddef.h>
#include <link.h>
/* Return the inverse cosine of X. */
double
DEFUN(acos, (x), double x)
/* Look up symbol NAME in MAP's scope and return its run-time address. */
ElfW(Addr)
_dl_symbol_value (struct link_map *map, const char *name)
{
double t;
if (__isnan(x))
{
errno = EDOM;
return x;
}
if (x == -1.0)
/* If X is -1, the general formula blows up (zero divided by zero loses),
but we know that acos(-1) = pi. */
t = atan2(1.0, 0.0);
else
t = atan2(sqrt((1.0 - x) / (1.0 + x)), 1.0);
return t + t;
ElfW(Addr) loadbase;
const ElfW(Sym) *ref = NULL;
struct link_map *scope[2] = { map, NULL };
loadbase = _dl_lookup_symbol (name, &ref, scope, map->l_name, 0);
return loadbase + ref->st_value;
}
+86
View File
@@ -0,0 +1,86 @@
/* dladdr -- Locate the shared object symbol nearest a given address.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <stddef.h>
#include <link.h>
#include <dlfcn.h>
int
dladdr (void *address, Dl_info *info)
{
const ElfW(Addr) addr = (ElfW(Addr)) address;
struct link_map *l, *match;
const ElfW(Sym) *symtab, *matchsym;
const char *strtab;
/* Find the highest-addressed object that ADDRESS is not below. */
match = NULL;
for (l = _dl_loaded; l; l = l->l_next)
if (addr >= l->l_addr && !match || match->l_addr < l->l_addr)
match = l;
if (match)
{
/* We know ADDRESS lies within MATCH if in any shared object.
Make sure it isn't past the end of MATCH's segments. */
size_t n = match->l_phnum;
do
--n;
while (match->l_phdr[n].p_type != PT_LOAD);
if (addr >= (match->l_addr +
match->l_phdr[n].p_vaddr + match->l_phdr[n].p_memsz))
/* Off the end of the highest-addressed shared object. */
return 0;
}
else
return 0;
/* Now we know what object the address lies in. */
info->dli_fname = match->l_name;
info->dli_fbase = (void *) match->l_addr;
symtab = ((void *) match->l_addr + match->l_info[DT_SYMTAB]->d_un.d_ptr);
strtab = ((void *) match->l_addr + match->l_info[DT_STRTAB]->d_un.d_ptr);
/* We assume that the string table follows the symbol table, because
there is no way in ELF to know the size of the dynamic symbol table!! */
for (matchsym = NULL; (void *) symtab < (void *) strtab; ++symtab)
if (addr >= match->l_addr + symtab->st_value && !matchsym ||
matchsym->st_value < symtab->st_value &&
ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL ||
ELFW(ST_BIND) (symtab->st_info) == STB_WEAK)
matchsym = symtab;
if (matchsym)
{
/* We found a symbol close by. Fill in its name and exact address. */
info->dli_sname = strtab + matchsym->st_name;
info->dli_saddr = (void *) (match->l_addr + matchsym->st_value);
}
else
{
/* No symbol matches. We return only the containing object. */
info->dli_sname = NULL;
info->dli_saddr = NULL;
}
return 1;
}
+2 -66
View File
@@ -1,5 +1,5 @@
/* dlclose -- Close a handle opened by `dlopen'.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,77 +19,13 @@ Cambridge, MA 02139, USA. */
#include <link.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/mman.h>
#define LOSE(s) _dl_signal_error (0, map->l_name, s)
int
dlclose (void *handle)
{
void doit (void)
{
struct link_map *map = handle;
if (map->l_opencount == 0)
LOSE ("shared object not open");
/* Decrement the reference count. */
--map->l_opencount;
if (map->l_opencount == 0 && map->l_type == lt_loaded)
{
/* That was the last reference, and this was a dlopen-loaded
object. We can unmap it. */
const Elf32_Phdr *ph;
if (map->l_info[DT_FINI])
/* Call its termination function. */
(*(void (*) (void)) ((void *) map->l_addr +
map->l_info[DT_FINI]->d_un.d_ptr)) ();
if (map->l_info[DT_NEEDED])
{
/* Also close all the dependencies. */
const char *strtab
= (void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr;
const Elf32_Dyn *d;
for (d = map->l_ld; d->d_tag != DT_NULL; ++d)
if (d->d_tag == DT_NEEDED)
{
/* It must already be open, since this one needed it;
so dlopen will just find us its `struct link_map'
and bump its reference count. */
struct link_map *o, *dep
= dlopen (strtab + d->d_un.d_val, RTLD_LAZY);
--dep->l_opencount; /* Lose the ref from that dlopen. */
/* Now we have the handle; we can close it for real. */
o = map;
map = dep;
doit ();
map = o;
}
}
/* Unmap the segments. */
for (ph = map->l_phdr; ph < &map->l_phdr[map->l_phnum]; ++ph)
if (ph->p_type == PT_LOAD)
{
Elf32_Addr mapstart = ph->p_vaddr & ~(ph->p_align - 1);
Elf32_Addr mapend = ((ph->p_vaddr + ph->p_memsz
+ ph->p_align - 1)
& ~(ph->p_align - 1));
munmap ((caddr_t) mapstart, mapend - mapstart);
}
/* Finally, unlink the data structure and free it. */
map->l_prev->l_next = map->l_next;
if (map->l_next)
map->l_next->l_prev = map->l_prev;
free (map);
}
_dl_close (handle);
}
return _dlerror_run (doit) ? -1 : 0;
+8 -2
View File
@@ -1,5 +1,5 @@
/* dlerror -- Return error detail for failing <dlfcn.h> functions.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@ Cambridge, MA 02139, USA. */
#include <stdlib.h>
static int last_errcode;
static const char *last_errstring;
static char *last_errstring;
static const char *last_object_name;
char *
@@ -58,6 +58,7 @@ dlerror (void)
? NULL : buf);
/* Reset the error indicator. */
free (last_errstring);
last_errstring = NULL;
return ret;
}
@@ -65,6 +66,11 @@ dlerror (void)
int
_dlerror_run (void (*operate) (void))
{
if (last_errstring != NULL)
/* Free the error string from the last failed command. This can
happen if `dlerror' was not run after an error was found. */
free (last_errstring);
last_errcode = _dl_catch_error (&last_errstring, &last_object_name,
operate);
return last_errstring != NULL;
+21 -8
View File
@@ -1,5 +1,5 @@
/* dlfcn.h -- User functions for run-time dynamic loading.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -21,16 +21,19 @@ Cambridge, MA 02139, USA. */
#define _DLFCN_H 1
/* Type of the second argument to `dlopen'. */
typedef enum
{
RTLD_LAZY = 1, /* Lazy function call binding. */
RTLD_NOW = 2 /* Immediate function call binding. */
} dl_open_mode;
/* 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
/* Open the shared object FILE and map it in; return a handle that can be
passed to `dlsym' to get symbol values from it. */
extern void *dlopen (const char *__file, dl_open_mode);
extern void *dlopen (const char *__file, int __mode);
/* Unmap and close a shared object opened by `dlopen'.
The handle cannot be used again after calling `dlclose'. */
@@ -45,5 +48,15 @@ extern void *dlsym (void *__handle, const char *__name);
the error string so that a following call returns null. */
extern char *dlerror (void);
/* Fill in *INFO with the following information about ADDRESS.
Returns 0 iff no shared object's segments contain that address. */
typedef struct
{
const char *dli_fname; /* File name of defining object. */
void *dli_fbase; /* Load address of that object. */
const char *dli_sname; /* Name of nearest symbol. */
void *dli_saddr; /* Exact value of nearest symbol. */
} Dl_info;
extern int dladdr (void *__address, Dl_info *__info);
#endif /* dlfcn.h */
+4 -31
View File
@@ -1,5 +1,5 @@
/* dlopen -- Load a shared object at run time.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -22,40 +22,13 @@ Cambridge, MA 02139, USA. */
#include <dlfcn.h>
void *
dlopen (const char *file, dl_open_mode mode)
dlopen (const char *file, int mode)
{
struct link_map *new, *l;
struct link_map *new;
void doit (void)
{
Elf32_Addr init;
new = _dl_map_object (_dl_loaded, file);
/* Map in any dependencies. */
for (l = new; l; l = l->l_next)
if (! l->l_deps_loaded)
{
if (l->l_info[DT_NEEDED])
{
const char *strtab
= (void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr;
const Elf32_Dyn *d;
for (d = l->l_ld; d->d_tag != DT_NULL; ++d)
if (d->d_tag == DT_NEEDED)
_dl_map_object (l, strtab + d->d_un.d_val);
}
l->l_deps_loaded = 1;
}
/* Relocate the objects loaded. */
for (l = new; l; l = l->l_next)
if (! l->l_relocated)
_dl_relocate_object (l, mode == RTLD_LAZY);
/* Run the initializer functions of new objects. */
while (init = _dl_init_next ())
(*(void (*) (void)) init) ();
new = _dl_open (file ?: "", mode);
}
return _dlerror_run (doit) ? NULL : new;
+19 -14
View File
@@ -1,5 +1,5 @@
/* dlsym -- Look up a symbol in a shared object loaded by `dlopen'.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -26,21 +26,26 @@ Cambridge, MA 02139, USA. */
void *
dlsym (void *handle, const char *name)
{
struct link_map *map = handle;
struct link_map *real_next;
Elf32_Addr loadbase;
const Elf32_Sym *ref = NULL;
int lose;
ElfW(Addr) loadbase;
const ElfW(Sym) *ref = NULL;
void doit (void)
{
loadbase = _dl_lookup_symbol (name, &ref, map, map->l_name, 1);
struct link_map *map = handle, **scope, *mapscope[2] = { map, NULL };
const char *owner;
if (map)
{
/* Search the scope of the given object. */
scope = mapscope;
owner = map->l_name;
}
else
{
scope = &(_dl_global_scope ?: _dl_default_scope)[2];
owner = NULL;
}
loadbase = _dl_lookup_symbol (name, &ref, scope, owner, 0);
}
/* Confine the symbol scope to just this map. */
real_next = map->l_next;
map->l_next = NULL;
lose = _dlerror_run (doit);
map->l_next = real_next;
return lose ? NULL : (void *) (loadbase + ref->st_value);
return _dlerror_run (doit) ? NULL : (void *) (loadbase + ref->st_value);
}
+11 -35
View File
@@ -22,30 +22,26 @@ Cambridge, MA 02139, USA. */
#ifdef DO_RELA
#define elf_dynamic_do_rel elf_dynamic_do_rela
#define Elf32_Rel Elf32_Rela
#define Rel Rela
#define elf_machine_rel elf_machine_rela
#endif
/* Perform the relocations in MAP on the running program image as specified
by RELTAG, SZTAG. *RESOLVE is called to resolve symbol values; it
modifies its argument pointer to point to the defining symbol, and
returns the base load address of the defining object. If LAZY is
nonzero, this is the first pass on PLT relocations; they should be set
up to call _dl_runtime_resolve, rather than fully resolved now. */
by RELTAG, SZTAG. If LAZY is nonzero, this is the first pass on PLT
relocations; they should be set up to call _dl_runtime_resolve, rather
than fully resolved now. */
static inline void
elf_dynamic_do_rel (struct link_map *map,
int reltag, int sztag,
Elf32_Addr (*resolve) (const Elf32_Sym **symbol,
Elf32_Addr r_offset),
int lazy)
{
const Elf32_Sym *const symtab
= (const Elf32_Sym *) (map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
const Elf32_Rel *r
= (const Elf32_Rel *) (map->l_addr + map->l_info[reltag]->d_un.d_ptr);
const Elf32_Rel *end = &r[map->l_info[sztag]->d_un.d_val / sizeof *r];
const ElfW(Sym) *const symtab
= (const ElfW(Sym) *) (map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr);
const ElfW(Rel) *r
= (const ElfW(Rel) *) (map->l_addr + map->l_info[reltag]->d_un.d_ptr);
const ElfW(Rel) *end = &r[map->l_info[sztag]->d_un.d_val / sizeof *r];
if (lazy)
/* Doing lazy PLT relocations; they need very little info. */
@@ -53,29 +49,9 @@ elf_dynamic_do_rel (struct link_map *map,
elf_machine_lazy_rel (map, r);
else
for (; r < end; ++r)
{
const Elf32_Sym *definer = &symtab[ELF32_R_SYM (r->r_info)];
Elf32_Addr loadbase;
if (ELF32_R_SYM (r->r_info) == STN_UNDEF)
loadbase = 0; /* This value will not be consulted. */
else if (ELF32_ST_BIND (definer->st_info) == STB_LOCAL)
/* Local symbols always refer to the containing object. */
loadbase = map->l_addr;
else
{
if (resolve)
loadbase = (*resolve) (&definer, r->r_offset);
else
{
assert (definer->st_shndx != SHN_UNDEF);
loadbase = map->l_addr;
}
}
elf_machine_rel (map, r, loadbase, definer);
}
elf_machine_rel (map, r, &symtab[ELFW(R_SYM) (r->r_info)]);
}
#undef elf_dynamic_do_rel
#undef Elf32_Rel
#undef Rel
#undef elf_machine_rel
+19 -15
View File
@@ -24,8 +24,8 @@ Cambridge, MA 02139, USA. */
/* Read the dynamic section at DYN and fill in INFO with indices DT_*. */
static inline void
elf_get_dynamic_info (Elf32_Dyn *dyn, Elf32_Dyn *info[DT_NUM + DT_PROCNUM])
static inline void __attribute__ ((unused))
elf_get_dynamic_info (ElfW(Dyn) *dyn, ElfW(Dyn) *info[DT_NUM + DT_PROCNUM])
{
unsigned int i;
@@ -48,14 +48,16 @@ elf_get_dynamic_info (Elf32_Dyn *dyn, Elf32_Dyn *info[DT_NUM + DT_PROCNUM])
}
if (info[DT_RELA])
assert (info[DT_RELAENT]->d_un.d_val == sizeof (Elf32_Rela));
assert (info[DT_RELAENT]->d_un.d_val == sizeof (ElfW(Rela)));
if (info[DT_REL])
assert (info[DT_RELENT]->d_un.d_val == sizeof (Elf32_Rel));
assert (info[DT_RELENT]->d_un.d_val == sizeof (ElfW(Rel)));
if (info[DT_PLTREL])
assert (info[DT_PLTREL]->d_un.d_val == DT_REL ||
info[DT_PLTREL]->d_un.d_val == DT_RELA);
}
#ifdef RESOLVE
/* Get the definitions of `elf_dynamic_do_rel' and `elf_dynamic_do_rela'.
These functions are almost identical, so we use cpp magic to avoid
duplicating their code. It cannot be done in a more general function
@@ -63,31 +65,33 @@ elf_get_dynamic_info (Elf32_Dyn *dyn, Elf32_Dyn *info[DT_NUM + DT_PROCNUM])
#if ! ELF_MACHINE_NO_REL
#include "do-rel.h"
#define ELF_DYNAMIC_DO_REL(map, lazy, resolve) \
#define ELF_DYNAMIC_DO_REL(map, lazy) \
if ((map)->l_info[DT_REL]) \
elf_dynamic_do_rel ((map), DT_REL, DT_RELSZ, (resolve), 0); \
elf_dynamic_do_rel ((map), DT_REL, DT_RELSZ, 0); \
if ((map)->l_info[DT_PLTREL] && \
(map)->l_info[DT_PLTREL]->d_un.d_val == DT_REL) \
elf_dynamic_do_rel ((map), DT_JMPREL, DT_PLTRELSZ, (resolve), (lazy));
elf_dynamic_do_rel ((map), DT_JMPREL, DT_PLTRELSZ, (lazy));
#else
#define ELF_DYNAMIC_DO_REL(map, lazy, resolve) /* Nothing to do. */
#define ELF_DYNAMIC_DO_REL(map, lazy) /* Nothing to do. */
#endif
#if ! ELF_MACHINE_NO_RELA
#define DO_RELA
#include "do-rel.h"
#define ELF_DYNAMIC_DO_RELA(map, lazy, resolve) \
#define ELF_DYNAMIC_DO_RELA(map, lazy) \
if ((map)->l_info[DT_RELA]) \
elf_dynamic_do_rela ((map), DT_RELA, DT_RELASZ, (resolve), 0); \
elf_dynamic_do_rela ((map), DT_RELA, DT_RELASZ, 0); \
if ((map)->l_info[DT_PLTREL] && \
(map)->l_info[DT_PLTREL]->d_un.d_val == DT_RELA) \
elf_dynamic_do_rela ((map), DT_JMPREL, DT_PLTRELSZ, (resolve), (lazy));
elf_dynamic_do_rela ((map), DT_JMPREL, DT_PLTRELSZ, (lazy));
#else
#define ELF_DYNAMIC_DO_RELA(map, lazy, resolve) /* Nothing to do. */
#define ELF_DYNAMIC_DO_RELA(map, lazy) /* Nothing to do. */
#endif
/* This can't just be an inline function because GCC is too dumb
to inline functions containing inlines themselves. */
#define ELF_DYNAMIC_RELOCATE(map, lazy, resolve) \
do { ELF_DYNAMIC_DO_REL ((map), (lazy), (resolve)); \
ELF_DYNAMIC_DO_RELA ((map), (lazy), (resolve)); } while (0)
#define ELF_DYNAMIC_RELOCATE(map, lazy) \
do { ELF_DYNAMIC_DO_REL ((map), (lazy)); \
ELF_DYNAMIC_DO_RELA ((map), (lazy)); } while (0)
#endif
+222 -80
View File
@@ -23,16 +23,41 @@ Cambridge, MA 02139, USA. */
#define _ELF_H 1
/* Standard ELF types.
/* Standard ELF types. Using __attribute__ mode ensures that GCC
will choose the right number of bits for these types. */
Using __attribute__ mode ensures that gcc will choose the right for
these types. */
typedef unsigned int Elf32_Addr __attribute__ ((mode (SI)));
/* Type for a 16-bit quantity. */
typedef unsigned int Elf32_Half __attribute__ ((mode (HI)));
typedef unsigned int Elf32_Off __attribute__ ((mode (SI)));
typedef int Elf32_Sword __attribute__ ((mode (SI)));
typedef unsigned int Elf64_Half __attribute__ ((mode (HI)));
/* Types for signed and unsigned 32-bit quantities. */
typedef unsigned int Elf32_Word __attribute__ ((mode (SI)));
typedef int Elf32_Sword __attribute__ ((mode (SI)));
typedef unsigned int Elf64_Word __attribute__ ((mode (SI)));
typedef int Elf64_Sword __attribute__ ((mode (SI)));
/* Types for signed and unsigned 64-bit quantities. */
typedef unsigned int Elf32_Xword __attribute__ ((mode (DI)));
typedef int Elf32_Sxword __attribute__ ((mode (DI)));
typedef unsigned int Elf64_Xword __attribute__ ((mode (DI)));
typedef int Elf64_Sxword __attribute__ ((mode (DI)));
/* Type of addresses. */
typedef unsigned int Elf32_Addr __attribute__ ((mode (SI)));
typedef unsigned int Elf64_Addr __attribute__ ((mode (DI)));
/* Type of file offsets. */
typedef unsigned int Elf32_Off __attribute__ ((mode (SI)));
typedef unsigned int Elf64_Off __attribute__ ((mode (DI)));
/* Type for section indices, which are 16-bit quantities. */
typedef unsigned int Elf32_Section __attribute__ ((mode (HI)));
typedef unsigned int Elf64_Section __attribute__ ((mode (HI)));
/* Type of symbol indices. */
typedef unsigned int Elf32_Symndx __attribute__ ((mode (SI)));
typedef unsigned int Elf64_Symndx __attribute__ ((mode (DI)));
/* The ELF file header. This appears at the start of every ELF file. */
@@ -56,6 +81,24 @@ typedef struct
Elf32_Half e_shstrndx; /* Section header string table index */
} Elf32_Ehdr;
typedef struct
{
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
Elf64_Half e_type; /* Object file type */
Elf64_Half e_machine; /* Architecture */
Elf64_Word e_version; /* Object file version */
Elf64_Addr e_entry; /* Entry point virtual address */
Elf64_Off e_phoff; /* Program header table file offset */
Elf64_Off e_shoff; /* Section header table file offset */
Elf64_Word e_flags; /* Processor-specific flags */
Elf64_Half e_ehsize; /* ELF header size in bytes */
Elf64_Half e_phentsize; /* Program header table entry size */
Elf64_Half e_phnum; /* Program header table entry count */
Elf64_Half e_shentsize; /* Section header table entry size */
Elf64_Half e_shnum; /* Section header table entry count */
Elf64_Half e_shstrndx; /* Section header string table index */
} Elf64_Ehdr;
/* Fields in the e_ident array. The EI_* macros are indices into the
array. The macros under each EI_* macro are the values the byte
may have. */
@@ -119,11 +162,14 @@ typedef struct
#define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */
#define EM_PARISC 15 /* HPPA */
#define EM_PPC 20 /* PowerPC */
/* If it is necessary to assign new unofficial EM_* values, please
pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
chances of collision with official or non-GNU unofficial values. */
#define EM_ALPHA 0x9026
/* Legal values for e_version (version). */
#define EV_NONE 0 /* Invalid ELF version */
@@ -145,6 +191,20 @@ typedef struct
Elf32_Word sh_entsize; /* Entry size if section holds table */
} Elf32_Shdr;
typedef struct
{
Elf64_Word sh_name; /* Section name (string tbl index) */
Elf64_Word sh_type; /* Section type */
Elf64_Xword sh_flags; /* Section flags */
Elf64_Addr sh_addr; /* Section virtual addr at execution */
Elf64_Off sh_offset; /* Section file offset */
Elf64_Xword sh_size; /* Section size in bytes */
Elf64_Word sh_link; /* Link to another section */
Elf64_Word sh_info; /* Additional section information */
Elf64_Xword sh_addralign; /* Section alignment */
Elf64_Xword sh_entsize; /* Entry size if section holds table */
} Elf64_Shdr;
/* Special section indices. */
#define SHN_UNDEF 0 /* Undefined section */
@@ -191,9 +251,19 @@ typedef struct
Elf32_Word st_size; /* Symbol size */
unsigned char st_info; /* Symbol type and binding */
unsigned char st_other; /* No defined meaning, 0 */
Elf32_Half st_shndx; /* Section index */
Elf32_Section st_shndx; /* Section index */
} Elf32_Sym;
typedef struct
{
Elf64_Word st_name; /* Symbol name (string tbl index) */
unsigned char st_info; /* Symbol type and binding */
unsigned char st_other; /* No defined meaning, 0 */
Elf64_Section st_shndx; /* Section index */
Elf64_Addr st_value; /* Symbol value */
Elf64_Xword st_size; /* Symbol size */
} Elf64_Sym;
/* Special section index. */
#define SHN_UNDEF 0 /* No section, undefined symbol. */
@@ -204,6 +274,11 @@ typedef struct
#define ELF32_ST_TYPE(val) ((val) & 0xf)
#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */
#define ELF64_ST_BIND(val) ELF32_ST_BIND (val)
#define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val)
#define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type))
/* Legal values for ST_BIND subfield of st_info (symbol binding). */
#define STB_LOCAL 0 /* Local symbol */
@@ -240,6 +315,17 @@ typedef struct
Elf32_Word r_info; /* Relocation type and symbol index */
} Elf32_Rel;
/* I have seen two different definitions of the Elf64_Rel and
Elf64_Rela structures, so we'll leave them out until Novell (or
whoever) gets their act together. */
/* The following, at least, is used on Sparc v9, MIPS, and Alpha. */
typedef struct
{
Elf64_Addr r_offset; /* Address */
Elf64_Xword r_info; /* Relocation type and symbol index */
} Elf64_Rel;
/* Relocation table entry with addend (in section of type SHT_RELA). */
typedef struct
@@ -249,15 +335,27 @@ typedef struct
Elf32_Sword r_addend; /* Addend */
} Elf32_Rela;
typedef struct
{
Elf64_Addr r_offset; /* Address */
Elf64_Xword r_info; /* Relocation type and symbol index */
Elf64_Sxword r_addend; /* Addend */
} Elf64_Rela;
/* How to extract and insert information held in the r_info field. */
#define ELF32_R_SYM(val) ((val) >> 8)
#define ELF32_R_TYPE(val) ((val) & 0xff)
#define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff))
#define ELF64_R_SYM(i) ((i) >> 32)
#define ELF64_R_TYPE(i) ((i) & 0xffffffff)
#define ELF64_R_INFO(sym,type) (((sym) << 32) + (type))
/* Program segment header. */
typedef struct {
typedef struct
{
Elf32_Word p_type; /* Segment type */
Elf32_Off p_offset; /* Segment file offset */
Elf32_Addr p_vaddr; /* Segment virtual address */
@@ -268,6 +366,18 @@ typedef struct {
Elf32_Word p_align; /* Segment alignment */
} Elf32_Phdr;
typedef struct
{
Elf64_Word p_type; /* Segment type */
Elf64_Word p_flags; /* Segment flags */
Elf64_Off p_offset; /* Segment file offset */
Elf64_Addr p_vaddr; /* Segment virtual address */
Elf64_Addr p_paddr; /* Segment physical address */
Elf64_Xword p_filesz; /* Segment size in file */
Elf64_Xword p_memsz; /* Segment size in memory */
Elf64_Xword p_align; /* Segment alignment */
} Elf64_Phdr;
/* Legal values for p_type (segment type). */
#define PT_NULL 0 /* Program header table entry unused */
@@ -288,6 +398,17 @@ typedef struct {
#define PF_R (1 << 2) /* Segment is readable */
#define PF_MASKPROC 0xf0000000 /* Processor-specific */
/* Legal values for note segment descriptor types for core files. */
#define NT_PRSTATUS 1 /* Contains copy of prstatus struct */
#define NT_FPREGSET 2 /* Contains copy of fpregset struct */
#define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */
/* Legal values for the note segment descriptor types for object files. */
#define NT_VERSION 1 /* Contains a version string. */
/* Dynamic section entry. */
typedef struct
@@ -300,6 +421,16 @@ typedef struct
} d_un;
} Elf32_Dyn;
typedef struct
{
Elf64_Sxword d_tag; /* Dynamic entry type */
union
{
Elf64_Xword d_val; /* Integer value */
Elf64_Addr d_ptr; /* Address value */
} d_un;
} Elf64_Dyn;
/* Legal values for d_tag (dynamic entry type). */
#define DT_NULL 0 /* Marks end of dynamic section */
@@ -331,76 +462,6 @@ typedef struct
#define DT_HIPROC 0x7fffffff /* End of processor-specific */
#define DT_PROCNUM DT_MIPS_NUM /* Most used by any processor */
/* Standard 64 bit ELF types. */
typedef unsigned int Elf64_Addr __attribute__ ((mode (DI)));
typedef unsigned int Elf64_Half __attribute__ ((mode (HI)));
typedef unsigned int Elf64_Off __attribute__ ((mode (DI)));
typedef int Elf64_Sword __attribute__ ((mode (SI)));
typedef int Elf64_Sxword __attribute__ ((mode (DI)));
typedef unsigned int Elf64_Word __attribute__ ((mode (SI)));
typedef unsigned int Elf64_Xword __attribute__ ((mode (DI)));
typedef unsigned int Elf64_Byte __attribute__ ((mode (QI)));
typedef unsigned int Elf64_Section __attribute__ ((mode (HI)));
/* 64 bit ELF file header. */
typedef struct
{
unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */
Elf64_Half e_type; /* Object file type */
Elf64_Half e_machine; /* Architecture */
Elf64_Word e_version; /* Object file version */
Elf64_Addr e_entry; /* Entry point virtual address */
Elf64_Off e_phoff; /* Program header table file offset */
Elf64_Off e_shoff; /* Section header table file offset */
Elf64_Word e_flags; /* Processor-specific flags */
Elf64_Half e_ehsize; /* ELF header size in bytes */
Elf64_Half e_phentsize; /* Program header table entry size */
Elf64_Half e_phnum; /* Program header table entry count */
Elf64_Half e_shentsize; /* Section header table entry size */
Elf64_Half e_shnum; /* Section header table entry count */
Elf64_Half e_shstrndx; /* Section header string table index */
} Elf64_Ehdr;
/* 64 bit section header. */
typedef struct
{
Elf64_Word sh_name; /* Section name (string tbl index) */
Elf64_Word sh_type; /* Section type */
Elf64_Xword sh_flags; /* Section flags */
Elf64_Addr sh_addr; /* Section virtual addr at execution */
Elf64_Off sh_offset; /* Section file offset */
Elf64_Xword sh_size; /* Section size in bytes */
Elf64_Word sh_link; /* Link to another section */
Elf64_Word sh_info; /* Additional section information */
Elf64_Xword sh_addralign; /* Section alignment */
Elf64_Xword sh_entsize; /* Entry size if section holds table */
} Elf64_Shdr;
/* 64 bit symbol table entry. */
typedef struct
{
Elf64_Word st_name; /* Symbol name (string tbl index) */
Elf64_Byte st_info; /* Symbol type and binding */
Elf64_Byte st_other; /* No defined meaning, 0 */
Elf64_Section st_shndx; /* Section index */
Elf64_Addr st_value; /* Symbol value */
Elf64_Xword st_size; /* Symbol size */
} Elf64_Sym;
/* The 64 bit st_info field is the same as the 32 bit one. */
#define ELF64_ST_BIND(val) (((unsigned char) (val)) >> 4)
#define ELF64_ST_TYPE(val) ((val) & 0xf)
#define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
/* I have seen two different definitions of the Elf64_Rel and
Elf64_Rela structures, so we'll leave them out until Novell (or
whoever) gets their act together. */
/* Auxiliary vector. */
/* This vector is normally only used by the program interpreter. The
@@ -421,6 +482,17 @@ typedef struct
} a_un;
} Elf32_auxv_t;
typedef struct
{
long int a_type; /* Entry type */
union
{
long int a_val; /* Integer value */
void *a_ptr; /* Pointer value */
void (*a_fcn) (void); /* Function pointer value */
} a_un;
} Elf64_auxv_t;
/* Legal values for a_type (entry type). */
#define AT_NULL 0 /* End of vector */
@@ -521,9 +593,17 @@ typedef struct
#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */
#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */
/* Legal values for MIPS architecture level. */
#define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */
#define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */
#define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */
/* Special section indices. */
#define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols */
#define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */
#define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */
#define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols */
#define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols */
@@ -535,6 +615,9 @@ typedef struct
#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */
#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information */
#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */
#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */
#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */
#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */
/* Legal values for sh_flags field of Elf32_Shdr. */
@@ -602,7 +685,8 @@ typedef struct
#define DT_MIPS_UNREFEXTNO 0x70000012 /* First external DYNSYM */
#define DT_MIPS_GOTSYM 0x70000013 /* First GOT entry in DYNSYM */
#define DT_MIPS_HIPAGENO 0x70000014 /* Number of GOT page table entries */
#define DT_MIPS_NUM 0x15
#define DT_MIPS_RLD_MAP 0x70000016 /* Address of run time loader map. */
#define DT_MIPS_NUM 0x17
/* Legal values for DT_MIPS_FLAG Elf32_Dyn entry. */
@@ -632,4 +716,62 @@ typedef struct
typedef Elf32_Addr Elf32_Conflict;
/* HPPA specific definitions. */
/* Legal values for sh_type field of Elf32_Shdr. */
#define SHT_PARISC_GOT 0x70000000 /* GOT for external data. */
#define SHT_PARISC_ARCH 0x70000001 /* Architecture extensions. */
#define SHT_PARISC_GLOBAL 0x70000002 /* Definition of $global$. */
#define SHT_PARISC_MILLI 0x70000003 /* Millicode routines. */
#define SHT_PARISC_UNWIND 0x70000004 /* Unwind information. */
#define SHT_PARISC_PLT 0x70000005 /* Procedure linkage table. */
#define SHT_PARISC_SDATA 0x70000006 /* Short initialized data. */
#define SHT_PARISC_SBSS 0x70000007 /* Short uninitialized data. */
#define SHT_PARISC_SYMEXTN 0x70000008 /* Argument/relocation info. */
#define SHT_PARISC_STUBS 0x70000009 /* Linker stubs. */
/* Legal values for sh_flags field of Elf32_Shdr. */
#define SHF_PARISC_SHORT 0x20000000 /* Section with short addressing. */
/* Legal values for ST_TYPE subfield of st_info (symbol type). */
#define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */
/* Alpha specific declarations. */
/* Alpha relocs. */
#define R_ALPHA_NONE 0 /* No reloc */
#define R_ALPHA_REFLONG 1 /* Direct 32 bit */
#define R_ALPHA_REFQUAD 2 /* Direct 64 bit */
#define R_ALPHA_GPREL32 3 /* GP relative 32 bit */
#define R_ALPHA_LITERAL 4 /* GP relative 16 bit w/optimization */
#define R_ALPHA_LITUSE 5 /* Optimization hint for LITERAL */
#define R_ALPHA_GPDISP 6 /* Add displacement to GP */
#define R_ALPHA_BRADDR 7 /* PC+4 relative 23 bit shifted */
#define R_ALPHA_HINT 8 /* PC+4 relative 16 bit shifted */
#define R_ALPHA_SREL16 9 /* PC relative 16 bit */
#define R_ALPHA_SREL32 10 /* PC relative 32 bit */
#define R_ALPHA_SREL64 11 /* PC relative 64 bit */
#define R_ALPHA_OP_PUSH 12 /* OP stack push */
#define R_ALPHA_OP_STORE 13 /* OP stack pop and store */
#define R_ALPHA_OP_PSUB 14 /* OP stack subtract */
#define R_ALPHA_OP_PRSHIFT 15 /* OP stack right shift */
#define R_ALPHA_GPVALUE 16
#define R_ALPHA_GPRELHIGH 17
#define R_ALPHA_GPRELLOW 18
#define R_ALPHA_IMMED_GP_16 19
#define R_ALPHA_IMMED_GP_HI32 20
#define R_ALPHA_IMMED_SCN_HI32 21
#define R_ALPHA_IMMED_BR_HI32 22
#define R_ALPHA_IMMED_LO32 23
#define R_ALPHA_COPY 24 /* Copy symbol at runtime */
#define R_ALPHA_GLOB_DAT 25 /* Create GOT entry */
#define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */
#define R_ALPHA_RELATIVE 27 /* Adjust by program base */
#endif /* elf.h */
-4
View File
@@ -1,4 +0,0 @@
/* Define the global function for the inline `elf_hash' in libelf.h. */
#define _EXTERN_INLINE /* Define the function globally. */
#include "libelf.h"
+110
View File
@@ -0,0 +1,110 @@
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <dlfcn.h>
static void *funcall (char **stringp);
static void *eval (char **stringp);
static void *
funcall (char **stringp)
{
void *args[strlen (*stringp)], **ap = args;
void *argcookie = &args[1];
do
{
/* Evaluate the next token. */
*ap++ = eval (stringp);
/* Whitespace is irrelevant. */
while (isspace (**stringp))
++*stringp;
/* Terminate at closing paren or end of line. */
} while (**stringp != '\0' && **stringp != ')');
if (**stringp != '\0')
/* Swallow closing paren. */
++*stringp;
/* Do it to it. */
__builtin_return (__builtin_apply (args[0],
&argcookie,
(char *) ap - (char *) &args[1]));
}
static void *
eval (char **stringp)
{
void *value;
char *p = *stringp, c;
/* Whitespace is irrelevant. */
while (isspace (*p))
++p;
switch (*p)
{
case '"':
/* String constant. */
value = ++p;
do
if (*p == '\\')
{
switch (*strcpy (p, p + 1))
{
case 't':
*p = '\t';
break;
case 'n':
*p = '\n';
break;
}
++p;
}
while (*p != '\0' && *p++ != '"');
if (p[-1] == '"')
p[-1] = '\0';
break;
case '(':
*stringp = ++p;
return funcall (stringp);
default:
/* Try to parse it as a number. */
value = (void *) strtol (p, stringp, 0);
if (*stringp != p)
return value;
/* Anything else is a symbol that produces its address. */
value = p;
do
++p;
while (*p != '\0' && !isspace (*p) && !ispunct (*p));
c = *p;
*p = '\0';
value = dlsym (NULL, value);
*p = c;
break;
}
*stringp = p;
return value;
}
void
_start (void)
{
char *buf = NULL;
size_t bufsz = 0;
while (getline (&buf, &bufsz, stdin) > 0)
{
char *p = buf;
eval (&p);
}
exit (0);
}
+10 -2
View File
@@ -17,7 +17,11 @@ case $# in
/*) file="$1" ;;
*) file="./$1" ;;
esac
exec ${RTLD} --list "$file" && exit 1
if ${RTLD} --verify "$file"; then
LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} "$file" && exit 1
else
echo ' not a dynamic executable'
fi
exit ;;
*)
set -e # Bail out immediately if ${RTLD} loses on any argument.
@@ -27,7 +31,11 @@ case $# in
/*) file="$file" ;;
*) file="./$file" ;;
esac
${RTLD} --list "$file"
if ${RTLD} --verify "$file"; then
LD_TRACE_LOADED_OBJECTS=1 ${RTLD} "$file"
else
echo ' not a dynamic executable'
fi
done
esac
-283
View File
@@ -1,283 +0,0 @@
/* Interface for manipulating ELF object files; functions found in -lelf.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#ifndef _LIBELF_H
#define _LIBELF_H 1
#include <sys/cdefs.h>
#include <sys/types.h>
#include <elf.h>
__BEGIN_DECLS
/* Commands to operate on an Elf descriptor.
The meanings are slightly different for the different functions. */
typedef enum
{
ELF_C_NULL = 0,
ELF_C_READ, /* Read from the file. */
ELF_C_WRITE, /* Write the file, ignoring old contents. */
ELF_C_CLR, /* Clear specified flag bits. */
ELF_C_SET, /* Set specified flag bits. */
ELF_C_FDDONE, /* Close the fd; no further io will happen. */
ELF_C_FDREAD, /* Read the whole file, then close it. */
ELF_C_RDWR, /* Read from and modify the file. */
ELF_C_NUM /* Number of valid command values. */
} Elf_Cmd;
/* Flag bits for `elf_flag*'. */
#define ELF_F_DIRTY 0x1 /* Object is */
#define ELF_F_LAYOUT 0x4
/* File types. */
typedef enum
{
ELF_K_NONE = 0,
ELF_K_AR,
ELF_K_COFF, /* The GNU -lelf does not support COFF. */
ELF_K_ELF,
ELF_K_NUM /* Number of valid file kinds. */
} Elf_Kind;
/* Translation types. */
typedef enum
{
ELF_T_BYTE = 0,
ELF_T_ADDR,
ELF_T_DYN,
ELF_T_EHDR,
ELF_T_HALF,
ELF_T_OFF,
ELF_T_PHDR,
ELF_T_RELA,
ELF_T_REL,
ELF_T_SHDR,
ELF_T_SWORD,
ELF_T_SYM,
ELF_T_WORD,
ELF_T_NUM
} Elf_Type;
/* These types are opaque to user code; only pointers to them are used. */
typedef struct Elf Elf;
typedef struct Elf_Scn Elf_Scn;
/* Archive member header. */
typedef struct
{
char *ar_name;
time_t ar_date;
uid_t ar_uid;
gid_t ar_gid;
mode_t ar_mode;
off_t ar_size;
char *ar_rawname;
} Elf_Arhdr;
/* Archive symbol table. */
typedef struct
{
char *as_name;
size_t as_off;
unsigned long int as_hash;
} Elf_Arsym;
/* Data descriptor. */
typedef struct
{
void *d_buf;
Elf_Type d_type;
size_t d_size;
off_t d_off; /* Offset into section. */
size_t d_align; /* Alignment in section. */
unsigned int d_version; /* ELF version. */
} Elf_Data;
/* Open an Elf descriptor on file descriptor FD.
REF is the Elf descriptor for the containing archive (to open a member);
or the descriptor previously returned for FD (to add a user reference);
or NULL. */
extern Elf *elf_begin __P ((int __fd, Elf_Cmd __cmd, Elf *__ref));
/* Finish using ELF (remove a user reference); if this is the last user
reference, its data will be freed. */
extern int elf_end __P ((Elf *__elf));
/* Control the library's access to the file descriptor for ELF.
CMD is either ELF_C_FDDONE or ELF_C_FDREAD. */
extern int elf_cntl __P ((Elf *__elf, Elf_Cmd __cmd));
/* Return a string describing an ELF error number. */
extern __const char *elf_errmsg __P ((int __errno));
/* Return the ELF error number for the last failed operation. */
extern int elf_errno __P ((void));
/* Set the byte value used to fill sections for alignment. */
extern void elf_fill __P ((int __fillchar));
/* The following functions `elf_flag*' all operate the same way:
CMD is either ELF_C_SET or ELF_C_CLR; FLAGS are `ELF_F_*' above,
which are set or cleared for the object the call relates to. */
/* Modify flags affecting the file as a whole (?). */
extern unsigned int elf_flagelf __P ((Elf *__elf, Elf_Cmd __cmd,
unsigned int __flags));
/* Modify flags affecting DATA. */
extern unsigned int elf_flagdata __P ((Elf_Data *__data, Elf_Cmd __cmd,
unsigned int __flags));
/* Modify flags affecting the ELF header. */
extern unsigned int elf_flagehdr __P ((Elf *__elf, Elf_Cmd __cmd,
unsigned int __flags));
/* Modify flags affecting the ELF program header. */
extern unsigned int elf_flagphdr __P ((Elf *__elf, Elf_Cmd __cmd,
unsigned int __flags));
/* Modify flags affecting the given section's data. */
extern unsigned int elf_flagscn __P ((Elf_Scn *__scn, Elf_Cmd __cmd,
unsigned int __flags));
/* Modify flags affecting the given section's header. */
extern unsigned int elf_flagshdr __P ((Elf_Scn *__scn, Elf_Cmd __cmd,
unsigned int __flags));
extern size_t elf32_fsize __P ((Elf_Type __type, size_t __count,
unsigned int __ver));
/* Return the archive header for ELF, which must describe an archive. */
extern Elf_Arhdr *elf_getarhdr __P ((Elf *__elf));
/* Return the archive symbol table for ELF, and store
in *NELTSP the number of elements in the table. */
extern Elf_Arsym *elf_getarsym __P ((Elf *__elf, size_t *__neltsp));
/* Return the file offset for the beginning of ELF.
If ELF describes an archive member, this points to the member header. */
extern off_t elf_getbase __P ((Elf *__elf));
/* Extract the data from a section. */
extern Elf_Data *elf_getdata __P ((Elf_Scn *__scn, Elf_Data *__data));
/* Extract the ELF header from the file. */
extern Elf32_Ehdr *elf32_getehdr __P ((Elf *__elf));
/* Extract the initial ELF identification bytes from the file.
If PTR is nonnull, the number of identification bytes is stored there. */
extern char *elf_getident __P((Elf *__elf, size_t *__ptr));
/* Extract the ELF program header from the file. */
extern Elf32_Phdr *elf32_getphdr __P ((Elf *__elf));
/* Extract the indicated section from the file. */
extern Elf_Scn *elf_getscn __P ((Elf *__elf, size_t __index));
/* Extract the section header from the section. */
extern Elf32_Shdr *elf32_getshdr __P ((Elf_Scn *__scn));
/* Return the index of the section following SCN. */
extern size_t elf_ndxscn __P ((Elf_Scn *__scn));
/* Standard ELF symbol name hash function. */
extern unsigned long int elf_hash __P ((__const char *__name));
#if defined (__OPTIMIZE__) || defined (_EXTERN_INLINE)
#ifndef _EXTERN_INLINE
#define _EXTERN_INLINE extern __inline
#endif
_EXTERN_INLINE unsigned long int
elf_hash (__const char *__name)
{
/* This is the hashing function specified by the ELF ABI. */
unsigned long int __hash = 0;
while (*__name != '\0')
{
unsigned long int __hi;
__hash = (__hash << 4) + *__name++;
__hi = __hash & 0xf0000000;
if (__hi != 0)
{
__hash ^= __hi >> 24;
/* The ELF ABI says `hash &= ~hi', but this is equivalent
in this case and on some machines one insn instead of two. */
__hash ^= __hi;
}
}
return __hash;
}
#endif
/* Return the kind of file ELF describes. */
extern Elf_Kind elf_kind __P ((Elf *__elf));
extern Elf_Data *elf_newdata __P ((Elf_Scn *__scn));
/* Create the ELF header for ELF. */
extern Elf32_Ehdr *elf32_newehdr __P ((Elf *__elf));
/* Create the program header for ELF, with COUNT segments. */
extern Elf32_Phdr *elf32_newphdr __P ((Elf *__elf, size_t __count));
/* Create a new section in ELF. */
extern Elf_Scn *elf_newscn __P ((Elf *__elf));
/* Return the section following SCN. */
extern Elf_Scn *elf_nextscn __P ((Elf *__elf, Elf_Scn *__scn));
/* Set up ELF to read the next archive member. */
extern Elf_Cmd elf_next __P ((Elf *__elf));
/* Set up ELF (which must describe an archive) to read the
archive member that starts at file position OFFSET. */
extern size_t elf_rand __P ((Elf *__elf, size_t __offset));
extern Elf_Data *elf_rawdata __P ((Elf_Scn *__scn, Elf_Data *__data));
/* Read the entire file into memory; store its size in *PTR. */
extern char *elf_rawfile __P ((Elf *__elf, size_t *__ptr));
/* Return a pointer to the string at OFFSET bytes into the string table.
SECTION is the index of the SHT_STRTAB section in ELF. */
extern char *elf_strptr __P ((Elf *__elf, size_t __section, size_t __offset));
/* If CMD is ELF_C_NULL, update ELF's data structures based on any
user modifications, and set the ELF_F_DIRTY flag if anything changed.
If CMD is ELF_C_WRITE, do that and then write the changes to the file. */
extern off_t elf_update __P ((Elf *__elf, Elf_Cmd __cmd));
/* Handle ELF version VER. Return the old version handled,
or EV_NONE if VER is unrecognized. */
extern unsigned int elf_version __P ((unsigned int __ver));
extern Elf_Data *elf32_xlatetof __P ((Elf_Data *__dst, const Elf_Data *__src,
unsigned int __encode));
extern Elf_Data *elf32_xlatetom __P ((Elf_Data *__dst, const Elf_Data *__src,
unsigned int __encode));
__END_DECLS
#endif /* _LIBELF_H */
+120 -39
View File
@@ -20,8 +20,18 @@ Cambridge, MA 02139, USA. */
#ifndef _LINK_H
#define _LINK_H 1
#define __need_size_t
#include <stddef.h>
#include <elf.h>
/* We use this macro to refer to ELF types independent of the native wordsize.
`ElfW(TYPE)' is used in place of `Elf32_TYPE' or `Elf64_TYPE'. */
#define ElfW(type) _ElfW (Elf, __ELF_NATIVE_CLASS, type)
#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type)
#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t)
#define _ElfW_1(e,w,t) e##w##t
#include <elfclass.h> /* Defines __ELF_NATIVE_CLASS. */
/* Rendezvous structure used by the run-time dynamic linker to communicate
details of shared object loading to the debugger. If the executable's
@@ -39,7 +49,7 @@ struct r_debug
library or unmap it, and again when the mapping change is complete.
The debugger can set a breakpoint at this address if it wants to
notice shared object mapping changes. */
Elf32_Addr r_brk;
ElfW(Addr) r_brk;
enum
{
/* This state value describes the mapping change taking place when
@@ -49,9 +59,12 @@ struct r_debug
RT_DELETE, /* Beginning to remove an object mapping. */
} r_state;
Elf32_Addr r_ldbase; /* Base address the linker is loaded at. */
ElfW(Addr) r_ldbase; /* Base address the linker is loaded at. */
};
/* This is the instance of that structure used by the dynamic linker. */
extern struct r_debug _r_debug;
/* This symbol refers to the "dynamic structure" in the `.dynamic' section
of whatever module refers to `_DYNAMIC'. So, to find its own
`struct r_debug', a program could do:
@@ -59,7 +72,7 @@ struct r_debug
if (dyn->d_tag == DT_DEBUG) r_debug = (struct r_debug) dyn->d_un.d_ptr;
*/
extern Elf32_Dyn _DYNAMIC[];
extern ElfW(Dyn) _DYNAMIC[];
/* Structure describing a loaded shared object. The `l_next' and `l_prev'
@@ -73,9 +86,9 @@ struct link_map
/* These first few members are part of the protocol with the debugger.
This is the same format used in SVR4. */
Elf32_Addr l_addr; /* Base address shared object is loaded at. */
ElfW(Addr) l_addr; /* Base address shared object is loaded at. */
char *l_name; /* Absolute file name object was found in. */
Elf32_Dyn *l_ld; /* Dynamic section of the shared object. */
ElfW(Dyn) *l_ld; /* Dynamic section of the shared object. */
struct link_map *l_next, *l_prev; /* Chain of loaded objects. */
/* All following members are internal to the dynamic linker.
@@ -85,27 +98,36 @@ struct link_map
/* Indexed pointers to dynamic section.
[0,DT_NUM) are indexed by the processor-independent tags.
[DT_NUM,DT_NUM+DT_PROCNUM] are indexed by the tag minus DT_LOPROC. */
Elf32_Dyn *l_info[DT_NUM + DT_PROCNUM];
const Elf32_Phdr *l_phdr; /* Pointer to program header table in core. */
Elf32_Word l_phnum; /* Number of program header entries. */
Elf32_Addr l_entry; /* Entry point location. */
ElfW(Dyn) *l_info[DT_NUM + DT_PROCNUM];
const ElfW(Phdr) *l_phdr; /* Pointer to program header table in core. */
ElfW(Addr) l_entry; /* Entry point location. */
ElfW(Half) l_phnum; /* Number of program header entries. */
/* Array of DT_NEEDED dependencies and their dependencies, in
dependency order for symbol lookup. This is null before the
dependencies have been loaded. */
struct link_map **l_searchlist;
unsigned int l_nsearchlist;
/* Dependent object that first caused this object to be loaded. */
struct link_map *l_loader;
/* Symbol hash table. */
Elf32_Word l_nbuckets;
const Elf32_Word *l_buckets, *l_chain;
ElfW(Symndx) l_nbuckets;
const ElfW(Symndx) *l_buckets, *l_chain;
unsigned int l_opencount; /* Reference count for dlopen/dlclose. */
enum /* Where this object came from. */
{
lt_executable, /* The main executable program. */
lt_interpreter, /* The interpreter: the dynamic linker. */
lt_library, /* Library needed by main executable. */
lt_loaded, /* Extra run-time loaded shared object. */
} l_type:2;
unsigned int l_deps_loaded:1; /* Nonzero if DT_NEEDED items loaded. */
unsigned int l_relocated:1; /* Nonzero if object's relocations done. */
unsigned int l_init_called:1; /* Nonzero if DT_INIT function called. */
unsigned int l_init_running:1; /* Nonzero while DT_INIT function runs. */
unsigned int l_global:1; /* Nonzero if object in _dl_global_scope. */
unsigned int l_reserved:2; /* Reserved for internal use. */
};
/* Internal functions of the run-time dynamic linker.
@@ -117,6 +139,9 @@ struct link_map
user interface to run-time dynamic linking. */
/* Cached value of `getpagesize ()'. */
extern size_t _dl_pagesize;
/* File descriptor referring to the zero-fill device. */
extern int _dl_zerofd;
@@ -153,8 +178,9 @@ extern void _dl_signal_error (int errcode,
/* Call OPERATE, catching errors from `dl_signal_error'. If there is no
error, *ERRSTRING is set to null. If there is an error, *ERRSTRING and
*OBJECT are set to the strings passed to _dl_signal_error, and the error
code passed is the return value. */
extern int _dl_catch_error (const char **errstring,
code passed is the return value. ERRSTRING if nonzero points to a
malloc'ed string which the caller has to free after use. */
extern int _dl_catch_error (char **errstring,
const char **object,
void (*operate) (void));
@@ -169,37 +195,83 @@ extern int _dlerror_run (void (*operate) (void));
LOADER's DT_RPATH is used in searching for NAME.
If the object is already opened, returns its existing map. */
extern struct link_map *_dl_map_object (struct link_map *loader,
const char *name);
const char *name, int type);
/* Similar, but file found at REALNAME and opened on FD.
REALNAME must malloc'd storage and is used in internal data structures. */
extern struct link_map *_dl_map_object_from_fd (const char *name,
int fd, char *realname);
/* Call _dl_map_object on the dependencies of MAP, and set up
MAP->l_searchlist. PRELOADS points to a vector of NPRELOADS previously
loaded objects that will be inserted into MAP->l_searchlist after MAP
but before its dependencies. */
extern void _dl_map_object_deps (struct link_map *map,
struct link_map **preloads,
unsigned int npreloads);
/* Cache the locations of MAP's hash table. */
extern void _dl_setup_hash (struct link_map *map);
/* Open the shared object NAME, relocate it, and run its initializer if it
hasn't already been run. MODE is as for `dlopen' (see <dlfcn.h>). If
the object is already opened, returns its existing map. */
extern struct link_map *_dl_open (const char *name, int mode);
/* Close an object previously opened by _dl_open. */
extern void _dl_close (struct link_map *map);
/* Search loaded objects' symbol tables for a definition of the symbol
referred to by UNDEF. *SYM is the symbol table entry containing the
reference; it is replaced with the defining symbol, and the base load
address of the defining object is returned. SYMBOL_SCOPE is the head of
the chain used for searching. REFERENCE_NAME should name the object
containing the reference; it is used in error messages. If NOSELF is
nonzero, them *SYM itself cannot define the value; another binding must
be found. */
extern Elf32_Addr _dl_lookup_symbol (const char *undef,
const Elf32_Sym **sym,
struct link_map *symbol_scope,
address of the defining object is returned. SYMBOL_SCOPE is a
null-terminated list of object scopes to search; each object's
l_searchlist (i.e. the segment of the dependency tree starting at that
object) is searched in turn. REFERENCE_NAME should name the object
containing the reference; it is used in error messages. FLAGS is a
set of flags: */
#define DL_LOOKUP_NOEXEC 1 /* Don't search the executable for a
definition; this is used for copy
relocs. */
#define DL_LOOKUP_NOPLT 2 /* The reference must not be resolved
to a PLT entry. */
extern ElfW(Addr) _dl_lookup_symbol (const char *undef,
const ElfW(Sym) **sym,
struct link_map *symbol_scope[],
const char *reference_name,
int noself);
int flags);
/* Look up symbol NAME in MAP's scope and return its run-time address. */
extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name);
/* List of objects currently loaded. */
extern struct link_map *_dl_loaded;
/* Structure describing the dynamic linker itself. */
extern struct link_map _dl_rtld_map;
/* The list of objects currently loaded is the third element of the
`_dl_default_scope' array, and the fourth element is always null.
This leaves two slots before it that are used when resolving
DT_SYMBOLIC objects' references one after it for normal references
(see below). */
#define _dl_loaded (_dl_default_scope[2])
extern struct link_map *_dl_default_scope[5];
/* Null-terminated list of objects in the dynamic `global scope'. The
list starts at [2]; i.e. &_dl_global_scope[2] is the argument
passed to _dl_lookup_symbol to search the global scope. To search
a specific object and its dependencies in preference to the global
scope, fill in the [1] slot and pass its address; for two specific
object scopes, fill [0] and [1]. The list is double-terminated; to
search the global scope and then a specific object and its
dependencies, set *_dl_global_scope_end. This variable initially
points to _dl_default_scope, and _dl_loaded is always kept in [2]
of this list. A new list is malloc'd when new objects are loaded
with RTLD_GLOBAL. */
extern struct link_map **_dl_global_scope, **_dl_global_scope_end;
extern size_t _dl_global_scope_alloc; /* Number of slots malloc'd. */
/* Hack _dl_global_scope[0] and [1] as necessary, and return a pointer into
_dl_global_scope that should be passed to _dl_lookup_symbol for symbol
references made in the object MAP's relocations. */
extern struct link_map **_dl_object_relocation_scope (struct link_map *map);
/* Tail of that list which were loaded at startup. */
extern struct link_map *_dl_startup_loaded;
/* Allocate a `struct link_map' for a new object being loaded,
and enter it into the _dl_loaded list. */
@@ -207,13 +279,17 @@ extern struct link_map *_dl_new_object (char *realname, const char *libname,
int type);
/* Relocate the given object (if it hasn't already been).
SCOPE is passed to _dl_lookup_symbol in symbol lookups.
If LAZY is nonzero, don't relocate its PLT. */
extern void _dl_relocate_object (struct link_map *map, int lazy);
extern void _dl_relocate_object (struct link_map *map,
struct link_map *scope[],
int lazy);
/* Return the address of the next initializer function not yet run.
When there are no more initializers to be run, this returns zero.
The functions are returned in the order they should be called. */
extern Elf32_Addr _dl_init_next (void);
/* Return the address of the next initializer function for MAP or one of
its dependencies that has not yet been run. When there are no more
initializers to be run, this returns zero. The functions are returned
in the order they should be called. */
extern ElfW(Addr) _dl_init_next (struct link_map *map);
/* Call the finalizer functions of all shared objects whose
initializer functions have completed. */
@@ -223,7 +299,12 @@ extern void _dl_fini (void);
any shared object mappings. The `r_state' member of `struct r_debug'
says what change is taking place. This function's address is
the value of the `r_brk' member. */
extern void _dl_r_debug_state (void);
extern void _dl_debug_state (void);
/* Initialize `struct r_debug' if it has not already been done. The
argument is the run-time load address of the dynamic linker, to be put
in the `r_ldbase' member. Returns the address of the structure. */
extern struct r_debug *_dl_debug_initialize (ElfW(Addr) ldbase);
#endif /* link.h */
-40
View File
@@ -1,40 +0,0 @@
/* Initializer for Linux-compatible dynamic linker `/lib/ld-linux.so.1'.
Copyright (C) 1995 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include <stdlib.h>
/* This function will be the DT_INIT initializer for the ld-linux.so.1
shared object. This is called from rtld.c before shlib initializers.
The old Linux ELF startup code expects the dynamic linker to magically
call atexit to arrange for shared object finalizers to run. (The
ABI-compliant startup code does this itself.) We build a compatible
version of the dynamic linker to install as /lib/ld-linux.so.1, the
name old Linux ELF binaries use. */
void
_init (void)
{
const Elf32_Sym *ref = NULL;
Elf32_Addr loadbase = _dl_lookup_symbol ("atexit", &ref, _dl_loaded,
"<ld-linux.so.1 initialization>",
1);
(*(__typeof (atexit) *) (loadbase + ref->st_value)) (&_dl_fini);
}
+445 -274
View File
@@ -1,5 +1,5 @@
/* Run time dynamic linker.
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -18,47 +18,68 @@ not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
#include <link.h>
#include "dynamic-link.h"
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h> /* Check if MAP_ANON is defined. */
#include "../stdio-common/_itoa.h"
#include <assert.h>
#include "dynamic-link.h"
/* System-specific function to do initial startup for the dynamic linker.
After this, file access calls and getenv must work. This is responsible
for setting __libc_enable_secure if we need to be secure (e.g. setuid),
and for setting _dl_argc and _dl_argv, and then calling _dl_main. */
extern ElfW(Addr) _dl_sysdep_start (void **start_argptr,
void (*dl_main) (const ElfW(Phdr) *phdr,
ElfW(Half) phent,
ElfW(Addr) *user_entry));
extern void _dl_sysdep_start_cleanup (void);
/* System-dependent function to read a file's whole contents
in the most convenient manner available. */
extern void *_dl_sysdep_read_whole_file (const char *filename,
size_t *filesize_ptr,
int mmap_prot);
int _dl_argc;
char **_dl_argv;
const char *_dl_rpath;
/* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This
must not be initialized to nonzero, because the unused dynamic
linker loaded in for libc.so's "ld.so.1" dep will provide the
definition seen by libc.so's initializer; that value must be zero,
and will be since that dynamic linker's _dl_start and dl_main will
never be called. */
int _dl_starting_up;
static void dl_main (const ElfW(Phdr) *phdr,
ElfW(Half) phent,
ElfW(Addr) *user_entry);
struct link_map _dl_rtld_map;
#ifdef RTLD_START
RTLD_START
#else
#error "sysdeps/MACHINE/dl-machine.h fails to define RTLD_START"
#endif
/* System-specific function to do initial startup for the dynamic linker.
After this, file access calls and getenv must work. This is responsible
for setting _dl_secure if we need to be secure (e.g. setuid),
and for setting _dl_argc and _dl_argv, and then calling _dl_main. */
extern Elf32_Addr _dl_sysdep_start (void **start_argptr,
void (*dl_main) (const Elf32_Phdr *phdr,
Elf32_Word phent,
Elf32_Addr *user_entry));
extern void _dl_sysdep_start_cleanup (void);
int _dl_secure;
int _dl_argc;
char **_dl_argv;
const char *_dl_rpath;
struct r_debug dl_r_debug;
static void dl_main (const Elf32_Phdr *phdr,
Elf32_Word phent,
Elf32_Addr *user_entry);
static struct link_map rtld_map;
Elf32_Addr
ElfW(Addr)
_dl_start (void *arg)
{
struct link_map bootstrap_map;
/* This #define produces dynamic linking inline functions for
bootstrap relocation instead of general-purpose relocation. */
#define RTLD_BOOTSTRAP
#define RESOLVE(sym, flags) bootstrap_map.l_addr
#include "dynamic-link.h"
/* Figure out the run-time load address of the dynamic linker itself. */
bootstrap_map.l_addr = elf_machine_load_address ();
@@ -75,14 +96,7 @@ _dl_start (void *arg)
/* Relocate ourselves so we can do normal function calls and
data access using the global offset table. */
/* We must initialize `l_type' to make sure it is not `lt_interpreter'.
That is the type to describe us, but not during bootstrapping--it
indicates to elf_machine_rel{,a} that we were already relocated during
bootstrapping, so it must anti-perform each bootstrapping relocation
before applying the final relocation when ld.so is linked in as
normal a shared library. */
bootstrap_map.l_type = lt_library;
ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0, NULL);
ELF_DYNAMIC_RELOCATE (&bootstrap_map, 0);
/* Now life is sane; we can call functions and access global data.
@@ -92,22 +106,23 @@ _dl_start (void *arg)
/* Transfer data about ourselves to the permanent link_map structure. */
rtld_map.l_addr = bootstrap_map.l_addr;
rtld_map.l_ld = bootstrap_map.l_ld;
memcpy (rtld_map.l_info, bootstrap_map.l_info, sizeof rtld_map.l_info);
_dl_setup_hash (&rtld_map);
_dl_rtld_map.l_addr = bootstrap_map.l_addr;
_dl_rtld_map.l_ld = bootstrap_map.l_ld;
memcpy (_dl_rtld_map.l_info, bootstrap_map.l_info,
sizeof _dl_rtld_map.l_info);
_dl_setup_hash (&_dl_rtld_map);
/* Cache the DT_RPATH stored in ld.so itself; this will be
the default search path. */
_dl_rpath = (void *) (rtld_map.l_addr +
rtld_map.l_info[DT_STRTAB]->d_un.d_ptr +
rtld_map.l_info[DT_RPATH]->d_un.d_val);
_dl_rpath = (void *) (_dl_rtld_map.l_addr +
_dl_rtld_map.l_info[DT_STRTAB]->d_un.d_ptr +
_dl_rtld_map.l_info[DT_RPATH]->d_un.d_val);
/* 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
entry point on the same stack we entered on. */
return _dl_sysdep_start (&arg, &dl_main);
return _dl_sysdep_start (arg, &dl_main);
}
@@ -119,38 +134,41 @@ void _start (void);
unsigned int _dl_skip_args; /* Nonzero if we were run directly. */
static void
dl_main (const Elf32_Phdr *phdr,
Elf32_Word phent,
Elf32_Addr *user_entry)
dl_main (const ElfW(Phdr) *phdr,
ElfW(Half) phent,
ElfW(Addr) *user_entry)
{
void doit (void)
const ElfW(Phdr) *ph;
struct link_map *l;
int lazy;
enum { normal, list, verify, trace } mode;
struct link_map **preloads;
unsigned int npreloads;
size_t file_size;
char *file;
mode = getenv ("LD_TRACE_LOADED_OBJECTS") != NULL ? trace : normal;
if (*user_entry == (ElfW(Addr)) &_start)
{
const Elf32_Phdr *ph;
struct link_map *l, *last, *before_rtld;
const char *interpreter_name;
int lazy;
int list_only = 0;
/* Ho ho. We are not the program interpreter! We are the program
itself! This means someone ran ld.so as a command. Well, that
might be convenient to do sometimes. We support it by
interpreting the args like this:
if (*user_entry == (Elf32_Addr) &_start)
{
/* Ho ho. We are not the program interpreter! We are the program
itself! This means someone ran ld.so as a command. Well, that
might be convenient to do sometimes. We support it by
interpreting the args like this:
ld.so PROGRAM ARGS...
ld.so PROGRAM ARGS...
The first argument is the name of a file containing an ELF
executable we will load and run with the following arguments.
To simplify life here, PROGRAM is searched for using the
normal rules for shared objects, rather than $PATH or anything
like that. We just load it and use its entry point; we don't
pay attention to its PT_INTERP command (we are the interpreter
ourselves). This is an easy way to test a new ld.so before
installing it. */
if (_dl_argc < 2)
_dl_sysdep_fatal ("\
Usage: ld.so [--list] EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]\n\
The first argument is the name of a file containing an ELF
executable we will load and run with the following arguments.
To simplify life here, PROGRAM is searched for using the
normal rules for shared objects, rather than $PATH or anything
like that. We just load it and use its entry point; we don't
pay attention to its PT_INTERP command (we are the interpreter
ourselves). This is an easy way to test a new ld.so before
installing it. */
if (_dl_argc < 2)
_dl_sysdep_fatal ("\
Usage: ld.so [--list|--verify] EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]\n\
You have invoked `ld.so', the helper program for shared library executables.\n\
This program usually lives in the file `/lib/ld.so', and special directives\n\
in executable files using ELF shared libraries tell the system's program\n\
@@ -162,239 +180,392 @@ that file itself, but always uses this helper program from the file you\n\
specified, instead of the helper program file specified in the executable\n\
file you run. This is mostly of use for maintainers to test new versions\n\
of this helper program; chances are you did not intend to run this program.\n",
NULL);
NULL);
interpreter_name = _dl_argv[0];
/* Note the place where the dynamic linker actually came from. */
_dl_rtld_map.l_name = _dl_argv[0];
if (! strcmp (_dl_argv[1], "--list"))
{
list_only = 1;
++_dl_skip_args;
--_dl_argc;
++_dl_argv;
}
if (! strcmp (_dl_argv[1], "--list"))
{
mode = list;
++_dl_skip_args;
--_dl_argc;
++_dl_argv;
}
else if (! strcmp (_dl_argv[1], "--verify"))
{
mode = verify;
l = _dl_map_object (NULL, _dl_argv[0]);
phdr = l->l_phdr;
phent = l->l_phnum;
l->l_name = (char *) "";
*user_entry = l->l_entry;
++_dl_skip_args;
--_dl_argc;
++_dl_argv;
}
++_dl_skip_args;
--_dl_argc;
++_dl_argv;
if (mode == verify)
{
void doit (void)
{
l = _dl_map_object (NULL, _dl_argv[0], lt_library);
}
char *err_str = NULL;
const char *obj_name __attribute__ ((unused));
(void) _dl_catch_error (&err_str, &obj_name, doit);
if (err_str != NULL)
{
free (err_str);
_exit (EXIT_FAILURE);
}
}
else
{
/* Create a link_map for the executable itself.
This will be what dlopen on "" returns. */
l = _dl_new_object ((char *) "", "", lt_executable);
l->l_phdr = phdr;
l->l_phnum = phent;
interpreter_name = 0;
l->l_entry = *user_entry;
}
l = _dl_map_object (NULL, _dl_argv[0], lt_library);
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;
}
phdr = l->l_phdr;
phent = l->l_phnum;
l->l_name = (char *) "";
*user_entry = l->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);
l->l_phdr = phdr;
l->l_phnum = phent;
l->l_entry = *user_entry;
}
/* Scan the program header table for the dynamic section. */
for (ph = phdr; ph < &phdr[phent]; ++ph)
switch (ph->p_type)
{
case PT_DYNAMIC:
/* This tells us where to find the dynamic section,
which tells us everything we need to do. */
l->l_ld = (void *) l->l_addr + ph->p_vaddr;
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;
}
/* Scan the program header table for the dynamic section. */
for (ph = phdr; ph < &phdr[phent]; ++ph)
switch (ph->p_type)
{
case PT_DYNAMIC:
/* This tells us where to find the dynamic section,
which tells us everything we need to do. */
l->l_ld = (void *) l->l_addr + ph->p_vaddr;
break;
case PT_INTERP:
/* This "interpreter segment" was used by the program loader to
find the program interpreter, which is this program itself, the
dynamic linker. We note what name finds us, so that a future
dlopen call or DT_NEEDED entry, for something that wants to link
against the dynamic linker as a shared library, will know that
the shared object is already loaded. */
_dl_rtld_map.l_libname = (const char *) l->l_addr + ph->p_vaddr;
break;
}
if (! _dl_rtld_map.l_libname && _dl_rtld_map.l_name)
/* We were invoked directly, so the program might not have a PT_INTERP. */
_dl_rtld_map.l_libname = _dl_rtld_map.l_name;
else
assert (_dl_rtld_map.l_libname); /* How else did we get here? */
if (mode == verify)
/* We were called just to verify that this is a dynamic executable
using us as the program interpreter. */
_exit ((strcmp (_dl_rtld_map.l_libname, _dl_rtld_map.l_name) ||
l->l_ld == NULL)
? EXIT_FAILURE : EXIT_SUCCESS);
/* Extract the contents of the dynamic section for easy access. */
elf_get_dynamic_info (l->l_ld, l->l_info);
if (l->l_info[DT_HASH])
/* Set up our cache of pointers into the hash table. */
_dl_setup_hash (l);
/* Put the link_map for ourselves on the chain so it can be found by
name. */
if (! _dl_rtld_map.l_name)
/* If not invoked directly, the dynamic linker shared object file was
found by the PT_INTERP name. */
_dl_rtld_map.l_name = (char *) _dl_rtld_map.l_libname;
_dl_rtld_map.l_type = lt_library;
while (l->l_next)
l = l->l_next;
l->l_next = &_dl_rtld_map;
_dl_rtld_map.l_prev = l;
/* We have two ways to specify objects to preload: via environment
variable and via the file /etc/ld.so.preload. The later can also
be used when security is enabled. */
preloads = NULL;
npreloads = 0;
/* Read the contents of the file. */
file = _dl_sysdep_read_whole_file ("/etc/ld.so.preload", &file_size,
PROT_READ | PROT_WRITE);
if (file)
{
/* Parse the file. It contains names of libraries to be loaded,
separated by white spaces or `:'. It may also contain
comments introduced by `#'. */
char *problem;
char *runp;
size_t rest;
/* Eliminate comments. */
runp = file;
rest = file_size;
while (rest > 0)
{
char *comment = memchr (runp, '#', rest);
if (comment == NULL)
break;
case PT_INTERP:
/* This "interpreter segment" was used by the program loader to
find the program interpreter, which is this program itself, the
dynamic linker. We note what name finds us, so that a future
dlopen call or DT_NEEDED entry, for something that wants to link
against the dynamic linker as a shared library, will know that
the shared object is already loaded. */
interpreter_name = (void *) l->l_addr + ph->p_vaddr;
break;
}
assert (interpreter_name); /* How else did we get here? */
/* Extract the contents of the dynamic section for easy access. */
elf_get_dynamic_info (l->l_ld, l->l_info);
if (l->l_info[DT_HASH])
/* Set up our cache of pointers into the hash table. */
_dl_setup_hash (l);
rest -= comment - runp;
do
*comment = ' ';
while (--rest > 0 && *++comment != '\n');
}
if (l->l_info[DT_DEBUG])
/* There is a DT_DEBUG entry in the dynamic section. Fill it in
with the run-time address of the r_debug structure, which we
will set up later to communicate with the debugger. */
l->l_info[DT_DEBUG]->d_un.d_ptr = (Elf32_Addr) &dl_r_debug;
/* Put the link_map for ourselves on the chain so it can be found by
name. */
rtld_map.l_name = (char *) rtld_map.l_libname = interpreter_name;
rtld_map.l_type = lt_interpreter;
while (l->l_next)
l = l->l_next;
l->l_next = &rtld_map;
rtld_map.l_prev = l;
/* Now process all the DT_NEEDED entries and map in the objects.
Each new link_map will go on the end of the chain, so we will
come across it later in the loop to map in its dependencies. */
before_rtld = NULL;
for (l = _dl_loaded; l; l = l->l_next)
/* We have one problematic case: if we have a name at the end of
the file without a trailing terminating characters, we cannot
place the \0. Handle the case separately. */
if (file[file_size - 1] != ' ' && file[file_size] != '\t'
&& file[file_size] != '\n')
{
if (l->l_info[DT_NEEDED])
problem = &file[file_size];
while (problem > file && problem[-1] != ' ' && problem[-1] != '\t'
&& problem[-1] != '\n')
--problem;
if (problem > file)
problem[-1] = '\0';
}
else
problem = NULL;
if (file != problem)
{
char *p;
runp = file;
while ((p = strsep (&runp, ": \t\n")) != NULL)
{
const char *strtab
= (void *) l->l_addr + l->l_info[DT_STRTAB]->d_un.d_ptr;
const Elf32_Dyn *d;
last = l;
for (d = l->l_ld; d->d_tag != DT_NULL; ++d)
if (d->d_tag == DT_NEEDED)
{
struct link_map *new;
new = _dl_map_object (l, strtab + d->d_un.d_val);
new->l_type = lt_library;
if (!before_rtld && new == &rtld_map)
before_rtld = last;
last = new;
}
(void) _dl_map_object (NULL, p, lt_library);
++npreloads;
}
l->l_deps_loaded = 1;
}
/* If any DT_NEEDED entry referred to the interpreter object itself,
reorder the list so it appears after its dependent. If not,
remove it from the maps we will use for symbol resolution. */
rtld_map.l_prev->l_next = rtld_map.l_next;
if (rtld_map.l_next)
rtld_map.l_next->l_prev = rtld_map.l_prev;
if (before_rtld)
if (problem != NULL)
{
rtld_map.l_prev = before_rtld;
rtld_map.l_next = before_rtld->l_next;
before_rtld->l_next = &rtld_map;
if (rtld_map.l_next)
rtld_map.l_next->l_prev = &rtld_map;
char *p = strndupa (problem, file_size - (problem - file));
(void) _dl_map_object (NULL, p, lt_library);
}
if (list_only)
/* We don't need the file anymore. */
__munmap (file, file_size);
}
if (! __libc_enable_secure)
{
const char *preloadlist = getenv ("LD_PRELOAD");
if (preloadlist)
{
/* We were run just to list the shared libraries. It is
important that we do this before real relocation, because the
functions we call below for output may no longer work properly
after relocation. */
int i;
if (! _dl_loaded->l_info[DT_NEEDED])
_dl_sysdep_message ("\t", "statically linked\n", NULL);
else
for (l = _dl_loaded->l_next; l; l = l->l_next)
{
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
while (&buf[sizeof buf - 1] - bp < sizeof l->l_addr * 2)
*--bp = '0';
_dl_sysdep_message ("\t", l->l_libname, " => ", l->l_name,
" (0x", bp, ")\n", NULL);
}
for (i = 1; i < _dl_argc; ++i)
/* The LD_PRELOAD environment variable gives a colon-separated
list of libraries that are loaded before the executable's
dependencies and prepended to the global scope list. */
char *list = strdupa (preloadlist);
char *p;
while ((p = strsep (&list, ":")) != NULL)
{
const Elf32_Sym *ref = NULL;
Elf32_Addr loadbase = _dl_lookup_symbol (_dl_argv[i], &ref,
_dl_loaded, "argument",
1);
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (ref->st_value, &buf[sizeof buf - 1], 16, 0);
while (&buf[sizeof buf - 1] - bp < sizeof loadbase * 2)
*--bp = '0';
_dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL);
buf[sizeof buf - 1] = '\0';
bp = _itoa (loadbase, &buf[sizeof buf - 1], 16, 0);
while (&buf[sizeof buf - 1] - bp < sizeof loadbase * 2)
*--bp = '0';
_dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
(void) _dl_map_object (NULL, p, lt_library);
++npreloads;
}
_exit (0);
}
lazy = !_dl_secure && *(getenv ("LD_BIND_NOW") ?: "") == '\0';
/* Do any necessary cleanups for the startup OS interface code.
We do these now so that no calls are made after real relocation
which might be resolved to different functions than we expect. */
_dl_sysdep_start_cleanup ();
/* Now we have all the objects loaded. Relocate them all.
We do this in reverse order so that copy relocs of earlier
objects overwrite the data written by later objects. */
l = _dl_loaded;
while (l->l_next)
l = l->l_next;
do
{
_dl_relocate_object (l, lazy);
l = l->l_prev;
} while (l);
/* Tell the debugger where to find the map of loaded objects. */
dl_r_debug.r_version = 1 /* R_DEBUG_VERSION XXX */;
dl_r_debug.r_ldbase = rtld_map.l_addr; /* Record our load address. */
dl_r_debug.r_map = _dl_loaded;
dl_r_debug.r_brk = (Elf32_Addr) &_dl_r_debug_state;
if (rtld_map.l_info[DT_INIT])
{
/* Call the initializer for the compatibility version of the
dynamic linker. There is no additional initialization
required for the ABI-compliant dynamic linker. */
(*(void (*) (void)) (rtld_map.l_addr +
rtld_map.l_info[DT_INIT]->d_un.d_ptr)) ();
/* Clear the field so a future dlopen won't run it again. */
rtld_map.l_info[DT_INIT] = NULL;
}
}
const char *errstring;
const char *errobj;
int err;
err = _dl_catch_error (&errstring, &errobj, &doit);
if (errstring)
_dl_sysdep_fatal (_dl_argv[0] ?: "<program name unknown>",
": error in loading shared libraries\n",
errobj ?: "", errobj ? ": " : "",
errstring, err ? ": " : "",
err ? strerror (err) : "", "\n", NULL);
if (npreloads != 0)
{
/* Set up PRELOADS with a vector of the preloaded libraries. */
struct link_map *l;
unsigned int i;
preloads = __alloca (npreloads * sizeof preloads[0]);
l = _dl_rtld_map.l_next; /* End of the chain before preloads. */
i = 0;
do
{
preloads[i++] = l;
l = l->l_next;
} while (l);
assert (i == npreloads);
}
/* Load all the libraries specified by DT_NEEDED entries. If LD_PRELOAD
specified some libraries to load, these are inserted before the actual
dependencies in the executable's searchlist for symbol resolution. */
_dl_map_object_deps (l, preloads, npreloads);
#ifndef MAP_ANON
/* We are done mapping things, so close the zero-fill descriptor. */
__close (_dl_zerofd);
_dl_zerofd = -1;
#endif
/* Remove _dl_rtld_map from the chain. */
_dl_rtld_map.l_prev->l_next = _dl_rtld_map.l_next;
if (_dl_rtld_map.l_next)
_dl_rtld_map.l_next->l_prev = _dl_rtld_map.l_prev;
if (_dl_rtld_map.l_opencount)
{
/* Some DT_NEEDED entry referred to the interpreter object itself, so
put it back in the list of visible objects. We insert it into the
chain in symbol search order because gdb uses the chain's order as
its symbol search order. */
unsigned int i = 1;
while (l->l_searchlist[i] != &_dl_rtld_map)
++i;
_dl_rtld_map.l_prev = l->l_searchlist[i - 1];
_dl_rtld_map.l_next = (i + 1 < l->l_nsearchlist ?
l->l_searchlist[i + 1] : NULL);
assert (_dl_rtld_map.l_prev->l_next == _dl_rtld_map.l_next);
_dl_rtld_map.l_prev->l_next = &_dl_rtld_map;
if (_dl_rtld_map.l_next)
{
assert (_dl_rtld_map.l_next->l_prev == _dl_rtld_map.l_prev);
_dl_rtld_map.l_next->l_prev = &_dl_rtld_map;
}
}
if (mode != normal)
{
/* We were run just to list the shared libraries. It is
important that we do this before real relocation, because the
functions we call below for output may no longer work properly
after relocation. */
int i;
if (! _dl_loaded->l_info[DT_NEEDED])
_dl_sysdep_message ("\t", "statically linked\n", NULL);
else
for (l = _dl_loaded->l_next; l; l = l->l_next)
{
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (l->l_addr, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof l->l_addr * 2)
*--bp = '0';
_dl_sysdep_message ("\t", l->l_libname, " => ", l->l_name,
" (0x", bp, ")\n", NULL);
}
if (mode != trace)
for (i = 1; i < _dl_argc; ++i)
{
const ElfW(Sym) *ref = NULL;
ElfW(Addr) loadbase = _dl_lookup_symbol (_dl_argv[i], &ref,
&_dl_default_scope[2],
"argument",
DL_LOOKUP_NOPLT);
char buf[20], *bp;
buf[sizeof buf - 1] = '\0';
bp = _itoa (ref->st_value, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
*--bp = '0';
_dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL);
buf[sizeof buf - 1] = '\0';
bp = _itoa (loadbase, &buf[sizeof buf - 1], 16, 0);
while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2)
*--bp = '0';
_dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
}
_exit (0);
}
lazy = !__libc_enable_secure && *(getenv ("LD_BIND_NOW") ?: "") == '\0';
{
/* Now we have all the objects loaded. Relocate them all except for
the dynamic linker itself. We do this in reverse order so that copy
relocs of earlier objects overwrite the data written by later
objects. We do not re-relocate the dynamic linker itself in this
loop because that could result in the GOT entries for functions we
call being changed, and that would break us. It is safe to relocate
the dynamic linker out of order because it has no copy relocs (we
know that because it is self-contained). */
l = _dl_loaded;
while (l->l_next)
l = l->l_next;
do
{
if (l != &_dl_rtld_map)
{
_dl_relocate_object (l, _dl_object_relocation_scope (l), lazy);
*_dl_global_scope_end = NULL;
}
l = l->l_prev;
} while (l);
/* Do any necessary cleanups for the startup OS interface code.
We do these now so that no calls are made after rtld re-relocation
which might be resolved to different functions than we expect.
We cannot do this before relocating the other objects because
_dl_relocate_object might need to call `mprotect' for DT_TEXTREL. */
_dl_sysdep_start_cleanup ();
if (_dl_rtld_map.l_opencount > 0)
/* There was an explicit ref to the dynamic linker as a shared lib.
Re-relocate ourselves with user-controlled symbol definitions. */
_dl_relocate_object (&_dl_rtld_map, &_dl_default_scope[2], 0);
}
{
/* Initialize _r_debug. */
struct r_debug *r = _dl_debug_initialize (_dl_rtld_map.l_addr);
l = _dl_loaded;
#ifdef ELF_MACHINE_DEBUG_SETUP
/* Some machines (e.g. MIPS) don't use DT_DEBUG in this way. */
ELF_MACHINE_DEBUG_SETUP (l, r);
ELF_MACHINE_DEBUG_SETUP (&_dl_rtld_map, r);
#else
if (l->l_info[DT_DEBUG])
/* There is a DT_DEBUG entry in the dynamic section. Fill it in
with the run-time address of the r_debug structure */
l->l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
/* Fill in the pointer in the dynamic linker's own dynamic section, in
case you run gdb on the dynamic linker directly. */
if (_dl_rtld_map.l_info[DT_DEBUG])
_dl_rtld_map.l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
#endif
/* Notify the debugger that all objects are now mapped in. */
r->r_state = RT_ADD;
_dl_debug_state ();
}
/* We finished the intialization and will start up. */
_dl_starting_up = 1;
/* Once we return, _dl_sysdep_start will invoke
the DT_INIT functions and then *USER_ENTRY. */
}
/* This function exists solely to have a breakpoint set on it by the
debugger. */
void
_dl_r_debug_state (void)
{
}
+1
View File
@@ -0,0 +1 @@
#include <string/envz.h>
+1
View File
@@ -0,0 +1 @@
#include <misc/err.h>
+12 -3
View File
@@ -13,7 +13,7 @@ Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the, 1992 Free Software Foundation, Inc., 675 Mass Ave,
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/*
@@ -37,6 +37,7 @@ __BEGIN_DECLS
#undef __need_Emath
#ifdef _ERRNO_H
/* Declare the `errno' variable, unless it's defined as a macro by
errnos.h. This is the case in GNU, where it is a per-thread variable.
This redeclaration using the macro still works, but it will be a
@@ -47,13 +48,21 @@ extern int errno;
#endif
#ifdef __USE_GNU
/* The Hurd <errnos.h> defines `error_t' as an enumerated type
so that printing `error_t' values in the debugger shows the names. */
#ifndef __error_t_defined
typedef int error_t;
#define __error_t_defined 1
#endif
/* The full and simple forms of the name with which the program was
invoked. These variables are set up automatically at startup based on
the value of ARGV[0] (this works only if you use GNU ld). */
extern char *program_invocation_name, *program_invocation_short_name;
#endif
#endif /* __USE_GNU */
#endif /* _ERRNO_H */
__END_DECLS
#endif
#endif /* errno.h */
+17 -5
View File
@@ -10,6 +10,8 @@ extra-libs-left := $(filter-out $(lib),$(extra-libs-left))
object-suffixes-$(lib) := $(filter-out $($(lib)-inhibit-o),$(object-suffixes))
ifneq (,$(object-suffixes-$(lib)))
# Make sure these are simply-expanded variables before we append to them,
# since we want the expressions we append to be expanded right now.
install-lib := $(install-lib)
@@ -17,20 +19,28 @@ extra-objs := $(extra-objs)
# Add each flavor of library to the lists of things to build and install.
install-lib += $(foreach o,$(object-suffixes-$(lib)),$(lib:lib%=$(libtype$o)))
extra-objs += $(foreach o,$(object-suffixes-$(lib)),$($(lib)-routines:=$o))
extra-objs += $(foreach o,$(object-suffixes-$(lib)),\
$(patsubst %,%$o,$($(lib)-routines)))
alltypes-$(lib) := $(foreach o,$(object-suffixes-$(lib)),\
$(objpfx)$(patsubst %,$(libtype$o),\
$(lib:lib%=%)))
ifneq (,$(filter .so,$(object-suffixes-$(lib))))
alltypes-$(lib) += $(objpfx)$(lib).so
endif
ifeq (,$($(lib)-no-lib-dep))
ifeq (,$(filter $(lib),$(extra-libs-others)))
lib-noranlib: $(alltypes-$(lib))
ifeq (yes,$(build-shared))
lib-noranlib: $(objpfx)$(lib).so$($(lib).so-version)
endif
else
others: $(alltypes-$(lib))
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
endif
# Use o-iterator.mk to generate a rule for each flavor of library.
define o-iterator-doit
$(objpfx)$(patsubst %,$(libtype$o),$(lib:lib%=%)): \
@@ -38,3 +48,5 @@ $(objpfx)$(patsubst %,$(libtype$o),$(lib:lib%=%)): \
endef
object-suffixes-left = $(object-suffixes-$(lib))
include $(patsubst %,$(..)o-iterator.mk,$(object-suffixes-$(lib)))
endif
+31 -21
View File
@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1991, 92, 93, 95, 96 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@ Cambridge, MA 02139, USA. */
_GNU_SOURCE All of the above, plus GNU extensions.
The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__.
If none of these are defined, the default is _GNU_SOURCE.
If none of these are defined, the default is all but _GNU_SOURCE.
If more than one of these are defined, they accumulate.
For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE
together give you ANSI C, 1003.1, and 1003.2, but nothing else.
@@ -50,7 +50,6 @@ Cambridge, MA 02139, USA. */
The macro `__GNU_LIBRARY__' is defined by this file unconditionally.
All macros defined by this file are defined as 1.
All macros listed above as possibly being defined by this file are
explicitly undefined if they are not explicitly defined.
Feature-test macros that are not defined by the user or compiler
@@ -67,51 +66,62 @@ Cambridge, MA 02139, USA. */
#undef __USE_GNU
#undef __USE_REENTRANT
#undef __FAVOR_BSD
#undef __KERNEL_STRICT_NAMES
/* If nothing is defined, define _GNU_SOURCE. */
#if (!defined(_GNU_SOURCE) && !defined(__STRICT_ANSI__) && \
!defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) && \
!defined(_BSD_SOURCE) && !defined(_SVID_SOURCE))
#define _GNU_SOURCE 1
/* Suppress kernel-name space pollution unless user expressedly asks
for it: */
#ifndef _LOOSE_KERNEL_NAMES
# define __KERNEL_STRICT_NAMES
#endif
/* Always use ANSI things. */
#define __USE_ANSI 1
/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */
#ifdef _BSD_SOURCE
#if defined (_BSD_SOURCE) && \
!(defined (_POSIX_SOURCE) || defined (_POSIX_C_SOURCE) || \
defined (_GNU_SOURCE) || defined (_SVID_SOURCE))
#define __FAVOR_BSD 1
#endif
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */
#ifdef _GNU_SOURCE
#undef _POSIX_SOURCE
#define _POSIX_SOURCE 1
#undef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 2
#undef _BSD_SOURCE
#define _BSD_SOURCE 1
#undef _SVID_SOURCE
#define _SVID_SOURCE 1
#endif
/* If nothing (other than _GNU_SOURCE) is defined,
define _BSD_SOURCE and _SVID_SOURCE. */
#if (!defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE) && \
!defined(_POSIX_C_SOURCE) && !defined(_BSD_SOURCE) && \
!defined(_SVID_SOURCE))
#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
!defined (_POSIX_C_SOURCE) && !defined (_BSD_SOURCE) && \
!defined (_SVID_SOURCE))
#define _BSD_SOURCE 1
#define _SVID_SOURCE 1
#endif
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2. */
#if (!defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE) && \
!defined(_POSIX_C_SOURCE))
#if (!defined (__STRICT_ANSI__) && !defined (_POSIX_SOURCE) && \
!defined (_POSIX_C_SOURCE))
#define _POSIX_SOURCE 1
#define _POSIX_C_SOURCE 2
#endif
#if defined(_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
#if defined (_POSIX_SOURCE) || _POSIX_C_SOURCE >= 1
#define __USE_POSIX 1
#endif
#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2
#if defined (_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 2
#define __USE_POSIX2 1
#endif
#if defined(_BSD_SOURCE) || defined(_SVID_SOURCE)
#if defined (_BSD_SOURCE) || defined (_SVID_SOURCE)
#define __USE_MISC 1
#endif
@@ -139,10 +149,10 @@ Cambridge, MA 02139, USA. */
the shared C library corresponding to this set of header files. */
#undef __GNU_LIBRARY__
#define __GNU_LIBRARY__ 5
#define __GNU_LIBRARY__ 6
#if !defined(__GNUC__) || __GNUC__ < 2
#if !defined (__GNUC__) || __GNUC__ < 2
/* In GCC version 2, (__extension__ EXPR) will not complain
about GCC extensions used in EXPR under -ansi or -pedantic. */
#define __extension__
+1
View File
@@ -1,3 +1,4 @@
*.d *.o *.so *.po *.go stamp.* *.stamp *.ustamp *.udeps
*.gz *.Z *.tar *.tgz
=*
TODO COPYING* AUTHORS copyr-* copying.*
+3 -3
View File
@@ -21,9 +21,9 @@
#
subdir := gmon
headers := sys/gmon.h
distribute := machine-gmon.h
routines := gmon mcount profil
headers := sys/gmon.h sys/gmon_out.h
distribute := machine-gmon.h profil-counter.h
routines := gmon mcount profil bb_init_func bb_exit_func
include ../Rules
+78
View File
@@ -0,0 +1,78 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/* __bb_exit_func() dumps all the basic-block statistics linked into
the bb_head chain to .d files. */
#include <sys/gmon_out.h>
#include <sys/types.h>
#include <ansidecl.h>
#include <stdio.h>
#include <strings.h>
/* structure emitted by -a */
struct bb {
long zero_word;
const char *filename;
long *counts;
long ncounts;
struct bb *next;
const unsigned long *addresses;
};
extern struct bb *__bb_head; /* from gmon.c */
#define OUT_NAME "gmon.out"
void
DEFUN_VOID(__bb_exit_func)
{
const int version = GMON_VERSION;
struct gmon_hdr ghdr;
struct bb *ptr;
FILE *fp;
fp = fopen(OUT_NAME, "wb");
if (!fp)
{
perror(OUT_NAME);
return;
}
bcopy(GMON_MAGIC, &ghdr.cookie[0], 4);
bcopy(&version, &ghdr.version, sizeof(version));
fwrite(&ghdr, sizeof(ghdr), 1, fp);
for (ptr = __bb_head; ptr != 0; ptr = ptr->next) {
u_int ncounts = ptr->ncounts;
u_char tag;
u_int i;
tag = GMON_TAG_BB_COUNT;
fwrite(&tag, sizeof(tag), 1, fp);
fwrite(&ncounts, sizeof(ncounts), 1, fp);
for (i = 0; i < ncounts; ++i) {
fwrite(&ptr->addresses[i], sizeof(ptr->addresses[0]), 1, fp);
fwrite(&ptr->counts[i], sizeof(ptr->counts[0]), 1, fp);
}
}
fclose (fp);
}
+221 -163
View File
@@ -30,161 +30,53 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if !defined(lint) && defined(LIBC_SCCS)
static char sccsid[] = "@(#)gmon.c 8.1 (Berkeley) 6/4/93";
#endif
#include <sys/param.h>
#include <sys/time.h>
#include <sys/gmon.h>
#include <sys/gmon_out.h>
#include <ansidecl.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
struct __bb *__bb_head; /* Head of basic-block list or NULL. */
struct gmonparam _gmonparam = { GMON_PROF_OFF };
/*
* See profil(2) where this is described:
*/
static int s_scale;
/* see profil(2) where this is describe (incorrectly) */
#define SCALE_1_TO_1 0x10000L
#define ERR(s) write(2, s, sizeof(s) - 1)
void moncontrol __P((int));
static int hertz __P((void));
void
monstartup(lowpc, highpc)
u_long lowpc;
u_long highpc;
/*
* Discover the tick frequency of the machine if something goes wrong,
* we return 0, an impossible hertz.
*/
static int
DEFUN_VOID(hertz)
{
register int o;
char *cp;
struct gmonparam *p = &_gmonparam;
struct itimerval tim;
/*
* round lowpc and highpc to multiples of the density we're using
* so the rest of the scaling (here and in gprof) stays in ints.
*/
p->lowpc = ROUNDDOWN(lowpc, HISTFRACTION * sizeof(HISTCOUNTER));
p->highpc = ROUNDUP(highpc, HISTFRACTION * sizeof(HISTCOUNTER));
p->textsize = p->highpc - p->lowpc;
p->kcountsize = p->textsize / HISTFRACTION;
p->hashfraction = HASHFRACTION;
p->fromssize = p->textsize / HASHFRACTION;
p->tolimit = p->textsize * ARCDENSITY / 100;
if (p->tolimit < MINARCS)
p->tolimit = MINARCS;
else if (p->tolimit > MAXARCS)
p->tolimit = MAXARCS;
p->tossize = p->tolimit * sizeof(struct tostruct);
cp = malloc (p->kcountsize + p->fromssize + p->tossize);
if (! cp) {
ERR("monstartup: out of memory\n");
return;
}
bzero(cp, p->kcountsize + p->fromssize + p->tossize);
p->tos = (struct tostruct *)cp;
cp += p->tossize;
p->kcount = (u_short *)cp;
cp += p->kcountsize;
p->froms = (u_short *)cp;
p->tos[0].link = 0;
o = p->highpc - p->lowpc;
if (p->kcountsize < o) {
#ifndef hp300
s_scale = ((float)p->kcountsize / o ) * SCALE_1_TO_1;
#else /* avoid floating point */
int quot = o / p->kcountsize;
if (quot >= 0x10000)
s_scale = 1;
else if (quot >= 0x100)
s_scale = 0x10000 / quot;
else if (o >= 0x800000)
s_scale = 0x1000000 / (o / (p->kcountsize >> 8));
else
s_scale = 0x1000000 / ((o << 8) / p->kcountsize);
#endif
} else
s_scale = SCALE_1_TO_1;
moncontrol(1);
tim.it_interval.tv_sec = 0;
tim.it_interval.tv_usec = 1;
tim.it_value.tv_sec = 0;
tim.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &tim, 0);
setitimer(ITIMER_REAL, 0, &tim);
if (tim.it_interval.tv_usec < 2)
return 0;
return (1000000 / tim.it_interval.tv_usec);
}
void
_mcleanup()
{
int fd;
int fromindex;
int endfrom;
u_long frompc;
int toindex;
struct rawarc rawarc;
struct gmonparam *p = &_gmonparam;
struct gmonhdr gmonhdr, *hdr;
#ifdef DEBUG
int log, len;
char buf[200];
#endif
if (p->state == GMON_PROF_ERROR)
ERR("_mcleanup: tos overflow\n");
moncontrol(0);
fd = open("gmon.out", O_CREAT|O_TRUNC|O_WRONLY, 0666);
if (fd < 0) {
perror("mcount: gmon.out");
return;
}
#ifdef DEBUG
log = open("gmon.log", O_CREAT|O_TRUNC|O_WRONLY, 0664);
if (log < 0) {
perror("mcount: gmon.log");
return;
}
len = sprintf(buf, "[mcleanup1] kcount 0x%x ssiz %d\n",
p->kcount, p->kcountsize);
write(log, buf, len);
#endif
hdr = (struct gmonhdr *)&gmonhdr;
hdr->lpc = p->lowpc;
hdr->hpc = p->highpc;
hdr->ncnt = p->kcountsize + sizeof(gmonhdr);
hdr->version = GMONVERSION;
hdr->profrate = hertz();
write(fd, (char *)hdr, sizeof *hdr);
write(fd, p->kcount, p->kcountsize);
endfrom = p->fromssize / sizeof(*p->froms);
for (fromindex = 0; fromindex < endfrom; fromindex++) {
if (p->froms[fromindex] == 0)
continue;
frompc = p->lowpc;
frompc += fromindex * p->hashfraction * sizeof(*p->froms);
for (toindex = p->froms[fromindex]; toindex != 0;
toindex = p->tos[toindex].link) {
#ifdef DEBUG
len = sprintf(buf,
"[mcleanup2] frompc 0x%x selfpc 0x%x count %d\n" ,
frompc, p->tos[toindex].selfpc,
p->tos[toindex].count);
write(log, buf, len);
#endif
rawarc.raw_frompc = frompc;
rawarc.raw_selfpc = p->tos[toindex].selfpc;
rawarc.raw_count = p->tos[toindex].count;
write(fd, &rawarc, sizeof rawarc);
}
}
close(fd);
}
/*
* Control profiling
@@ -192,41 +84,207 @@ _mcleanup()
* all the data structures are ready.
*/
void
moncontrol(mode)
int mode;
DEFUN(moncontrol, (mode), int mode)
{
struct gmonparam *p = &_gmonparam;
struct gmonparam *p = &_gmonparam;
if (mode) {
/* start */
profil(p->kcount, p->kcountsize, (int)p->lowpc,
s_scale);
p->state = GMON_PROF_ON;
} else {
/* stop */
profil(0, 0, 0, 0);
p->state = GMON_PROF_OFF;
if (mode)
{
/* start */
profil((void *) p->kcount, p->kcountsize, p->lowpc, s_scale);
p->state = GMON_PROF_ON;
}
else
{
/* stop */
profil((void *) 0, 0, 0, 0);
p->state = GMON_PROF_OFF;
}
}
void
DEFUN(monstartup, (lowpc, highpc), u_long lowpc AND u_long highpc)
{
register int o;
char *cp;
struct gmonparam *p = &_gmonparam;
/*
* round lowpc and highpc to multiples of the density we're using
* so the rest of the scaling (here and in gprof) stays in ints.
*/
p->lowpc = ROUNDDOWN(lowpc, HISTFRACTION * sizeof(HISTCOUNTER));
p->highpc = ROUNDUP(highpc, HISTFRACTION * sizeof(HISTCOUNTER));
p->textsize = p->highpc - p->lowpc;
p->kcountsize = p->textsize / HISTFRACTION;
p->hashfraction = HASHFRACTION;
p->log_hashfraction = -1;
if ((HASHFRACTION & (HASHFRACTION - 1)) == 0) {
/* if HASHFRACTION is a power of two, mcount can use shifting
instead of integer division. Precompute shift amount. */
p->log_hashfraction = ffs(p->hashfraction * sizeof(*p->froms)) - 1;
}
p->fromssize = p->textsize / HASHFRACTION;
p->tolimit = p->textsize * ARCDENSITY / 100;
if (p->tolimit < MINARCS)
p->tolimit = MINARCS;
else if (p->tolimit > MAXARCS)
p->tolimit = MAXARCS;
p->tossize = p->tolimit * sizeof(struct tostruct);
cp = malloc (p->kcountsize + p->fromssize + p->tossize);
if (! cp)
{
ERR("monstartup: out of memory\n");
return;
}
bzero(cp, p->kcountsize + p->fromssize + p->tossize);
p->tos = (struct tostruct *)cp;
cp += p->tossize;
p->kcount = (u_short *)cp;
cp += p->kcountsize;
p->froms = (u_short *)cp;
p->tos[0].link = 0;
o = p->highpc - p->lowpc;
if (p->kcountsize < o)
{
#ifndef hp300
s_scale = ((float)p->kcountsize / o ) * SCALE_1_TO_1;
#else
/* avoid floating point operations */
int quot = o / p->kcountsize;
if (quot >= 0x10000)
s_scale = 1;
else if (quot >= 0x100)
s_scale = 0x10000 / quot;
else if (o >= 0x800000)
s_scale = 0x1000000 / (o / (p->kcountsize >> 8));
else
s_scale = 0x1000000 / ((o << 8) / p->kcountsize);
#endif
} else
s_scale = SCALE_1_TO_1;
moncontrol(1);
}
static void
DEFUN(write_hist, (fd), int fd)
{
const u_char tag = GMON_TAG_TIME_HIST;
struct gmon_hist_hdr thdr;
int size, rate;
if (_gmonparam.kcountsize > 0)
{
size = _gmonparam.kcountsize / sizeof(HISTCOUNTER);
rate = hertz();
bcopy(&_gmonparam.lowpc, &thdr.low_pc, sizeof(thdr.low_pc));
bcopy(&_gmonparam.highpc, &thdr.high_pc, sizeof(thdr.high_pc));
bcopy(&size, &thdr.hist_size, sizeof(thdr.hist_size));
bcopy(&rate, &thdr.prof_rate, sizeof(thdr.prof_rate));
strcpy(thdr.dimen, "seconds");
thdr.dimen_abbrev = 's';
write(fd, &tag, sizeof(tag));
write(fd, &thdr, sizeof(thdr));
write(fd, _gmonparam.kcount, _gmonparam.kcountsize);
}
}
static void
DEFUN(write_call_graph, (fd), int fd)
{
const u_char tag = GMON_TAG_CG_ARC;
struct gmon_cg_arc_record raw_arc;
int from_index, to_index, from_len;
u_long frompc;
from_len = _gmonparam.fromssize / sizeof(*_gmonparam.froms);
for (from_index = 0; from_index < from_len; ++from_index)
{
if (_gmonparam.froms[from_index] == 0)
continue;
frompc = _gmonparam.lowpc;
frompc += (from_index * _gmonparam.hashfraction
* sizeof(*_gmonparam.froms));
for (to_index = _gmonparam.froms[from_index];
to_index != 0;
to_index = _gmonparam.tos[to_index].link)
{
bcopy(&frompc, &raw_arc.from_pc, sizeof(raw_arc.from_pc));
bcopy(&_gmonparam.tos[to_index].selfpc, &raw_arc.self_pc,
sizeof(raw_arc.self_pc));
bcopy(&_gmonparam.tos[to_index].count, &raw_arc.count,
sizeof(raw_arc.count));
write(fd, &tag, sizeof(tag));
write(fd, &raw_arc, sizeof(raw_arc));
}
}
}
/*
* discover the tick frequency of the machine
* if something goes wrong, we return 0, an impossible hertz.
*/
static int
hertz()
static void
DEFUN(write_bb_counts, (fd), int fd)
{
struct itimerval tim;
tim.it_interval.tv_sec = 0;
tim.it_interval.tv_usec = 1;
tim.it_value.tv_sec = 0;
tim.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &tim, 0);
setitimer(ITIMER_REAL, 0, &tim);
if (tim.it_interval.tv_usec < 2)
return(0);
return (1000000 / tim.it_interval.tv_usec);
struct __bb *grp;
const u_char tag = GMON_TAG_BB_COUNT;
int ncounts;
int i;
/* Write each group of basic-block info (all basic-blocks in a
compilation unit form a single group). */
for (grp = __bb_head; grp; grp = grp->next)
{
ncounts = grp->ncounts;
write(fd, &tag, sizeof(tag));
write(fd, &ncounts, sizeof(ncounts));
for (i = 0; i < ncounts; ++i)
{
write(fd, &grp->addresses[i], sizeof(grp->addresses[0]));
write(fd, &grp->counts[i], sizeof(grp->counts[0]));
}
}
}
void
DEFUN_VOID(_mcleanup)
{
const int version = GMON_VERSION;
struct gmon_hdr ghdr;
int fd;
moncontrol(0);
fd = open("gmon.out", O_CREAT|O_TRUNC|O_WRONLY, 0666);
if (fd < 0)
{
perror("_mcleanup: gmon.out");
return;
}
/* write gmon.out header: */
bcopy(GMON_MAGIC, &ghdr.cookie[0], 4);
bcopy(&version, &ghdr.version, sizeof(version));
write(fd, &ghdr, sizeof(ghdr));
/* write PC histogram: */
write_hist(fd);
/* write call-graph: */
write_call_graph(fd);
/* write basic-block execution counts: */
write_bb_counts(fd);
close(fd);
}
+8 -1
View File
@@ -67,6 +67,7 @@ _MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */
#ifdef KERNEL
register int s;
#endif
int i;
p = &_gmonparam;
/*
@@ -89,7 +90,13 @@ _MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */
if (frompc > p->textsize)
goto done;
frompcindex = &p->froms[frompc / (p->hashfraction * sizeof(*p->froms))];
/* avoid integer divide if possible: */
if (p->log_hashfraction >= 0) {
i = frompc >> p->log_hashfraction;
} else {
i = frompc / (p->hashfraction * sizeof(*p->froms));
}
frompcindex = &p->froms[i];
toindex = *frompcindex;
if (toindex == 0) {
/*
+21 -12
View File
@@ -33,23 +33,31 @@
* @(#)gmon.h 8.2 (Berkeley) 1/4/94
*/
#ifndef _SYS_GMON_H_
#define _SYS_GMON_H_
#ifndef _SYS_GMON_H_
#include <sys/cdefs.h>
#define _SYS_GMON_H_ 1
#include <features.h>
#include <sys/types.h>
/*
* Structure prepended to gmon.out profiling data file.
* See gmon_out.h for gmon.out format.
*/
struct gmonhdr {
u_long lpc; /* base pc address of sample buffer */
u_long hpc; /* max pc address of sampled buffer */
int ncnt; /* size of sample buffer (plus this header) */
int version; /* version number */
int profrate; /* profiling clock rate */
int spare[3]; /* reserved */
/* structure emitted by "gcc -a". This must match struct bb in
gcc/libgcc2.c. It is OK for gcc to declare a longer structure as
long as the members below are present. */
struct __bb
{
long zero_word;
const char *filename;
long *counts;
long ncounts;
struct __bb *next;
const unsigned long *addresses;
};
#define GMONVERSION 0x00051879
extern struct __bb *__bb_head;
/*
* histogram counters are unsigned shorts (according to the kernel).
@@ -137,6 +145,7 @@ struct gmonparam {
u_long highpc;
u_long textsize;
u_long hashfraction;
long log_hashfraction;
};
extern struct gmonparam _gmonparam;
+66
View File
@@ -0,0 +1,66 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
Contributed by David Mosberger (davidm@cs.arizona.edu).
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */
/* This file specifies the format of gmon.out files. It should have
as few external dependencies as possible as it is going to be included
in many different programs. That is, minimize the number of #include's.
A gmon.out file consists of a header (defined by gmon_hdr) followed by
a sequence of records. Each record starts with a one-byte tag
identifying the type of records, followed by records specific data. */
#ifndef _SYS_GMON_OUT_H_
#define _SYS_GMON_OUT_H_
#define GMON_MAGIC "gmon" /* magic cookie */
#define GMON_VERSION 1 /* version number */
/*
* Raw header as it appears on file (without padding). This header
* always comes first in gmon.out and is then followed by a series
* records defined below.
*/
struct gmon_hdr {
char cookie[4];
char version[4];
char spare[3 * 4];
};
/* types of records in this file: */
typedef enum {
GMON_TAG_TIME_HIST = 0, GMON_TAG_CG_ARC = 1, GMON_TAG_BB_COUNT = 2
} GMON_Record_Tag;
struct gmon_hist_hdr {
char low_pc[sizeof (char *)]; /* base pc address of sample buffer */
char high_pc[sizeof (char *)]; /* max pc address of sampled buffer */
char hist_size[4]; /* size of sample buffer */
char prof_rate[4]; /* profiling clock rate */
char dimen[15]; /* phys. dim., usually "seconds" */
char dimen_abbrev; /* usually 's' for "seconds" */
};
struct gmon_cg_arc_record {
char from_pc[sizeof (char *)]; /* address within caller's body */
char self_pc[sizeof (char *)]; /* address within callee's body */
char count[4]; /* number of arc traversals */
};
#endif /* !_SYS_GMON_OUT_H_ */
-1
View File
@@ -1 +0,0 @@
#include <signal/gnu/signal.h>
-1
View File
@@ -1 +0,0 @@
#include <time/gnu/time.h>

Some files were not shown because too many files have changed in this diff Show More