1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-07 06:43:00 +03:00

update from main archvie 961022

Tue Oct 22 21:38:21 1996  Ulrich Drepper  <drepper@cygnus.com>

	* version.h: Bump version number to 1.97.

	* features.h: Undo change of Sun Oct 20 22:19:58 1996.
	Include libc-version.h.
	* features.h.in: Removed.
	* Makefile: Change rules to generate libc-version.h instead of
	features.h.

	* malloc/free.c: Add cast to prevent warning.
	* malloc/malloc-walk.c: Likewise.
	* malloc/ralloc.c: Likewise.
	* malloc/realloc.c: Likewise.

	* grp/fgetgrent_r.c: Accept empty numeric field if name start with +
	or -.
	* pwd/fgetpwent_r.c: Likewise.
	* nss/nss_files/files-grp.c: Don't accept entries with names starting
	with + or - in lookup functions.
	* nss/nss_files/files-pwd.c: Likewise.

	* Makerules: Call autolock.sh using $(SHELL).

Mon Oct 21 22:52:16 1996  NIIBE Yutaka  <gniibe@mri.co.jp>

	* elf/dl-minimal.c: Don't define `dgettext' replacement but
	`dcgettext'.  When optimizing the macros in <libintl.h> define
	`dgettext' as a macro and so this function will never be called.

Mon Oct 21 15:41:59 1996  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/i386/sysdep.h: Define END to use .size when available.
	(PSEUDO_END): Use END.
	* sysdeps/unix/sysv/linux/i386/sysdep.h: Define PSEUDO_END to
	define SYSCALL_ERROR_HANDLER before using END.
	(SYSCALL_ERROR_HANDLER): Don't use .size directive.
	* sysdeps/unix/sysv/linux/clone.S: Don't use SYSCALL_ERROR_HANDLER
	and .size directive but PSEUDO_END.
	* sysdeps/unix/sysv/linux/mmap.S: Likewise.
	* sysdeps/unix/sysv/linux/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/sysdep.S (__errno_location): Use END.
	* sysdeps/unix/i386/sysdep.S (__syscall_error): Likewise.
	* sysdeps/i386/__longjmp.S: Use END instead of PSEUDO_END.
	* sysdeps/i386/bsd-_setjmp.S: Likewise.
	* sysdeps/i386/bsd-setjmp.S: Likewise.
	* sysdeps/i386/memchr.S: Likewise.
	* sysdeps/i386/memcmp.S: Likewise.
	* sysdeps/i386/setjmp.S: Likewise.
	* sysdeps/i386/stpcpy.S: Likewise.
	* sysdeps/i386/stpncpy.S: Likewise.
	* sysdeps/i386/strchr.S: Likewise.
	* sysdeps/i386/strcspn.S: Likewise.
	* sysdeps/i386/strpbrk.S: Likewise.
	* sysdeps/i386/strrchr.S: Likewise.
	* sysdeps/i386/strspn.S: Likewise.
	* sysdeps/i386/strtok.S: Likewise.
	* sysdeps/i386/i486/strcat.S: Likewise.
	* sysdeps/i386/i486/strlen.S: Likewise.
	* sysdeps/i386/i586/memset.S: Likewise.
	* sysdeps/i386/i586/strchr.S: Likewise.
	* sysdeps/i386/i586/strlen.S: Likewise.

	* sysdeps/i386/strlen.c: De-ANSI-fy.

	* sysdeps/generic/_strerror.c: Undo change of Mon Oct 21 01:32:36 1996.
	Define dgettext if not defined to use dcgettext.
	* sysdeps/mach/_strerror.c: Likewise.

	* sysdeps/unix/sysv/i386/time.S: Add PSEUDO_END to get
 	__syscall_error defined..

Sat Oct 19 12:27:50 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/m68k/mmap.S: Fix braino: CALL_MCOUNT is
	already included in the ENTRY macro.  Remove SYSCALL_ERROR_HANDLER
	now provided by PSEUDO_END.
	* sysdeps/unix/sysv/linux/m68k/sigreturn.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/socket.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/syscall.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/clone.S: Likewise.  Use JUMPTARGET.

	* sysdeps/generic/sysdep.h (END): Provide default empty
	definition.
	* sysdeps/unix/sysv/linux/m68k/sysdep.h (END): Redefine to use
	size directive.
	(PSEUDO): Don't include SYSCALL_ERROR_HANDLER.
	(PSEUDO_END): Include it here instead.
	(SYSCALL_ERROR_HANDLER): Remove type directive.
	* sysdeps/m68k/bsd-_setjmp.S: Use END, not PSEUDO_END.
	* sysdeps/m68k/bsd-setjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/sigreturn.S: Likewise.
	* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
	(__syscall_error): Can't use ENTRY macro.

Sat Oct 19 12:13:24 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/unix/sysv/linux/syscalls.list (getresuid, setresuid):
	Set caller to EXTRA.

	O_SHLOCK.

Tue Oct 15 14:37:40 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* sysdeps/mach/hurd/fcntlbits.h (O_HURD): Add O_EXLOCK and
This commit is contained in:
Ulrich Drepper
1996-10-22 23:29:26 +00:00
parent 769e8a82da
commit 6ed0492f8e
53 changed files with 275 additions and 146 deletions

107
ChangeLog
View File

@@ -1,3 +1,105 @@
Tue Oct 22 21:38:21 1996 Ulrich Drepper <drepper@cygnus.com>
* version.h: Bump version number to 1.97.
* features.h: Undo change of Sun Oct 20 22:19:58 1996.
Include libc-version.h.
* features.h.in: Removed.
* Makefile: Change rules to generate libc-version.h instead of
features.h.
* malloc/free.c: Add cast to prevent warning.
* malloc/malloc-walk.c: Likewise.
* malloc/ralloc.c: Likewise.
* malloc/realloc.c: Likewise.
* grp/fgetgrent_r.c: Accept empty numeric field if name start with +
or -.
* pwd/fgetpwent_r.c: Likewise.
* nss/nss_files/files-grp.c: Don't accept entries with names starting
with + or - in lookup functions.
* nss/nss_files/files-pwd.c: Likewise.
* Makerules: Call autolock.sh using $(SHELL).
Mon Oct 21 22:52:16 1996 NIIBE Yutaka <gniibe@mri.co.jp>
* elf/dl-minimal.c: Don't define `dgettext' replacement but
`dcgettext'. When optimizing the macros in <libintl.h> define
`dgettext' as a macro and so this function will never be called.
Mon Oct 21 15:41:59 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/i386/sysdep.h: Define END to use .size when available.
(PSEUDO_END): Use END.
* sysdeps/unix/sysv/linux/i386/sysdep.h: Define PSEUDO_END to
define SYSCALL_ERROR_HANDLER before using END.
(SYSCALL_ERROR_HANDLER): Don't use .size directive.
* sysdeps/unix/sysv/linux/clone.S: Don't use SYSCALL_ERROR_HANDLER
and .size directive but PSEUDO_END.
* sysdeps/unix/sysv/linux/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/socket.S: Likewise.
* sysdeps/unix/sysv/linux/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/sysdep.S (__errno_location): Use END.
* sysdeps/unix/i386/sysdep.S (__syscall_error): Likewise.
* sysdeps/i386/__longjmp.S: Use END instead of PSEUDO_END.
* sysdeps/i386/bsd-_setjmp.S: Likewise.
* sysdeps/i386/bsd-setjmp.S: Likewise.
* sysdeps/i386/memchr.S: Likewise.
* sysdeps/i386/memcmp.S: Likewise.
* sysdeps/i386/setjmp.S: Likewise.
* sysdeps/i386/stpcpy.S: Likewise.
* sysdeps/i386/stpncpy.S: Likewise.
* sysdeps/i386/strchr.S: Likewise.
* sysdeps/i386/strcspn.S: Likewise.
* sysdeps/i386/strpbrk.S: Likewise.
* sysdeps/i386/strrchr.S: Likewise.
* sysdeps/i386/strspn.S: Likewise.
* sysdeps/i386/strtok.S: Likewise.
* sysdeps/i386/i486/strcat.S: Likewise.
* sysdeps/i386/i486/strlen.S: Likewise.
* sysdeps/i386/i586/memset.S: Likewise.
* sysdeps/i386/i586/strchr.S: Likewise.
* sysdeps/i386/i586/strlen.S: Likewise.
* sysdeps/i386/strlen.c: De-ANSI-fy.
* sysdeps/generic/_strerror.c: Undo change of Mon Oct 21 01:32:36 1996.
Define dgettext if not defined to use dcgettext.
* sysdeps/mach/_strerror.c: Likewise.
* sysdeps/unix/sysv/i386/time.S: Add PSEUDO_END to get
__syscall_error defined..
Sat Oct 19 12:27:50 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/mmap.S: Fix braino: CALL_MCOUNT is
already included in the ENTRY macro. Remove SYSCALL_ERROR_HANDLER
now provided by PSEUDO_END.
* sysdeps/unix/sysv/linux/m68k/sigreturn.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/socket.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/clone.S: Likewise. Use JUMPTARGET.
* sysdeps/generic/sysdep.h (END): Provide default empty
definition.
* sysdeps/unix/sysv/linux/m68k/sysdep.h (END): Redefine to use
size directive.
(PSEUDO): Don't include SYSCALL_ERROR_HANDLER.
(PSEUDO_END): Include it here instead.
(SYSCALL_ERROR_HANDLER): Remove type directive.
* sysdeps/m68k/bsd-_setjmp.S: Use END, not PSEUDO_END.
* sysdeps/m68k/bsd-setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sigreturn.S: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
(__syscall_error): Can't use ENTRY macro.
Sat Oct 19 12:13:24 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/syscalls.list (getresuid, setresuid):
Set caller to EXTRA.
Mon Oct 21 01:32:36 1996 Ulrich Drepper <drepper@cygnus.com> Mon Oct 21 01:32:36 1996 Ulrich Drepper <drepper@cygnus.com>
* elf/rtld.c (dl_main): Move initialization of `_dl_starting_up' * elf/rtld.c (dl_main): Move initialization of `_dl_starting_up'
@@ -263,6 +365,11 @@ Tue Oct 15 14:37:40 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* sysdeps/mach/hurd/fcntlbits.h (O_HURD): Add O_EXLOCK and * sysdeps/mach/hurd/fcntlbits.h (O_HURD): Add O_EXLOCK and
O_SHLOCK. O_SHLOCK.
Tue Oct 15 14:37:40 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* sysdeps/mach/hurd/fcntlbits.h (O_HURD): Add O_EXLOCK and
O_SHLOCK.
Sun Oct 13 19:16:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> Sun Oct 13 19:16:10 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
* sysdeps/unix/sysv/linux/m68k/sysdep.h (POUND): Macro removed, * sysdeps/unix/sysv/linux/m68k/sysdep.h (POUND): Macro removed,

View File

@@ -82,9 +82,9 @@ subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \
$(addprefix install-, no-libc.a bin lib data headers others) $(addprefix install-, no-libc.a bin lib data headers others)
headers := errno.h sys/errno.h errnos.h limits.h values.h \ headers := errno.h sys/errno.h errnos.h limits.h values.h \
features.h gnu-versions.h libc-lock.h features.h gnu-versions.h libc-lock.h libc-version.h
aux = sysdep $(libc-init) version aux = sysdep $(libc-init) version
before-compile = $(objpfx)version-info.h $(objpfx)features.h before-compile = $(objpfx)version-info.h $(objpfx)libc-version.h
echo-headers: subdir_echo-headers echo-headers: subdir_echo-headers
@@ -145,28 +145,42 @@ $(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files)
echo "\"Available extensions:"; \ echo "\"Available extensions:"; \
sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \ sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \
echo "\""; \ echo "\""; \
fi) > $@-tmp fi) > $@T
mv -f $@-tmp $@ mv -f $@T $@
generated += version-info.h
version.c-objects := $(addprefix $(objpfx)version,$(object-suffixes)) version.c-objects := $(addprefix $(objpfx)version,$(object-suffixes))
$(version.c-objects): $(objpfx)version-info.h $(version.c-objects): $(objpfx)version-info.h
$(objpfx)features.h: features.h.in Makefile $(common-objpfx)soversions.mk $(objpfx)libc-version.h: Makefile $(common-objpfx)soversions.mk \
$(common-objpfx)version.mk
nr="$(libc.so-version)"; \ nr="$(libc.so-version)"; \
lnr=`echo $(version) | sed 's/[.].*//'`; \
lmnr=`echo $(version) | sed 's/[^.]*[.]//'`; \
if test -n $$nr; then \ if test -n $$nr; then \
nr=`echo $$nr | sed 's/^[.]//'`; \ nr=`echo $$nr | sed 's/^[.]\([0-9]*\).*/\1/'`; \
tmpfile=$${TMPDIR:-/tmp}/sedtmp.$$$$; \
rm -f $$tmpfile; \
(echo '/^INTERFACENUMBER/ { i\'; \
echo '/* Interface number of the shared library. */\'; \
echo "#define __GNU_LIBRARY_INTERFACE__ $$nr"; \
echo ' s/^INTERFACENUMBER//'; \
echo '}') > $$tmpfile; \
sed -f $$tmpfile < $< > $@; \
rm -f $$tmpfile; \
else \ else \
sed -e '/^INTERFACENUMBER/d' < $< > $@; \ nr="$$lnr"; \
fi fi; \
rm -f $@T; \
(echo '#ifndef __LIBC_VERSION_H'; \
echo '#define __LIBC_VERSION_H 1'; \
echo; \
if test -n "$(libc.so-version)"; then \
echo '/* Show that this is the GNU C Library. The value is the'; \
echo ' interface number of the shared library. */'; \
else \
echo '/* Show that this is the GNU C Library. */'; \
fi; \
echo "#define __GNU_LIBRARY__ $$nr"; \
echo; \
echo '/* Version numbers for GNU libc release. */'; \
echo "#define __GLIBC__ $$lnr"; \
echo "#define __GLIBC_MINOR__ $$lmnr"; \
echo; \
echo '#endif /* libc-version.h */') > $@T
mv -f $@T $@
generated += libc-version.h
# Makerules creates a file `stub-$(subdir)' for each subdirectory, which # Makerules creates a file `stub-$(subdir)' for each subdirectory, which
# contains `#define __stub_FUNCTION' for each function which is a stub. # contains `#define __stub_FUNCTION' for each function which is a stub.

View File

@@ -492,8 +492,8 @@ include $(o-iterator)
define do-ar define do-ar
topdir=`cd $(..).; pwd`; \ topdir=`cd $(..).; pwd`; \
$(patsubst %/,cd %;,$(objpfx)) \ $(patsubst %/,cd %;,$(objpfx)) \
$$topdir/autolock.sh ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \ $(SHELL) $$topdir/autolock.sh ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \
$(patsubst $(objpfx)%,%,$^) $(patsubst $(objpfx)%,%,$^)
rm -f $@ rm -f $@
touch $@ touch $@
endef endef
@@ -507,7 +507,7 @@ define o-iterator-doit
$(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \ $(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \
$(common-objpfx)$(patsubst %,$(libtype$o),c)(\ $(common-objpfx)$(patsubst %,$(libtype$o),c)(\
$(patsubst $(objpfx)%,%,$(o-objects))) $(subdirs-stamp-o); \ $(patsubst $(objpfx)%,%,$(o-objects))) $(subdirs-stamp-o); \
$$(..)./autolock.sh \ $(SHELL) $$(..)./autolock.sh \
$$(common-objpfx)$$(patsubst %,$$(libtype$o),c).lck \ $$(common-objpfx)$$(patsubst %,$$(libtype$o),c).lck \
$$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c) $$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
endef endef

View File

@@ -113,12 +113,12 @@ longjmp (jmp_buf env, int val) { __longjmp (env[0].__jmpbuf, val); }
English-only in the dynamic linker keeps it smaller. */ English-only in the dynamic linker keeps it smaller. */
char * weak_function char * weak_function
__dgettext (const char *domainname, const char *msgid) __dcgettext (const char *domainname, const char *msgid, int category)
{ {
assert (domainname == _libc_intl_domainname); assert (domainname == _libc_intl_domainname);
return (char *) msgid; return (char *) msgid;
} }
weak_alias (__dgettext, dgettext) weak_alias (__dcgettext, dcgettext)
#ifndef NDEBUG #ifndef NDEBUG

View File

@@ -144,14 +144,8 @@ Cambridge, MA 02139, USA. */
#endif #endif
/* This macro indicates that the installed library is the GNU C Library. /* Include header with information of libc version numbers. */
Its value must be incremented whenever any existing library interface #include <libc-version.h>
changes such that callers must be recompiled with the new header files.
This value should always coincide with the major version number used for
the shared C library corresponding to this set of header files. */
#undef __GNU_LIBRARY__
#define __GNU_LIBRARY__ 6
#if !defined (__GNUC__) || __GNUC__ < 2 #if !defined (__GNUC__) || __GNUC__ < 2
@@ -180,4 +174,4 @@ Cambridge, MA 02139, USA. */
#include <stubs.h> #include <stubs.h>
#endif #endif
#endif /* __features.h */ #endif /* features.h */

View File

@@ -34,7 +34,10 @@ LINE_PARSER
(, (,
STRING_FIELD (result->gr_name, ISCOLON, 0); STRING_FIELD (result->gr_name, ISCOLON, 0);
STRING_FIELD (result->gr_passwd, ISCOLON, 0); STRING_FIELD (result->gr_passwd, ISCOLON, 0);
INT_FIELD (result->gr_gid, ISCOLON, 0, 10,); if (result->gr_name[0] == '+' || result->gr_name[0] == '-')
INT_FIELD_MAYBE_NULL (result->gr_gid, ISCOLON, 0, 10, , 0)
else
INT_FIELD (result->gr_gid, ISCOLON, 0, 10,)
) )

View File

@@ -32,12 +32,14 @@ struct grent_data {};
DB_LOOKUP (grnam, 1 + strlen (name), (".%s", name), DB_LOOKUP (grnam, 1 + strlen (name), (".%s", name),
{ {
if (! strcmp (name, result->gr_name)) if (name[0] != '-' && name[0] != '+'
&& ! strcmp (name, result->gr_name))
break; break;
}, const char *name) }, const char *name)
DB_LOOKUP (grgid, 20, ("=%lu", (unsigned long int) gid), DB_LOOKUP (grgid, 20, ("=%lu", (unsigned long int) gid),
{ {
if (result->gr_gid == gid) if (result->gr_gid == gid && result->gr_name[0] != '+'
&& result->gr_name[0] != '-')
break; break;
}, gid_t gid) }, gid_t gid)

View File

@@ -32,12 +32,14 @@ struct pwent_data {};
DB_LOOKUP (pwnam, 1 + strlen (name), (".%s", name), DB_LOOKUP (pwnam, 1 + strlen (name), (".%s", name),
{ {
if (! strcmp (name, result->pw_name)) if (name[0] != '+' && name[0] != '-'
&& ! strcmp (name, result->pw_name))
break; break;
}, const char *name) }, const char *name)
DB_LOOKUP (pwuid, 20, ("=%lu", (unsigned long int) uid), DB_LOOKUP (pwuid, 20, ("=%lu", (unsigned long int) uid),
{ {
if (result->pw_uid == uid) if (result->pw_uid == uid && result->pw_name[0] != '+'
&& result->pw_name[0] != '-')
break; break;
}, uid_t uid) }, uid_t uid)

View File

@@ -32,8 +32,16 @@ LINE_PARSER
(, (,
STRING_FIELD (result->pw_name, ISCOLON, 0); STRING_FIELD (result->pw_name, ISCOLON, 0);
STRING_FIELD (result->pw_passwd, ISCOLON, 0); STRING_FIELD (result->pw_passwd, ISCOLON, 0);
INT_FIELD (result->pw_uid, ISCOLON, 0, 10,); if (result->pw_name[0] == '+' || result->pw_name[0] == '-')
INT_FIELD (result->pw_gid, ISCOLON, 0, 10,); {
INT_FIELD_MAYBE_NULL (result->pw_uid, ISCOLON, 0, 10, , 0)
INT_FIELD_MAYBE_NULL (result->pw_gid, ISCOLON, 0, 10, , 0)
}
else
{
INT_FIELD (result->pw_uid, ISCOLON, 0, 10,)
INT_FIELD (result->pw_gid, ISCOLON, 0, 10,)
}
STRING_FIELD (result->pw_gecos, ISCOLON, 0); STRING_FIELD (result->pw_gecos, ISCOLON, 0);
STRING_FIELD (result->pw_dir, ISCOLON, 0); STRING_FIELD (result->pw_dir, ISCOLON, 0);
result->pw_shell = line; result->pw_shell = line;

View File

@@ -26,19 +26,22 @@ Cambridge, MA 02139, USA. */
#define _sys_nerr sys_nerr #define _sys_nerr sys_nerr
#endif #endif
/* Set if startup process finished. */ /* It is critical here that we always use the `dcgettext' function for
extern int _dl_starting_up; the message translation. Since <libintl.h> only defines the macro
`dgettext' to use `dcgettext' for optimizing programs this is not
always guaranteed. */
#ifndef dgettext
# include <locale.h> /* We need LC_MESSAGES. */
# define dgettext(domainname, msgid) dcgettext (domainname, msgid, LC_MESSAGES)
#endif
/* Return a string describing the errno code in ERRNUM. */ /* Return a string describing the errno code in ERRNUM. */
char * char *
_strerror_internal (int errnum, _strerror_internal (int errnum, char *buf, size_t buflen)
char *buf,
size_t buflen)
{ {
if (errnum < 0 || errnum >= _sys_nerr) if (errnum < 0 || errnum >= _sys_nerr)
{ {
static const char unk_orig[] = N_("Unknown error "); const char *unk = _("Unknown error ");
const char *unk = _dl_starting_up ? unk_orig : _(unk_orig);
const size_t unklen = strlen (unk); const size_t unklen = strlen (unk);
char *p = buf + buflen; char *p = buf + buflen;
*--p = '\0'; *--p = '\0';
@@ -46,6 +49,5 @@ _strerror_internal (int errnum,
return memcpy (p - unklen, unk, unklen); return memcpy (p - unklen, unk, unklen);
} }
return (char *) (_dl_starting_up ? _sys_errlist[errnum] return (char *) _(_sys_errlist[errnum]);
: _(_sys_errlist[errnum]));
} }

View File

@@ -35,3 +35,7 @@ Cambridge, MA 02139, USA. */
#endif #endif
#endif #endif
/* Mark the end of function named SYM. This is used on some platforms
to generate correct debugging information. */
#define END(sym)

View File

@@ -33,4 +33,4 @@ ENTRY (__longjmp)
/* Jump to saved PC. */ /* Jump to saved PC. */
movl (JB_PC*4)(%ecx), %ecx movl (JB_PC*4)(%ecx), %ecx
jmp *%ecx jmp *%ecx
PSEUDO_END (__longjmp) END (__longjmp)

View File

@@ -30,4 +30,4 @@ ENTRY (_setjmp)
pushl %ecx /* Push back first argument. */ pushl %ecx /* Push back first argument. */
pushl %eax /* Push back return PC. */ pushl %eax /* Push back return PC. */
jmp JUMPTARGET (C_SYMBOL_NAME (__sigsetjmp)) jmp JUMPTARGET (C_SYMBOL_NAME (__sigsetjmp))
PSEUDO_END (_setjmp) END (_setjmp)

View File

@@ -30,4 +30,4 @@ ENTRY (setjmp)
pushl %ecx /* Push back first argument. */ pushl %ecx /* Push back first argument. */
pushl %eax /* Push back return PC. */ pushl %eax /* Push back return PC. */
jmp JUMPTARGET (C_SYMBOL_NAME (__sigsetjmp)) jmp JUMPTARGET (C_SYMBOL_NAME (__sigsetjmp))
PSEUDO_END (setjmp) END (setjmp)

View File

@@ -258,4 +258,4 @@ L8: movl 8(%esp), %eax /* start address of destination is result */
popl %edi /* restore saved register */ popl %edi /* restore saved register */
ret ret
PSEUDO_END (strcat) END (strcat)

View File

@@ -130,4 +130,4 @@ L3: testb %cl, %cl /* is first byte NUL? */
L2: subl 4(%esp), %eax /* compute difference to string start */ L2: subl 4(%esp), %eax /* compute difference to string start */
ret ret
PSEUDO_END (strlen) END (strlen)

View File

@@ -99,4 +99,4 @@ L2: shrl $2, %ecx /* convert byte count to longword count */
popl %edi popl %edi
ret ret
PSEUDO_END (memset) END (memset)

View File

@@ -326,7 +326,7 @@ L3: xorl %eax, %eax /* set return value = NULL */
popl %edi popl %edi
ret ret
PSEUDO_END (strchr) END (strchr)
#undef index #undef index
weak_alias (strchr, index) weak_alias (strchr, index)

View File

@@ -180,4 +180,4 @@ L2: subl 4(%esp), %eax /* now compute the length as difference
character */ character */
ret ret
PSEUDO_END (strlen) END (strlen)

View File

@@ -313,4 +313,4 @@ L9: popl %edi /* pop saved registers */
popl %esi popl %esi
ret ret
PSEUDO_END (memchr) END (memchr)

View File

@@ -63,7 +63,7 @@ L1: popl %esi /* Restore registers. */
movl %edx, %edi movl %edx, %edi
ret ret
PSEUDO_END (memcmp) END (memcmp)
#undef bcmp #undef bcmp
weak_alias (memcmp, bcmp) weak_alias (memcmp, bcmp)

View File

@@ -53,4 +53,4 @@ here: popl %ecx
#else #else
jmp __sigjmp_save jmp __sigjmp_save
#endif #endif
PSEUDO_END (__sigsetjmp) END (__sigsetjmp)

View File

@@ -83,6 +83,6 @@ L4: incl %eax
L3: incl %eax L3: incl %eax
L2: L2:
ret ret
PSEUDO_END (__stpcpy) END (__stpcpy)
weak_alias (__stpcpy, stpcpy) weak_alias (__stpcpy, stpcpy)

View File

@@ -139,6 +139,6 @@ L3: decl %ecx /* all bytes written? */
L9: popl %esi /* restore saved register content */ L9: popl %esi /* restore saved register content */
ret ret
PSEUDO_END (__stpncpy) END (__stpncpy)
weak_alias (__stpncpy, stpncpy) weak_alias (__stpncpy, stpncpy)

View File

@@ -274,6 +274,6 @@ L7: testb %cl, %cl /* is first byte C? */
L6: popl %edi /* restore saved register content */ L6: popl %edi /* restore saved register content */
ret ret
PSEUDO_END (strchr) END (strchr)
weak_alias (strchr, index) weak_alias (strchr, index)

View File

@@ -174,4 +174,4 @@ L4: subl %edx, %eax /* we have to return the number of valid
addl $256, %esp /* remove stopset */ addl $256, %esp /* remove stopset */
ret ret
PSEUDO_END (strcspn) END (strcspn)

View File

@@ -1,6 +1,6 @@
/* strlen -- determine the length of a string. /* strlen -- determine the length of a string.
For Intel 80x86, x>=3. For Intel 80x86, x>=3.
Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc. Copyright (C) 1991, 1992, 1993, 1996 Free Software Foundation, Inc.
Contributed by Torbjorn Granlund (tege@sics.se). Contributed by Torbjorn Granlund (tege@sics.se).
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@@ -18,11 +18,10 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <string.h> #include <string.h>
size_t size_t
DEFUN(strlen, (str), CONST char *str) strlen (const char *str)
{ {
int cnt; int cnt;

View File

@@ -175,4 +175,4 @@ L4: addl $256, %esp /* remove stopset */
xorl %eax, %eax /* return NULL */ xorl %eax, %eax /* return NULL */
L7: ret L7: ret
PSEUDO_END (strpbrk) END (strpbrk)

View File

@@ -321,6 +321,6 @@ L2: popl %esi /* restore saved register content */
popl %edi popl %edi
ret ret
PSEUDO_END (strrchr) END (strrchr)
weak_alias (strrchr, rindex) weak_alias (strrchr, rindex)

View File

@@ -174,4 +174,4 @@ L4: subl %edx, %eax /* we have to return the number of valid
addl $256, %esp /* remove stopset */ addl $256, %esp /* remove stopset */
ret ret
PSEUDO_END (strspn) END (strspn)

View File

@@ -282,4 +282,4 @@ LreturnNULL:
# endif # endif
#endif #endif
ret ret
PSEUDO_END (FUNCTION) END (FUNCTION)

View File

@@ -52,6 +52,10 @@ Cambridge, MA 02139, USA. */
C_LABEL(name) \ C_LABEL(name) \
CALL_MCOUNT CALL_MCOUNT
#undef END
#define END(name) \
ASM_SIZE_DIRECTIVE(name)
/* If compiled for profiling, call `mcount' at the start of each function. */ /* If compiled for profiling, call `mcount' at the start of each function. */
#ifdef PROF #ifdef PROF
/* The mcount code relies on a normal frame pointer being on the stack /* The mcount code relies on a normal frame pointer being on the stack
@@ -80,7 +84,7 @@ lose: SYSCALL_PIC_SETUP \
#undef PSEUDO_END #undef PSEUDO_END
#define PSEUDO_END(name) \ #define PSEUDO_END(name) \
ASM_SIZE_DIRECTIVE(name) END (name)
#ifdef PIC #ifdef PIC
#define JUMPTARGET(name) name##@PLT #define JUMPTARGET(name) name##@PLT

View File

@@ -46,4 +46,4 @@ ENTRY (_setjmp)
#else #else
jmp C_SYMBOL_NAME (__sigsetjmp) jmp C_SYMBOL_NAME (__sigsetjmp)
#endif #endif
PSEUDO_END (_setjmp) END (_setjmp)

View File

@@ -44,4 +44,4 @@ ENTRY (setjmp)
#else #else
jmp C_SYMBOL_NAME (__sigsetjmp) jmp C_SYMBOL_NAME (__sigsetjmp)
#endif #endif
PSEUDO_END (setjmp) END (setjmp)

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. /* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@@ -22,6 +22,15 @@ Cambridge, MA 02139, USA. */
#include <errorlib.h> #include <errorlib.h>
#include "../stdio-common/_itoa.h" #include "../stdio-common/_itoa.h"
/* It is critical here that we always use the `dcgettext' function for
the message translation. Since <libintl.h> only defines the macro
`dgettext' to use `dcgettext' for optimizing programs this is not
always guaranteed. */
#ifndef dgettext
# include <locale.h> /* We need LC_MESSAGES. */
# define dgettext(domainname, msgid) dcgettext (domainname, msgid, LC_MESSAGES)
#endif
/* Return a string describing the errno code in ERRNUM. */ /* Return a string describing the errno code in ERRNUM. */
char * char *
_strerror_internal (int errnum, char *buf, size_t buflen) _strerror_internal (int errnum, char *buf, size_t buflen)

View File

@@ -50,7 +50,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <netinet6/in6.h> #include <netinet6/in6.h>
#endif /* INET6 */ #endif /* INET6 */
#include <netdb.h> #include <netdb.h>
#include <arpa/inet.h>
#include <string.h>
#define GAIH_OKIFUNSPEC 0x0100 #define GAIH_OKIFUNSPEC 0x0100
#define GAIH_EAI ~(GAIH_OKIFUNSPEC) #define GAIH_EAI ~(GAIH_OKIFUNSPEC)
@@ -90,7 +91,7 @@ static struct gaih_addrtuple nulladdr;
struct gaih_typeproto { struct gaih_typeproto {
int socktype; int socktype;
int protocol; int protocol;
char *name; const char *name;
}; };
static struct gaih_typeproto gaih_inet_typeproto[] = { static struct gaih_typeproto gaih_inet_typeproto[] = {
@@ -121,7 +122,6 @@ static int gaih_inet_serv(char *servicename, struct gaih_typeproto *tp, struct g
static int gaih_inet(const char *name, const struct gaih_service *service, static int gaih_inet(const char *name, const struct gaih_service *service,
const struct addrinfo *req, struct addrinfo **pai) const struct addrinfo *req, struct addrinfo **pai)
{ {
struct hostent *h = NULL;
struct gaih_typeproto *tp = gaih_inet_typeproto; struct gaih_typeproto *tp = gaih_inet_typeproto;
struct gaih_servtuple *st = &nullserv; struct gaih_servtuple *st = &nullserv;
struct gaih_addrtuple *at = &nulladdr; struct gaih_addrtuple *at = &nulladdr;
@@ -412,7 +412,8 @@ static struct gaih gaih[] = {
int getaddrinfo(const char *name, const char *service, int getaddrinfo(const char *name, const char *service,
const struct addrinfo *req, struct addrinfo **pai) const struct addrinfo *req, struct addrinfo **pai)
{ {
int i, j = 0; int i = 0;
int j = 0;
struct addrinfo *p = NULL, **end = &p; struct addrinfo *p = NULL, **end = &p;
struct gaih *g = gaih, *pg = NULL; struct gaih *g = gaih, *pg = NULL;
struct gaih_service gaih_service, *pservice; struct gaih_service gaih_service, *pservice;
@@ -446,7 +447,7 @@ int getaddrinfo(const char *name, const char *service,
j++; j++;
if (!((pg && (pg->gaih == g->gaih)))) { if (!((pg && (pg->gaih == g->gaih)))) {
pg = g; pg = g;
if (i = g->gaih(name, pservice, req, end)) { if ((i = g->gaih(name, pservice, req, end))) {
if (!req->ai_family && (i & GAIH_OKIFUNSPEC)) if (!req->ai_family && (i & GAIH_OKIFUNSPEC))
continue; continue;
goto gaih_err; goto gaih_err;

View File

@@ -68,8 +68,5 @@ notb:
movl $-1, %eax movl $-1, %eax
ret ret
#ifdef __ELF__
#undef __syscall_error #undef __syscall_error
.Lfe2: END (__syscall_error)
.size __syscall_error, .Lfe2-__syscall_error
#endif

View File

@@ -1,4 +1,4 @@
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc. /* Copyright (C) 1991, 1992, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@@ -24,3 +24,4 @@ SYSCALL (time, 1)
je null je null
movl %eax, (%edx) /* Yes; store the time there. */ movl %eax, (%edx) /* Yes; store the time there. */
null: ret null: ret
PSEUDO_END (time)

View File

@@ -66,9 +66,6 @@ ENTRY(__clone)
jz thread_start jz thread_start
ret ret
PSEUDO_END (__clone)
SYSCALL_ERROR_HANDLER
thread_start: thread_start:
subl %ebp,%ebp /* terminate the stack frame */ subl %ebp,%ebp /* terminate the stack frame */
@@ -76,4 +73,6 @@ thread_start:
pushl %eax pushl %eax
call JUMPTARGET (_exit) call JUMPTARGET (_exit)
weak_alias(__clone, clone) PSEUDO_END (__clone)
weak_alias (__clone, clone)

View File

@@ -19,7 +19,6 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
.text .text
SYSCALL_ERROR_HANDLER
ENTRY (__mmap) ENTRY (__mmap)
@@ -42,6 +41,7 @@ ENTRY (__mmap)
/* Successful; return the syscall's value. */ /* Successful; return the syscall's value. */
ret ret
.size __mmap,.-__mmap
PSEUDO_END (__mmap)
weak_alias (__mmap, mmap) weak_alias (__mmap, mmap)

View File

@@ -23,8 +23,6 @@ Cambridge, MA 02139, USA. */
#define P2(a, b) a##b #define P2(a, b) a##b
.text .text
SYSCALL_ERROR_HANDLER
/* The socket-oriented system calls are handled unusally in Linux. /* The socket-oriented system calls are handled unusally in Linux.
They are all gated through the single `socketcall' system call number. They are all gated through the single `socketcall' system call number.
`socketcall' takes two arguments: the first is the subcode, specifying `socketcall' takes two arguments: the first is the subcode, specifying
@@ -52,11 +50,12 @@ ENTRY (P(__,socket))
movl %edx, %ebx movl %edx, %ebx
/* %eax is < 0 if there was an error. */ /* %eax is < 0 if there was an error. */
testl %eax, %eax cmpl $-125, %eax
jl syscall_error jae syscall_error
/* Successful; return the syscall's value. */ /* Successful; return the syscall's value. */
ret ret
.size P(__,socket),.-P(__,socket)
PSEUDO_END (P(__,socket))
weak_alias (P(__,socket), socket) weak_alias (P(__,socket), socket)

View File

@@ -22,8 +22,8 @@ Cambridge, MA 02139, USA. */
more information about the value -125 used below.*/ more information about the value -125 used below.*/
.text .text
SYSCALL_ERROR_HANDLER /* Define error handler for PIC. */
ENTRY (syscall) ENTRY (syscall)
PUSHARGS_5 /* Save register contents. */ PUSHARGS_5 /* Save register contents. */
_DOARGS_5(36) /* Load arguments. */ _DOARGS_5(36) /* Load arguments. */
movl 16(%esp), %eax /* Load syscall number into %eax. */ movl 16(%esp), %eax /* Load syscall number into %eax. */
@@ -32,4 +32,5 @@ ENTRY (syscall)
cmpl $-125, %eax /* Check %eax for error. */ cmpl $-125, %eax /* Check %eax for error. */
jae syscall_error /* Jump to error handler if error. */ jae syscall_error /* Jump to error handler if error. */
ret /* Return to caller. */ ret /* Return to caller. */
.size syscall,.-syscall
PSEUDO_END (syscall)

View File

@@ -67,4 +67,4 @@ ENTRY (__errno_location)
movl $errno, %eax movl $errno, %eax
#endif #endif
ret ret
.size __errno_location, .-__errno_location END (__errno_location)

View File

@@ -28,11 +28,7 @@ Cambridge, MA 02139, USA. */
of the kernel. But these symbols do not follow the SYS_* syntax of the kernel. But these symbols do not follow the SYS_* syntax
so we have to redefine the `SYS_ify' macro here. */ so we have to redefine the `SYS_ify' macro here. */
#undef SYS_ify #undef SYS_ify
#ifdef __STDC__ #define SYS_ify(syscall_name) __NR_##syscall_name
# define SYS_ify(syscall_name) __NR_##syscall_name
#else
# define SYS_ify(syscall_name) __NR_/**/syscall_name
#endif
#ifdef ASSEMBLER #ifdef ASSEMBLER
@@ -51,19 +47,22 @@ Cambridge, MA 02139, USA. */
#undef PSEUDO #undef PSEUDO
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
.text; \ .text; \
SYSCALL_ERROR_HANDLER \
ENTRY (name) \ ENTRY (name) \
DO_CALL (args, syscall_name); \ DO_CALL (args, syscall_name); \
cmpl $-125, %eax; \ cmpl $-125, %eax; \
jae syscall_error; jae syscall_error;
#undef PSEUDO_END
#define PSEUDO_END(name) \
SYSCALL_ERROR_HANDLER \
END (name)
#ifndef PIC #ifndef PIC
#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ #define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */
#else #else
/* Store (- %eax) into errno through the GOT. */ /* Store (- %eax) into errno through the GOT. */
#ifdef _LIBC_REENTRANT #ifdef _LIBC_REENTRANT
#define SYSCALL_ERROR_HANDLER \ #define SYSCALL_ERROR_HANDLER \
.type syscall_error,@function; \
syscall_error: \ syscall_error: \
pushl %ebx; \ pushl %ebx; \
call 0f; \ call 0f; \
@@ -79,13 +78,11 @@ syscall_error: \
popl %ebx; \ popl %ebx; \
movl %ecx, (%eax); \ movl %ecx, (%eax); \
movl $-1, %eax; \ movl $-1, %eax; \
ret; \ ret;
.size syscall_error,.-syscall-error;
/* A quick note: it is assumed that the call to `__errno_location' does /* A quick note: it is assumed that the call to `__errno_location' does
not modify the stack! */ not modify the stack! */
#else #else
#define SYSCALL_ERROR_HANDLER \ #define SYSCALL_ERROR_HANDLER \
.type syscall_error,@function; \
syscall_error: \ syscall_error: \
call 0f; \ call 0f; \
0:popl %ecx; \ 0:popl %ecx; \
@@ -95,8 +92,7 @@ syscall_error: \
movl errno@GOT(%ecx), %ecx; \ movl errno@GOT(%ecx), %ecx; \
movl %edx, (%ecx); \ movl %edx, (%ecx); \
movl $-1, %eax; \ movl $-1, %eax; \
ret; \ ret;
.size syscall_error,.-syscall-error;
#endif /* _LIBC_REENTRANT */ #endif /* _LIBC_REENTRANT */
#endif /* PIC */ #endif /* PIC */
@@ -121,7 +117,7 @@ syscall_error: \
(Of course a function with say 3 arguments does not have entries for (Of course a function with say 3 arguments does not have entries for
arguments 4 and 5.) arguments 4 and 5.)
The following code tries hard to be optimal. A general assuption The following code tries hard to be optimal. A general assumption
(which is true according to the data books I have) is that (which is true according to the data books I have) is that
2 * xchg is more expensive than pushl + movl + popl 2 * xchg is more expensive than pushl + movl + popl
@@ -136,7 +132,7 @@ syscall_error: \
(2 * movl is less expensive than pushl + popl). (2 * movl is less expensive than pushl + popl).
Second unlike for the other registers we don't save the content of Second unlike for the other registers we don't save the content of
%ecx and %edx when we have than 1 and 2 registers resp. %ecx and %edx when we have more than 1 and 2 registers resp.
The code below might look a bit long but we have to take care for The code below might look a bit long but we have to take care for
the pipelined processors (i586 and up). Here the `pushl' and `popl' the pipelined processors (i586 and up). Here the `pushl' and `popl'

View File

@@ -27,7 +27,6 @@ Cambridge, MA 02139, USA. */
.text .text
ENTRY (__clone) ENTRY (__clone)
CALL_MCOUNT
/* Sanity check arguments. */ /* Sanity check arguments. */
movel #-EINVAL, %d0 movel #-EINVAL, %d0
@@ -63,17 +62,12 @@ ENTRY (__clone)
rts rts
SYSCALL_ERROR_HANDLER
thread_start: thread_start:
subl %fp, %fp /* terminate the stack frame */ subl %fp, %fp /* terminate the stack frame */
jsr (%a0) jsr (%a0)
movel %d0, -(%sp) movel %d0, -(%sp)
#ifdef PIC jbsr JUMPTARGET (_exit)
bsrl _exit@PLTPC
#else
jbsr _exit
#endif
PSEUDO_END (__clone) PSEUDO_END (__clone)
weak_alias (__clone, clone) weak_alias (__clone, clone)

View File

@@ -19,10 +19,7 @@ Cambridge, MA 02139, USA. */
#include <sysdep.h> #include <sysdep.h>
.text .text
SYSCALL_ERROR_HANDLER
ENTRY (__mmap) ENTRY (__mmap)
CALL_MCOUNT
move.l #SYS_ify (mmap), %d0 /* System call number in %d0. */ move.l #SYS_ify (mmap), %d0 /* System call number in %d0. */

View File

@@ -20,12 +20,10 @@ Cambridge, MA 02139, USA. */
.text .text
ENTRY (__sigreturn) ENTRY (__sigreturn)
CALL_MCOUNT
addq.l #4, %sp /* Pop the return PC. */ addq.l #4, %sp /* Pop the return PC. */
DO_CALL (#SYS_ify (sigreturn), 0) DO_CALL (#SYS_ify (sigreturn), 0)
/* Do the system call; it never returns. */ /* Do the system call; it never returns. */
/* NOTREACHED */ /* NOTREACHED */
PSEUDO_END (__sigreturn) END (__sigreturn)
weak_alias (__sigreturn, sigreturn) weak_alias (__sigreturn, sigreturn)

View File

@@ -23,8 +23,6 @@ Cambridge, MA 02139, USA. */
#define P2(a, b) a##b #define P2(a, b) a##b
.text .text
SYSCALL_ERROR_HANDLER
/* The socket-oriented system calls are handled unusally in Linux. /* The socket-oriented system calls are handled unusally in Linux.
They are all gated through the single `socketcall' system call number. They are all gated through the single `socketcall' system call number.
`socketcall' takes two arguments: the first is the subcode, specifying `socketcall' takes two arguments: the first is the subcode, specifying
@@ -35,7 +33,6 @@ Cambridge, MA 02139, USA. */
.globl P(__,socket) .globl P(__,socket)
ENTRY (P(__,socket)) ENTRY (P(__,socket))
CALL_MCOUNT
/* Save registers. */ /* Save registers. */
move.l %d2, %a0 move.l %d2, %a0

View File

@@ -22,10 +22,7 @@ Cambridge, MA 02139, USA. */
more information about the value -128 used below.*/ more information about the value -128 used below.*/
.text .text
SYSCALL_ERROR_HANDLER
ENTRY (syscall) ENTRY (syscall)
CALL_MCOUNT
move.l 4(%sp), %d0 /* Load syscall number. */ move.l 4(%sp), %d0 /* Load syscall number. */
_DOARGS_5 (24) /* Frob arguments. */ _DOARGS_5 (24) /* Frob arguments. */
trap &0 /* Do the system call. */ trap &0 /* Do the system call. */

View File

@@ -46,7 +46,10 @@ __errno = errno /* This name is expected by the MT code. */
/* The syscall stubs jump here when they detect an error. */ /* The syscall stubs jump here when they detect an error. */
ENTRY (__syscall_error) .globl __syscall_error
.type __syscall_error, @function
.align 4
__syscall_error:
neg.l %d0 neg.l %d0
move.l %d0, errno move.l %d0, errno
#ifdef _LIBC_REENTRANT #ifdef _LIBC_REENTRANT
@@ -59,15 +62,14 @@ ENTRY (__syscall_error)
return a pointer. */ return a pointer. */
move.l %d0, %a0 move.l %d0, %a0
rts rts
PSEUDO_END (__syscall_error) END (__syscall_error)
#endif /* PIC */ #endif /* PIC */
ENTRY (__errno_location) ENTRY (__errno_location)
CALL_MCOUNT
#ifdef PIC #ifdef PIC
move.l (%pc, errno@GOTPC), %a0 move.l (%pc, errno@GOTPC), %a0
#else #else
lea errno, %a0 lea errno, %a0
#endif #endif
rts rts
PSEUDO_END (__errno_location) END (__errno_location)

View File

@@ -41,6 +41,9 @@ Cambridge, MA 02139, USA. */
C_LABEL(name) \ C_LABEL(name) \
CALL_MCOUNT CALL_MCOUNT
#undef END
#define END(name) .size name, . - name
/* If compiled for profiling, call `_mcount' at the start of each function. */ /* If compiled for profiling, call `_mcount' at the start of each function. */
#ifdef PROF #ifdef PROF
/* The mcount code relies on a normal frame pointer being on the stack /* The mcount code relies on a normal frame pointer being on the stack
@@ -76,7 +79,6 @@ Cambridge, MA 02139, USA. */
error values. */ error values. */
#define PSEUDO(name, syscall_name, args) \ #define PSEUDO(name, syscall_name, args) \
.text; \ .text; \
SYSCALL_ERROR_HANDLER \
ENTRY (name) \ ENTRY (name) \
DO_CALL (&SYS_ify (syscall_name), args); \ DO_CALL (&SYS_ify (syscall_name), args); \
moveq.l &-128, %d1; \ moveq.l &-128, %d1; \
@@ -84,13 +86,14 @@ Cambridge, MA 02139, USA. */
jcc syscall_error jcc syscall_error
#undef PSEUDO_END #undef PSEUDO_END
#define PSEUDO_END(name) .size name, . - name #define PSEUDO_END(name) \
SYSCALL_ERROR_HANDLER; \
END (name)
#ifdef PIC #ifdef PIC
/* Store (- %d0) into errno through the GOT. */ /* Store (- %d0) into errno through the GOT. */
#ifdef _LIBC_REENTRANT #ifdef _LIBC_REENTRANT
#define SYSCALL_ERROR_HANDLER \ #define SYSCALL_ERROR_HANDLER \
.type syscall_error, @function; \
syscall_error: \ syscall_error: \
move.l (errno@GOTPC, %pc), %a0; \ move.l (errno@GOTPC, %pc), %a0; \
neg.l %d0; \ neg.l %d0; \
@@ -105,7 +108,6 @@ syscall_error: \
rts; rts;
#else #else
#define SYSCALL_ERROR_HANDLER \ #define SYSCALL_ERROR_HANDLER \
.type syscall_error, @function; \
syscall_error: \ syscall_error: \
move.l (errno@GOTPC, %pc), %a0; \ move.l (errno@GOTPC, %pc), %a0; \
neg.l %d0; \ neg.l %d0; \

View File

@@ -13,7 +13,7 @@ geteuid - geteuid 0 __geteuid geteuid
getpgid - getpgid 1 __getpgid getpgid getpgid - getpgid 1 __getpgid getpgid
getpgrp - getpgrp 0 getpgrp getpgrp - getpgrp 0 getpgrp
getppid - getppid 0 __getppid getppid getppid - getppid 0 __getppid getppid
getresuid - getresuid 3 getresuid getresuid EXTRA getresuid 3 getresuid
getsid - getsid 1 getsid getsid - getsid 1 getsid
init_module EXTRA init_module 5 init_module init_module EXTRA init_module 5 init_module
ioperm - ioperm 3 ioperm ioperm - ioperm 3 ioperm
@@ -35,22 +35,22 @@ s_getpriority getpriority getpriority 2 __syscall_getpriority
s_ptrace ptrace ptrace 4 __syscall_ptrace s_ptrace ptrace ptrace 4 __syscall_ptrace
s_reboot EXTRA reboot 3 __syscall_reboot s_reboot EXTRA reboot 3 __syscall_reboot
s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend s_sigsuspend sigsuspend sigsuspend 3 __syscall_sigsuspend
sched_setp - sched_setparam 2 __sched_setparam sched_setparam s_sysctl sysctl _sysctl 1 __syscall__sysctl
sched_getp - sched_getparam 2 __sched_getparam sched_getparam sched_getp - sched_getparam 2 __sched_getparam sched_getparam
sched_sets - sched_setscheduler 3 __sched_setscheduler sched_setscheduler
sched_gets - sched_getscheduler 1 __sched_getscheduler sched_getscheduler sched_gets - sched_getscheduler 1 __sched_getscheduler sched_getscheduler
sched_yield - sched_yield 0 __sched_yield sched_yield
sched_primax - sched_get_priority_max 1 __sched_get_priority_max sched_get_priority_max sched_primax - sched_get_priority_max 1 __sched_get_priority_max sched_get_priority_max
sched_primin - sched_get_priority_min 1 __sched_get_priority_min sched_get_priority_min sched_primin - sched_get_priority_min 1 __sched_get_priority_min sched_get_priority_min
sched_rr_gi - sched_rr_get_interval 2 __sched_rr_get_interval sched_rr_get_interval sched_rr_gi - sched_rr_get_interval 2 __sched_rr_get_interval sched_rr_get_interval
sched_setp - sched_setparam 2 __sched_setparam sched_setparam
sched_sets - sched_setscheduler 3 __sched_setscheduler sched_setscheduler
sched_yield - sched_yield 0 __sched_yield sched_yield
select - _newselect 5 __select select select - _newselect 5 __select select
setfsgid EXTRA setfsgid 1 setfsgid setfsgid EXTRA setfsgid 1 setfsgid
setfsuid EXTRA setfsuid 1 setfsuid setfsuid EXTRA setfsuid 1 setfsuid
setpgid - setpgid 2 __setpgid setpgid setpgid - setpgid 2 __setpgid setpgid
setresuid - setresuid 3 setresuid setresuid EXTRA setresuid 3 setresuid
sigpending - sigpending 1 sigpending sigpending - sigpending 1 sigpending
sigprocmask - sigprocmask 3 __sigprocmask sigprocmask sigprocmask - sigprocmask 3 __sigprocmask sigprocmask
s_sysctl sysctl _sysctl 1 __syscall__sysctl
sysinfo EXTRA sysinfo 1 sysinfo sysinfo EXTRA sysinfo 1 sysinfo
swapon - swapon 2 swapon swapon - swapon 2 swapon
umount EXTRA umount 1 __umount umount umount EXTRA umount 1 __umount umount

View File

@@ -1,4 +1,4 @@
/* This file just defines the current version number of libc. */ /* This file just defines the current version number of libc. */
#define RELEASE "alpha" #define RELEASE "alpha"
#define VERSION "1.96" #define VERSION "1.97"