mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
update from main archive 970120
Tue Jan 21 04:05:20 1997 Ulrich Drepper <drepper@cygnus.com> * version.h (VERSION): Bump to 1.101. Implement -d and -r option to `ldd' to check relocations. * elf/dl-error.c: Add another method to intercept errors. (_dl_receive_error): New function. Install user defined handler. (receiver): New variable. Contains pointer to user provided handler. (_dl_signal_error): If user provided handler is installed call this. * elf/dl-load.c (_dl_map_object): When shared object is not found in trace mode initialize a few more fields so that lookup can actually happen but always fails. * elf/ldd.sh.in: Rewrite argument handling. Recognize new arguments to trigger reloation test. Return with appropriate error code if a file wasn't found. Print warning if object is not executable. * elf/ldd.bash.in: Likewise. * elf/link.h (receiver_fct): New type. Used in _dl_receive_error. (_dl_sysdep_error): New prototype. (_dl_receive_error): New prototype. (_dl_signal_error): Remove __attribute__ ((__noreturn__)). * elf/rtld.c (dl_main): Rewrite argument handling. More than one argument allowed. Recognize --data-relocs and --function-relocs arguments. Don't determine `lazy' mode from LD_BIND_NOW environment variable when in trace mode. If in trace mode and either --data-relocs or --function-relocs is given perform relocation. Report errors using print_unresolved function. (print_unresolved): New function. Print information about missing symbol on stderr. * sysdeps/generic/dl-sysdep.c (_dl_sysdep_error): New function. Like _dl_sysdep_message but print to stderr. * sysdeps/mach/hurd/dl-sysdep.c: Likewise. * sysdeps/generic/sockaddrcom.h: Add definition of sa_family_t. Reported by Andreas Schwab. (__SOCKADDR_COMMON): Use sa_family_t for family member. * sysdeps/unix/bsd/bsd4.4/sockaddrcom.h: Likewise. Linux/Sparc support by Miguel de Icaza. * sysdeps/sparc/fpu_control.h: New file. * sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S: New file. * sysdeps/unix/sysv/linux/sparc/brk.c: New file. * sysdeps/unix/sysv/linux/sparc/profil-counter.h: New file. * sysdeps/unix/sysv/linux/sparc/sigaction.c: New file. * sysdeps/unix/sysv/linux/sparc/socket.S: New file. * sysdeps/unix/sysv/linux/sparc/syscall.S: New file. * sysdeps/unix/sysv/linux/sparc/sysdep.h: New file. * sysdeps/unix/sysv/linux/sparc/Dist: New file. * sysdeps/unix/sysv/linux/sparc/Makefile: New file. * sysdeps/unix/sysv/linux/net/if_arp.h: Don't use kernel header. Provide own definition based on 4.4BSD and Linux. * sysdeps/unix/sysv/linux/net/ppp_defs.h: Define __u32 before including <linux/ppp_defs.h>. * sysdeps/unix/sysv/linux/sys/msq_buf.h (struct msqid_ds): Don't use __pid_t since the kernel might have a different size. * sysdeps/unix/sysv/linux/sys/shm_buf.h (struct shmid_ds): Likewise. Reported by Andreas Schwab. * time/asctime.c: Update copyright. * time/dysize.c: Likewise. * time/gmtime.c: Likewise. * time/timegm.c: Likewise. * time/offtime.c: Likewise. De-ANSI-declfy. * time/tzset.c (__tzset_internal): When TZ envvar does not name a DST timezone don't default to offset -1. * sysdeps/unix/sysv/linux/net/route.h: Don't use kernel header. Reported by a sun <asun@zoology.washington.edu>. * resolv/Makefile: Correct spelling: subdirs-dirs -> subdir-dirs. * sysdeps/stub/sysv_signal.c: New file. Stub implementation. * Makefile (distribute): Add mcheck.h. * nis/Makefile (distribute): Add nss-nis.h. * libio/Makefile (routines): Change vdprintf to iovdprintf to prevent dist problem. * nss/Makefile (distribute): Add digits_dots.c. * sysdeps/unix/sysv/linux/Dist: Add kernel_sigaction.h. * sysdeps/unix/sysv/linux/alpha/Dist: Add sys/procfs.h. * sysdeps/unix/sysv/linux/sparc/Dist: Add clone.S. * new-malloc/Makefile (distribute): Add mcheck-init.c and mcheck.h. Mon Jan 20 17:54:28 1997 Sven Verdoolaege <skimo@breughel.ufsia.ac.be> * manual/filesys.texi: Fix little problem (reentrant->readdir). Fri Jan 17 19:07:07 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * configure.in [$elf=yes]: Check for support of .previous and .popsection in the assembler. * config.h.in: Add HAVE_ASM_PREVIOUS_DIRECTIVE and HAVE_ASM_POPSECTION_DIRECTIVE. * libc-symbols.h (__make_section_unallocated) [HAVE_ELF]: Define appropriate if either .previous or .popsection is supported. (libc_warning) [HAVE_ELF]: Use it here. Sat Jan 18 22:15:26 1997 Richard Henderson <rth@tamu.edu> * Makeconfig (CFLAGS-.so): Add -fno-common to prevent odd sorts of errors that can occur when linking libc.so. Mon Jan 20 05:20:49 1997 Ulrich Drepper <drepper@cygnus.com> * elf/dl-load.c (open_path): When running setuid don't try a directory if it is not given with the full name. * elf/Makefile (before-compile): New variable. Mention trusted-dirs.h. (trusted-dirs.h): Construct file from $(default-rpath) and $(user-defined-trusted-dirs) variables. * elf/dl-load.c (_dl_map_object): Pass additional argument to open_path which is NULL except for the LD_LIBRARY_PATH pass in which case it is a pointer to the list of directories from the trusted-dirs.h file. (open_path): Accept additional argument with list of trusted dirs. When running setuid and a list of trusted dirs is given only use those which are mentioned in the list. * elf/rtld.c (dl_main): Don't reject whole LD_LIBRARY_PATH when running setuid. Instead accept entries which do not contain a '/'. * Makeconfig: Correct comment about +(default_cflags). Mon Jan 20 05:11:14 1997 Hrvoje Niksic <hniksic@srce.hr> * time/strptime.c (recursive): Use && not || to test for valid argument. Mon Jan 20 05:06:50 1997 Ulrich Drepper <drepper@cygnus.com> * elf/ldd.sh.in: Exit with value 1 if an error occured. * elf/ldd.bash.in: Likewise. * elf/rtld.c (dl_main): Do not always ignore LD_PRELOAD when the binary runs setuid. It is save to use those entries which do not contain a '/'. This is compatible with Solaris-2.
This commit is contained in:
144
ChangeLog
144
ChangeLog
@ -1,3 +1,147 @@
|
|||||||
|
Tue Jan 21 04:05:20 1997 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* version.h (VERSION): Bump to 1.101.
|
||||||
|
|
||||||
|
Implement -d and -r option to `ldd' to check relocations.
|
||||||
|
* elf/dl-error.c: Add another method to intercept errors.
|
||||||
|
(_dl_receive_error): New function. Install user defined handler.
|
||||||
|
(receiver): New variable. Contains pointer to user provided handler.
|
||||||
|
(_dl_signal_error): If user provided handler is installed call this.
|
||||||
|
* elf/dl-load.c (_dl_map_object): When shared object is not found in
|
||||||
|
trace mode initialize a few more fields so that lookup can actually
|
||||||
|
happen but always fails.
|
||||||
|
* elf/ldd.sh.in: Rewrite argument handling. Recognize new arguments
|
||||||
|
to trigger reloation test. Return with appropriate error code if
|
||||||
|
a file wasn't found. Print warning if object is not executable.
|
||||||
|
* elf/ldd.bash.in: Likewise.
|
||||||
|
* elf/link.h (receiver_fct): New type. Used in _dl_receive_error.
|
||||||
|
(_dl_sysdep_error): New prototype.
|
||||||
|
(_dl_receive_error): New prototype.
|
||||||
|
(_dl_signal_error): Remove __attribute__ ((__noreturn__)).
|
||||||
|
* elf/rtld.c (dl_main): Rewrite argument handling. More than
|
||||||
|
one argument allowed. Recognize --data-relocs and --function-relocs
|
||||||
|
arguments.
|
||||||
|
Don't determine `lazy' mode from LD_BIND_NOW environment variable
|
||||||
|
when in trace mode.
|
||||||
|
If in trace mode and either --data-relocs or --function-relocs is
|
||||||
|
given perform relocation. Report errors using print_unresolved
|
||||||
|
function.
|
||||||
|
(print_unresolved): New function. Print information about missing
|
||||||
|
symbol on stderr.
|
||||||
|
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_error): New function.
|
||||||
|
Like _dl_sysdep_message but print to stderr.
|
||||||
|
* sysdeps/mach/hurd/dl-sysdep.c: Likewise.
|
||||||
|
|
||||||
|
* sysdeps/generic/sockaddrcom.h: Add definition of sa_family_t.
|
||||||
|
Reported by Andreas Schwab.
|
||||||
|
(__SOCKADDR_COMMON): Use sa_family_t for family member.
|
||||||
|
* sysdeps/unix/bsd/bsd4.4/sockaddrcom.h: Likewise.
|
||||||
|
|
||||||
|
Linux/Sparc support by Miguel de Icaza.
|
||||||
|
* sysdeps/sparc/fpu_control.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/brk.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/profil-counter.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sigaction.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/socket.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/syscall.S: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sysdep.h: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/Dist: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/Makefile: New file.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/net/if_arp.h: Don't use kernel header.
|
||||||
|
Provide own definition based on 4.4BSD and Linux.
|
||||||
|
* sysdeps/unix/sysv/linux/net/ppp_defs.h: Define __u32 before
|
||||||
|
including <linux/ppp_defs.h>.
|
||||||
|
* sysdeps/unix/sysv/linux/sys/msq_buf.h (struct msqid_ds): Don't
|
||||||
|
use __pid_t since the kernel might have a different size.
|
||||||
|
* sysdeps/unix/sysv/linux/sys/shm_buf.h (struct shmid_ds): Likewise.
|
||||||
|
Reported by Andreas Schwab.
|
||||||
|
|
||||||
|
* time/asctime.c: Update copyright.
|
||||||
|
* time/dysize.c: Likewise.
|
||||||
|
* time/gmtime.c: Likewise.
|
||||||
|
* time/timegm.c: Likewise.
|
||||||
|
* time/offtime.c: Likewise. De-ANSI-declfy.
|
||||||
|
|
||||||
|
* time/tzset.c (__tzset_internal): When TZ envvar does not name a
|
||||||
|
DST timezone don't default to offset -1.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/net/route.h: Don't use kernel header.
|
||||||
|
Reported by a sun <asun@zoology.washington.edu>.
|
||||||
|
|
||||||
|
* resolv/Makefile: Correct spelling: subdirs-dirs -> subdir-dirs.
|
||||||
|
|
||||||
|
* sysdeps/stub/sysv_signal.c: New file. Stub implementation.
|
||||||
|
|
||||||
|
* Makefile (distribute): Add mcheck.h.
|
||||||
|
|
||||||
|
* nis/Makefile (distribute): Add nss-nis.h.
|
||||||
|
|
||||||
|
* libio/Makefile (routines): Change vdprintf to iovdprintf to prevent
|
||||||
|
dist problem.
|
||||||
|
|
||||||
|
* nss/Makefile (distribute): Add digits_dots.c.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/Dist: Add kernel_sigaction.h.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/Dist: Add sys/procfs.h.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/Dist: Add clone.S.
|
||||||
|
* new-malloc/Makefile (distribute): Add mcheck-init.c and mcheck.h.
|
||||||
|
|
||||||
|
Mon Jan 20 17:54:28 1997 Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
|
||||||
|
|
||||||
|
* manual/filesys.texi: Fix little problem (reentrant->readdir).
|
||||||
|
|
||||||
|
Fri Jan 17 19:07:07 1997 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||||
|
|
||||||
|
* configure.in [$elf=yes]: Check for support of .previous and
|
||||||
|
.popsection in the assembler.
|
||||||
|
* config.h.in: Add HAVE_ASM_PREVIOUS_DIRECTIVE and
|
||||||
|
HAVE_ASM_POPSECTION_DIRECTIVE.
|
||||||
|
* libc-symbols.h (__make_section_unallocated) [HAVE_ELF]: Define
|
||||||
|
appropriate if either .previous or .popsection is supported.
|
||||||
|
(libc_warning) [HAVE_ELF]: Use it here.
|
||||||
|
|
||||||
|
Sat Jan 18 22:15:26 1997 Richard Henderson <rth@tamu.edu>
|
||||||
|
|
||||||
|
* Makeconfig (CFLAGS-.so): Add -fno-common to prevent odd sorts of
|
||||||
|
errors that can occur when linking libc.so.
|
||||||
|
|
||||||
|
Mon Jan 20 05:20:49 1997 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* elf/dl-load.c (open_path): When running setuid don't try
|
||||||
|
a directory if it is not given with the full name.
|
||||||
|
|
||||||
|
* elf/Makefile (before-compile): New variable. Mention trusted-dirs.h.
|
||||||
|
(trusted-dirs.h): Construct file from $(default-rpath) and
|
||||||
|
$(user-defined-trusted-dirs) variables.
|
||||||
|
* elf/dl-load.c (_dl_map_object): Pass additional argument to open_path
|
||||||
|
which is NULL except for the LD_LIBRARY_PATH pass in which case it
|
||||||
|
is a pointer to the list of directories from the trusted-dirs.h
|
||||||
|
file.
|
||||||
|
(open_path): Accept additional argument with list of trusted dirs.
|
||||||
|
When running setuid and a list of trusted dirs is given only use
|
||||||
|
those which are mentioned in the list.
|
||||||
|
|
||||||
|
* elf/rtld.c (dl_main): Don't reject whole LD_LIBRARY_PATH when
|
||||||
|
running setuid. Instead accept entries which do not contain a '/'.
|
||||||
|
|
||||||
|
* Makeconfig: Correct comment about +(default_cflags).
|
||||||
|
|
||||||
|
Mon Jan 20 05:11:14 1997 Hrvoje Niksic <hniksic@srce.hr>
|
||||||
|
|
||||||
|
* time/strptime.c (recursive): Use && not || to test for valid
|
||||||
|
argument.
|
||||||
|
|
||||||
|
Mon Jan 20 05:06:50 1997 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* elf/ldd.sh.in: Exit with value 1 if an error occured.
|
||||||
|
* elf/ldd.bash.in: Likewise.
|
||||||
|
|
||||||
|
* elf/rtld.c (dl_main): Do not always ignore LD_PRELOAD when the
|
||||||
|
binary runs setuid. It is save to use those entries which do not
|
||||||
|
contain a '/'. This is compatible with Solaris-2.
|
||||||
|
|
||||||
Mon Jan 20 03:02:50 1997 Ulrich Drepper <drepper@cygnus.com>
|
Mon Jan 20 03:02:50 1997 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* Make-dist: Update and reformat copyright.
|
* Make-dist: Update and reformat copyright.
|
||||||
|
@ -421,7 +421,7 @@ ifdef CFLAGS
|
|||||||
endif # CFLAGS
|
endif # CFLAGS
|
||||||
endif # +cflags
|
endif # +cflags
|
||||||
|
|
||||||
# If none of the above worked, default to "-g".
|
# If none of the above worked, default to "-g -O".
|
||||||
ifeq "$(strip $(+cflags))" ""
|
ifeq "$(strip $(+cflags))" ""
|
||||||
+cflags := $(default_cflags)
|
+cflags := $(default_cflags)
|
||||||
endif # $(+cflags) == ""
|
endif # $(+cflags) == ""
|
||||||
@ -470,7 +470,7 @@ ifeq (yes,$(build-shared))
|
|||||||
# The PIC object files are named foo.so.
|
# The PIC object files are named foo.so.
|
||||||
object-suffixes += .so
|
object-suffixes += .so
|
||||||
CPPFLAGS-.so = -DPIC
|
CPPFLAGS-.so = -DPIC
|
||||||
CFLAGS-.so = -fPIC
|
CFLAGS-.so = -fPIC -fno-common
|
||||||
libtype.so := lib%_pic.a
|
libtype.so := lib%_pic.a
|
||||||
endif
|
endif
|
||||||
ifeq (yes,$(build-profile))
|
ifeq (yes,$(build-profile))
|
||||||
|
3
Makefile
3
Makefile
@ -295,7 +295,8 @@ distribute := README INSTALL FAQ NOTES NEWS PROJECTS \
|
|||||||
config.h.in config.make.in config-name.in Makefile.in \
|
config.h.in config.make.in config-name.in Makefile.in \
|
||||||
autolock.sh rellns-sh munch-tmpl.c munch.awk interp.c \
|
autolock.sh rellns-sh munch-tmpl.c munch.awk interp.c \
|
||||||
sysdep.h set-hooks.h libc-symbols.h version.h shlib-versions \
|
sysdep.h set-hooks.h libc-symbols.h version.h shlib-versions \
|
||||||
rpm/Makefile rpm/template rpm/rpmrc nsswitch.h netgroup.h
|
rpm/Makefile rpm/template rpm/rpmrc nsswitch.h netgroup.h \
|
||||||
|
mcheck.h
|
||||||
|
|
||||||
distribute := $(strip $(distribute))
|
distribute := $(strip $(distribute))
|
||||||
generated := $(generated) stubs.h version-info.h
|
generated := $(generated) stubs.h version-info.h
|
||||||
|
4
README
4
README
@ -1,4 +1,4 @@
|
|||||||
This directory contains the version 1.96 test release of the GNU C Library.
|
This directory contains the version 1.101 test release of the GNU C Library.
|
||||||
Many bugs have been fixed since the last release.
|
Many bugs have been fixed since the last release.
|
||||||
Some bugs surely remain.
|
Some bugs surely remain.
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ provides the Unix `crypt' function, plus some other entry points.
|
|||||||
Because of the United States export restriction on DES implementations,
|
Because of the United States export restriction on DES implementations,
|
||||||
we are distributing this code separately from the rest of the C
|
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
|
library. There is an extra distribution tar file just for crypt; it is
|
||||||
called `glibc-1.96-crypt.tar.gz'. You can just unpack the crypt
|
called `glibc-1.101-crypt.tar.gz'. You can just unpack the crypt
|
||||||
distribution along with the rest of the C library and build; you can
|
distribution along with the rest of the C library and build; you can
|
||||||
also build the library without getting crypt. Users outside the USA
|
also build the library without getting crypt. Users outside the USA
|
||||||
can get the crypt distribution via anonymous FTP from ftp.uni-c.dk
|
can get the crypt distribution via anonymous FTP from ftp.uni-c.dk
|
||||||
|
@ -35,6 +35,14 @@
|
|||||||
This is defined by configure under --enable-libio. */
|
This is defined by configure under --enable-libio. */
|
||||||
#undef USE_IN_LIBIO
|
#undef USE_IN_LIBIO
|
||||||
|
|
||||||
|
/* Define if using ELF and the assembler supports the `.previous'
|
||||||
|
directive. */
|
||||||
|
#undef HAVE_ASM_PREVIOUS_DIRECTIVE
|
||||||
|
|
||||||
|
/* Define if using ELF and the assembler supports the `.popsection'
|
||||||
|
directive. */
|
||||||
|
#undef HAVE_ASM_POPSECTION_DIRECTIVE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
84
configure
vendored
84
configure
vendored
@ -1604,14 +1604,66 @@ EOF
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test $elf = yes; then
|
||||||
|
echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
|
||||||
|
echo "configure:1610: checking for .previous assembler directive" >&5
|
||||||
|
if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
|
||||||
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
else
|
||||||
|
cat > conftest.s <<EOF
|
||||||
|
.section foo_section
|
||||||
|
.previous
|
||||||
|
EOF
|
||||||
|
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1618: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
|
libc_cv_asm_previous_directive=yes
|
||||||
|
else
|
||||||
|
libc_cv_asm_previous_directive=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$ac_t""$libc_cv_asm_previous_directive" 1>&6
|
||||||
|
if test $libc_cv_asm_previous_directive = yes; then
|
||||||
|
cat >> confdefs.h <<\EOF
|
||||||
|
#define HAVE_ASM_PREVIOUS_DIRECTIVE 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
else
|
||||||
|
echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
|
||||||
|
echo "configure:1634: checking for .popsection assembler directive" >&5
|
||||||
|
if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
|
||||||
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
|
else
|
||||||
|
cat > conftest.s <<EOF
|
||||||
|
.pushsection foo_section
|
||||||
|
.popsection
|
||||||
|
EOF
|
||||||
|
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1642: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
|
libc_cv_asm_popsection_directive=yes
|
||||||
|
else
|
||||||
|
libc_cv_asm_popsection_directive=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$ac_t""$libc_cv_asm_popsection_directive" 1>&6
|
||||||
|
if test $libc_cv_asm_popsection_directive = yes; then
|
||||||
|
cat >> confdefs.h <<\EOF
|
||||||
|
#define HAVE_ASM_POPSECTION_DIRECTIVE 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if test $elf != yes; then
|
if test $elf != yes; then
|
||||||
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
|
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
|
||||||
echo "configure:1610: checking for .init and .fini sections" >&5
|
echo "configure:1662: checking for .init and .fini sections" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1615 "configure"
|
#line 1667 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
@ -1620,7 +1672,7 @@ asm (".section .init");
|
|||||||
asm (".text");
|
asm (".text");
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1624: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
if { (eval echo configure:1676: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
libc_cv_have_initfini=yes
|
libc_cv_have_initfini=yes
|
||||||
else
|
else
|
||||||
@ -1645,19 +1697,19 @@ if test $elf = yes; then
|
|||||||
libc_cv_asm_underscores=no
|
libc_cv_asm_underscores=no
|
||||||
else
|
else
|
||||||
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
|
||||||
echo "configure:1649: checking for _ prefix on C symbol names" >&5
|
echo "configure:1701: checking for _ prefix on C symbol names" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 1654 "configure"
|
#line 1706 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
asm ("_glibc_foobar:");
|
asm ("_glibc_foobar:");
|
||||||
int main() {
|
int main() {
|
||||||
glibc_foobar ();
|
glibc_foobar ();
|
||||||
; return 0; }
|
; return 0; }
|
||||||
EOF
|
EOF
|
||||||
if { (eval echo configure:1661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
if { (eval echo configure:1713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
|
||||||
rm -rf conftest*
|
rm -rf conftest*
|
||||||
libc_cv_asm_underscores=yes
|
libc_cv_asm_underscores=yes
|
||||||
else
|
else
|
||||||
@ -1684,7 +1736,7 @@ if test $elf = yes; then
|
|||||||
libc_cv_asm_weakext_directive=no
|
libc_cv_asm_weakext_directive=no
|
||||||
else
|
else
|
||||||
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
|
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
|
||||||
echo "configure:1688: checking for assembler .weak directive" >&5
|
echo "configure:1740: checking for assembler .weak directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1707,7 +1759,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
|
|||||||
|
|
||||||
if test $libc_cv_asm_weak_directive = no; then
|
if test $libc_cv_asm_weak_directive = no; then
|
||||||
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
|
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
|
||||||
echo "configure:1711: checking for assembler .weakext directive" >&5
|
echo "configure:1763: checking for assembler .weakext directive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1744,7 +1796,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
|
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
|
||||||
echo "configure:1748: checking for ld --no-whole-archive" >&5
|
echo "configure:1800: checking for ld --no-whole-archive" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1755,7 +1807,7 @@ __throw () {}
|
|||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} $CFLAGS
|
if { ac_try='${CC-cc} $CFLAGS
|
||||||
-nostdlib -nostartfiles -Wl,--no-whole-archive
|
-nostdlib -nostartfiles -Wl,--no-whole-archive
|
||||||
-o conftest conftest.c'; { (eval echo configure:1759: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
-o conftest conftest.c'; { (eval echo configure:1811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_ld_no_whole_archive=yes
|
libc_cv_ld_no_whole_archive=yes
|
||||||
else
|
else
|
||||||
libc_cv_ld_no_whole_archive=no
|
libc_cv_ld_no_whole_archive=no
|
||||||
@ -1766,7 +1818,7 @@ fi
|
|||||||
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
|
echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
|
echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
|
||||||
echo "configure:1770: checking for gcc -fno-exceptions" >&5
|
echo "configure:1822: checking for gcc -fno-exceptions" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1777,7 +1829,7 @@ __throw () {}
|
|||||||
EOF
|
EOF
|
||||||
if { ac_try='${CC-cc} $CFLAGS
|
if { ac_try='${CC-cc} $CFLAGS
|
||||||
-nostdlib -nostartfiles -fno-exceptions
|
-nostdlib -nostartfiles -fno-exceptions
|
||||||
-o conftest conftest.c'; { (eval echo configure:1781: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
-o conftest conftest.c'; { (eval echo configure:1833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
|
||||||
libc_cv_gcc_no_exceptions=yes
|
libc_cv_gcc_no_exceptions=yes
|
||||||
else
|
else
|
||||||
libc_cv_gcc_no_exceptions=no
|
libc_cv_gcc_no_exceptions=no
|
||||||
@ -1829,7 +1881,7 @@ if test "$uname" = generic; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
|
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
|
||||||
echo "configure:1833: checking OS release for uname" >&5
|
echo "configure:1885: checking OS release for uname" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1851,7 +1903,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
|
|||||||
uname_release="$libc_cv_uname_release"
|
uname_release="$libc_cv_uname_release"
|
||||||
|
|
||||||
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
|
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
|
||||||
echo "configure:1855: checking OS version for uname" >&5
|
echo "configure:1907: checking OS version for uname" >&5
|
||||||
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
|
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
@ -1873,7 +1925,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
|
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
|
||||||
echo "configure:1877: checking stdio selection" >&5
|
echo "configure:1929: checking stdio selection" >&5
|
||||||
|
|
||||||
case $stdio in
|
case $stdio in
|
||||||
libio) cat >> confdefs.h <<\EOF
|
libio) cat >> confdefs.h <<\EOF
|
||||||
@ -1885,7 +1937,7 @@ esac
|
|||||||
echo "$ac_t""$stdio" 1>&6
|
echo "$ac_t""$stdio" 1>&6
|
||||||
|
|
||||||
echo $ac_n "checking malloc selection""... $ac_c" 1>&6
|
echo $ac_n "checking malloc selection""... $ac_c" 1>&6
|
||||||
echo "configure:1889: checking malloc selection" >&5
|
echo "configure:1941: checking malloc selection" >&5
|
||||||
|
|
||||||
case $malloc in
|
case $malloc in
|
||||||
new-malloc) USE_NEW_MALLOC=-DUSE_NEW_MALLOC ;;
|
new-malloc) USE_NEW_MALLOC=-DUSE_NEW_MALLOC ;;
|
||||||
|
34
configure.in
34
configure.in
@ -496,6 +496,40 @@ if test $libc_cv_asm_set_directive = yes; then
|
|||||||
AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
|
AC_DEFINE(HAVE_ASM_SET_DIRECTIVE)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test $elf = yes; then
|
||||||
|
AC_CACHE_CHECK(for .previous assembler directive,
|
||||||
|
libc_cv_asm_previous_directive, [dnl
|
||||||
|
cat > conftest.s <<EOF
|
||||||
|
.section foo_section
|
||||||
|
.previous
|
||||||
|
EOF
|
||||||
|
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AC_FD_CC); then
|
||||||
|
libc_cv_asm_previous_directive=yes
|
||||||
|
else
|
||||||
|
libc_cv_asm_previous_directive=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*])
|
||||||
|
if test $libc_cv_asm_previous_directive = yes; then
|
||||||
|
AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE)
|
||||||
|
else
|
||||||
|
AC_CACHE_CHECK(for .popsection assembler directive,
|
||||||
|
libc_cv_asm_popsection_directive, [dnl
|
||||||
|
cat > conftest.s <<EOF
|
||||||
|
.pushsection foo_section
|
||||||
|
.popsection
|
||||||
|
EOF
|
||||||
|
if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AC_FD_CC); then
|
||||||
|
libc_cv_asm_popsection_directive=yes
|
||||||
|
else
|
||||||
|
libc_cv_asm_popsection_directive=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*])
|
||||||
|
if test $libc_cv_asm_popsection_directive = yes; then
|
||||||
|
AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if test $elf != yes; then
|
if test $elf != yes; then
|
||||||
AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
|
AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
|
||||||
[AC_TRY_COMPILE(, [asm (".section .init");
|
[AC_TRY_COMPILE(, [asm (".section .init");
|
||||||
|
13
elf/Makefile
13
elf/Makefile
@ -41,6 +41,8 @@ extra-libs = libdl
|
|||||||
extra-libs-others = $(extra-libs)
|
extra-libs-others = $(extra-libs)
|
||||||
libdl-routines := dlopen dlclose dlsym dlerror dladdr
|
libdl-routines := dlopen dlclose dlsym dlerror dladdr
|
||||||
|
|
||||||
|
before-compile = $(objpfx)trusted-dirs.h
|
||||||
|
|
||||||
|
|
||||||
all: # Make this the default target; it will be defined in Rules.
|
all: # Make this the default target; it will be defined in Rules.
|
||||||
|
|
||||||
@ -92,6 +94,17 @@ $(objpfx)$(rtld-installed-name): $(objpfx)ld.so
|
|||||||
ln -s $(<F) $@
|
ln -s $(<F) $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Build a file mentioning all trustworthy directories to look for shared
|
||||||
|
# libraries when using LD_LIBRARY_PATH in a setuid program. The user can
|
||||||
|
# add directories to the list by defining $(user-defined-trusted-dirs)
|
||||||
|
# before starting make.
|
||||||
|
$(objpfx)trusted-dirs.h: Makefile
|
||||||
|
(for dir in `echo "$(default-rpath) $(user-defined-trusted-dirs)" | \
|
||||||
|
sed 's/:/ /g'`; do \
|
||||||
|
echo " \"$$dir\","; \
|
||||||
|
done;) > $@T
|
||||||
|
mv -f $@T $@
|
||||||
|
CFLAGS-dl-load.c = -I$(objdir)/$(subdir)
|
||||||
|
|
||||||
# Specify the dependencies of libdl.so; its commands come from the generic
|
# Specify the dependencies of libdl.so; its commands come from the generic
|
||||||
# rule to build a shared library.
|
# rule to build a shared library.
|
||||||
|
@ -37,6 +37,11 @@ struct catch
|
|||||||
this is null. */
|
this is null. */
|
||||||
static struct catch *catch;
|
static struct catch *catch;
|
||||||
|
|
||||||
|
/* This points to a function which is called when an error is
|
||||||
|
received. Unlike the handling of `catch' this function may return.
|
||||||
|
The arguments will be the `errstring' and `objname'. */
|
||||||
|
static receiver_fct receiver;
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_dl_signal_error (int errcode,
|
_dl_signal_error (int errcode,
|
||||||
@ -58,6 +63,13 @@ _dl_signal_error (int errcode,
|
|||||||
catch->objname = objname;
|
catch->objname = objname;
|
||||||
longjmp (catch->env, errcode ?: -1);
|
longjmp (catch->env, errcode ?: -1);
|
||||||
}
|
}
|
||||||
|
else if (receiver)
|
||||||
|
{
|
||||||
|
/* We are inside _dl_receive_error. Call the user supplied
|
||||||
|
handler and resume the work. The receiver will still
|
||||||
|
installed. */
|
||||||
|
(*receiver) (errstring, objname);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Lossage while resolving the program's own symbols is always fatal. */
|
/* Lossage while resolving the program's own symbols is always fatal. */
|
||||||
@ -77,6 +89,8 @@ _dl_catch_error (char **errstring,
|
|||||||
{
|
{
|
||||||
int errcode;
|
int errcode;
|
||||||
struct catch *old, c = { errstring: NULL, objname: NULL };
|
struct catch *old, c = { errstring: NULL, objname: NULL };
|
||||||
|
/* We need not handle `receiver' since setting a `catch' is handle
|
||||||
|
before it. */
|
||||||
|
|
||||||
old = catch;
|
old = catch;
|
||||||
errcode = setjmp (c.env);
|
errcode = setjmp (c.env);
|
||||||
@ -96,3 +110,22 @@ _dl_catch_error (char **errstring,
|
|||||||
*objname = c.objname;
|
*objname = c.objname;
|
||||||
return errcode == -1 ? 0 : errcode;
|
return errcode == -1 ? 0 : errcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_receive_error (receiver_fct fct, void (*operate) (void))
|
||||||
|
{
|
||||||
|
struct catch *old_catch;
|
||||||
|
receiver_fct old_receiver;
|
||||||
|
|
||||||
|
old_catch = catch;
|
||||||
|
old_receiver = receiver;
|
||||||
|
|
||||||
|
/* Set the new values. */
|
||||||
|
catch = NULL;
|
||||||
|
receiver = fct;
|
||||||
|
|
||||||
|
(*operate) ();
|
||||||
|
|
||||||
|
catch = old_catch;
|
||||||
|
receiver = old_receiver;
|
||||||
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* _dl_map_object -- Map in a shared object's segments from the file.
|
/* _dl_map_object -- Map in a shared object's segments from the file.
|
||||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996, 1997 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
|
||||||
@ -409,7 +409,8 @@ _dl_map_object_from_fd (char *name, int fd, char *realname,
|
|||||||
static int
|
static int
|
||||||
open_path (const char *name, size_t namelen,
|
open_path (const char *name, size_t namelen,
|
||||||
const char *dirpath,
|
const char *dirpath,
|
||||||
char **realname)
|
char **realname,
|
||||||
|
const char *trusted_dirs[])
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
const char *p;
|
const char *p;
|
||||||
@ -426,13 +427,42 @@ open_path (const char *name, size_t namelen,
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
size_t buflen;
|
size_t buflen;
|
||||||
|
size_t this_len;
|
||||||
|
|
||||||
dirpath = p;
|
dirpath = p;
|
||||||
p = strpbrk (dirpath, ":;");
|
p = strpbrk (dirpath, ":;");
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
p = strchr (dirpath, '\0');
|
p = strchr (dirpath, '\0');
|
||||||
|
|
||||||
if (p == dirpath)
|
this_len = p - dirpath;
|
||||||
|
|
||||||
|
/* When we run a setuid program we do not accept any directory. */
|
||||||
|
if (__libc_enable_secure)
|
||||||
|
{
|
||||||
|
/* All trusted directory must be complete name. */
|
||||||
|
if (dirpath[0] != '/')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* If we got a list of trusted directories only accept one
|
||||||
|
of these. */
|
||||||
|
if (trusted_dirs != NULL)
|
||||||
|
{
|
||||||
|
const char **trust = trusted_dirs;
|
||||||
|
|
||||||
|
while (*trust != NULL)
|
||||||
|
if (memcmp (dirpath, *trust, this_len) == 0
|
||||||
|
&& (*trust)[this_len] == '\0')
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
++trust;
|
||||||
|
|
||||||
|
/* If directory is not trusted, ignore this directory. */
|
||||||
|
if (*trust == NULL)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this_len == 0)
|
||||||
{
|
{
|
||||||
/* Two adjacent colons, or a colon at the beginning or the end of
|
/* Two adjacent colons, or a colon at the beginning or the end of
|
||||||
the path means to search the current directory. */
|
the path means to search the current directory. */
|
||||||
@ -442,10 +472,10 @@ open_path (const char *name, size_t namelen,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Construct the pathname to try. */
|
/* Construct the pathname to try. */
|
||||||
(void) memcpy (buf, dirpath, p - dirpath);
|
(void) memcpy (buf, dirpath, this_len);
|
||||||
buf[p - dirpath] = '/';
|
buf[this_len] = '/';
|
||||||
(void) memcpy (&buf[(p - dirpath) + 1], name, namelen);
|
(void) memcpy (&buf[this_len + 1], name, namelen);
|
||||||
buflen = p - dirpath + 1 + namelen;
|
buflen = this_len + 1 + namelen;
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = __open (buf, O_RDONLY);
|
fd = __open (buf, O_RDONLY);
|
||||||
@ -508,9 +538,9 @@ _dl_map_object (struct link_map *loader, const char *name, int type,
|
|||||||
|
|
||||||
size_t namelen = strlen (name) + 1;
|
size_t namelen = strlen (name) + 1;
|
||||||
|
|
||||||
inline void trypath (const char *dirpath)
|
inline void trypath (const char *dirpath, const char *trusted[])
|
||||||
{
|
{
|
||||||
fd = open_path (name, namelen, dirpath, &realname);
|
fd = open_path (name, namelen, dirpath, &realname, trusted);
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = -1;
|
fd = -1;
|
||||||
@ -521,16 +551,24 @@ _dl_map_object (struct link_map *loader, const char *name, int type,
|
|||||||
if (l && l->l_info[DT_RPATH])
|
if (l && l->l_info[DT_RPATH])
|
||||||
trypath ((const char *) (l->l_addr +
|
trypath ((const char *) (l->l_addr +
|
||||||
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
||||||
l->l_info[DT_RPATH]->d_un.d_val));
|
l->l_info[DT_RPATH]->d_un.d_val), NULL);
|
||||||
/* If dynamically linked, try the DT_RPATH of the executable itself. */
|
/* If dynamically linked, try the DT_RPATH of the executable itself. */
|
||||||
l = _dl_loaded;
|
l = _dl_loaded;
|
||||||
if (fd == -1 && l && l->l_type != lt_loaded && l->l_info[DT_RPATH])
|
if (fd == -1 && l && l->l_type != lt_loaded && l->l_info[DT_RPATH])
|
||||||
trypath ((const char *) (l->l_addr +
|
trypath ((const char *) (l->l_addr +
|
||||||
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
l->l_info[DT_STRTAB]->d_un.d_ptr +
|
||||||
l->l_info[DT_RPATH]->d_un.d_val));
|
l->l_info[DT_RPATH]->d_un.d_val), NULL);
|
||||||
/* Try an environment variable (unless setuid). */
|
/* Try an environment variable (unless setuid). */
|
||||||
if (fd == -1 && ! __libc_enable_secure)
|
if (fd == -1 && ! __libc_enable_secure)
|
||||||
trypath (getenv ("LD_LIBRARY_PATH"));
|
{
|
||||||
|
static const char *trusted_dirs[] =
|
||||||
|
{
|
||||||
|
#include "trusted-dirs.h"
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
trypath (getenv ("LD_LIBRARY_PATH"), trusted_dirs);
|
||||||
|
}
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
/* Check the list of libraries in the file /etc/ld.so.cache,
|
/* Check the list of libraries in the file /etc/ld.so.cache,
|
||||||
@ -555,7 +593,7 @@ _dl_map_object (struct link_map *loader, const char *name, int type,
|
|||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
extern const char *_dl_rpath; /* Set in rtld.c. */
|
extern const char *_dl_rpath; /* Set in rtld.c. */
|
||||||
trypath (_dl_rpath);
|
trypath (_dl_rpath, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -590,6 +628,7 @@ _dl_map_object (struct link_map *loader, const char *name, int type,
|
|||||||
are only interested in the list of libraries this isn't
|
are only interested in the list of libraries this isn't
|
||||||
so severe. Fake an entry with all the information we
|
so severe. Fake an entry with all the information we
|
||||||
have (in fact only the name). */
|
have (in fact only the name). */
|
||||||
|
static const ElfW(Symndx) dummy_bucket = STN_UNDEF;
|
||||||
|
|
||||||
/* Enter the new object in the list of loaded objects. */
|
/* Enter the new object in the list of loaded objects. */
|
||||||
if ((name_copy = local_strdup (name)) == NULL
|
if ((name_copy = local_strdup (name)) == NULL
|
||||||
@ -599,6 +638,11 @@ _dl_map_object (struct link_map *loader, const char *name, int type,
|
|||||||
/* We use an opencount of 0 as a sign for the faked entry. */
|
/* We use an opencount of 0 as a sign for the faked entry. */
|
||||||
l->l_opencount = 0;
|
l->l_opencount = 0;
|
||||||
l->l_reserved = 0;
|
l->l_reserved = 0;
|
||||||
|
l->l_buckets = &dummy_bucket;
|
||||||
|
l->l_nbuckets = 1;
|
||||||
|
l->l_relocated = 1;
|
||||||
|
|
||||||
|
return l;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_dl_signal_error (errno, name, "cannot open shared object file");
|
_dl_signal_error (errno, name, "cannot open shared object file");
|
||||||
|
@ -29,23 +29,39 @@ TEXTDOMAIN=libc
|
|||||||
TEXTDOMAINDIR=@TEXTDOMAINDIR@
|
TEXTDOMAINDIR=@TEXTDOMAINDIR@
|
||||||
|
|
||||||
RTLD=@RTLD@
|
RTLD=@RTLD@
|
||||||
|
RELOCS=
|
||||||
|
|
||||||
while test $# -gt 0; do
|
while test $# -gt 0; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--v*)
|
--v | --ve | --ver | --vers | --versi | --versio | --version)
|
||||||
echo $"ldd (GNU libc) @VERSION@
|
echo $"ldd (GNU libc) @VERSION@
|
||||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
--h*)
|
--h | --he | --hel | --help)
|
||||||
echo $"ldd [OPTION]... FILE...
|
echo $"ldd [OPTION]... FILE...
|
||||||
--help print this help and exit
|
--help print this help and exit
|
||||||
--version print version information and exit
|
--version print version information and exit
|
||||||
|
-d, --data-relocs process data relocations
|
||||||
|
-r, --function-relocs process data and function relocations
|
||||||
Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
|
Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
|
||||||
|
--data-rel | --data-relo | --data-reloc | --data-relocs)
|
||||||
|
RELOCS='--data-relocs'
|
||||||
|
shift ;;
|
||||||
|
-r | --f | --fu | --fun | --func | --funct | --functi | --functio | \
|
||||||
|
--function | --function- | --function-r | --function-re | --function-rel | \
|
||||||
|
--function-relo | --function-reloc | --function-relocs)
|
||||||
|
RELOCS='--function-relocs'
|
||||||
|
shift ;;
|
||||||
--) # Stop option processing.
|
--) # Stop option processing.
|
||||||
shift; break ;;
|
shift; break ;;
|
||||||
|
-*)
|
||||||
|
echo >&2 $"ldd: unrecognized option" "\`$1'"
|
||||||
|
echo >&2 $"Try \`ldd --help' for more information."
|
||||||
|
exit 1 ;;
|
||||||
*)
|
*)
|
||||||
break ;;
|
break ;;
|
||||||
esac
|
esac
|
||||||
@ -53,9 +69,8 @@ done
|
|||||||
|
|
||||||
case $# in
|
case $# in
|
||||||
0)
|
0)
|
||||||
echo >&2 $"\
|
echo >&2 $"ldd: missing file arguments"
|
||||||
ldd: missing file arguments
|
echo >&2 $"Try \`ldd --help' for more information."
|
||||||
Try \`ldd --help' for more information."
|
|
||||||
exit 1 ;;
|
exit 1 ;;
|
||||||
1)
|
1)
|
||||||
# We don't list the file name when there is only one.
|
# We don't list the file name when there is only one.
|
||||||
@ -65,14 +80,21 @@ Try \`ldd --help' for more information."
|
|||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
echo "${file}:" $"no such file"
|
echo "${file}:" $"no such file"
|
||||||
elif ${RTLD} --verify "$file"; then
|
exit 1
|
||||||
LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} "$file" && exit 1
|
else
|
||||||
|
test -x "$file" ||
|
||||||
|
echo $"warning: you do not have execution permission for" "\`$file'"
|
||||||
|
if ${RTLD} --verify "$file"; then
|
||||||
|
LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} ${RELOCS} "$file" || exit 1
|
||||||
else
|
else
|
||||||
echo $" not a dynamic executable"
|
echo $" not a dynamic executable"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
exit ;;
|
exit ;;
|
||||||
*)
|
*)
|
||||||
set -e # Bail out immediately if ${RTLD} loses on any argument.
|
set -e # Bail out immediately if ${RTLD} loses on any argument.
|
||||||
|
result=0
|
||||||
for file; do
|
for file; do
|
||||||
echo "${file}:"
|
echo "${file}:"
|
||||||
case "$file" in
|
case "$file" in
|
||||||
@ -80,16 +102,22 @@ Try \`ldd --help' for more information."
|
|||||||
*) file="./$file" ;;
|
*) file="./$file" ;;
|
||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
echo "$file:" $"no such file"
|
echo "${file}:" $"no such file"
|
||||||
elif ${RTLD} --verify "$file"; then
|
result=1
|
||||||
LD_TRACE_LOADED_OBJECTS=1 ${RTLD} "$file"
|
else
|
||||||
|
test -x "$file" ||
|
||||||
|
echo $"warning: you do not have execution permission for" "\`$file'"
|
||||||
|
if ${RTLD} --verify "$file"; then
|
||||||
|
LD_TRACE_LOADED_OBJECTS=1 ${RTLD} ${RELOCS} "$file" || result=1
|
||||||
else
|
else
|
||||||
echo $" not a dynamic executable"
|
echo $" not a dynamic executable"
|
||||||
|
result=1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit $result
|
||||||
# Local Variables:
|
# Local Variables:
|
||||||
# mode:ksh
|
# mode:ksh
|
||||||
# End:
|
# End:
|
||||||
|
@ -25,23 +25,40 @@
|
|||||||
# variable LD_TRACE_LOADED_OBJECTS to a non-empty value.
|
# variable LD_TRACE_LOADED_OBJECTS to a non-empty value.
|
||||||
|
|
||||||
RTLD=@RTLD@
|
RTLD=@RTLD@
|
||||||
|
RELOCS=
|
||||||
|
|
||||||
while test $# -gt 0; do
|
while test $# -gt 0; do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--v*)
|
--v | --ve | --ver | --vers | --versi | --versio | --version)
|
||||||
echo 'ldd (GNU libc) @VERSION@
|
echo 'ldd (GNU libc) @VERSION@
|
||||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'
|
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
--h*)
|
--h | --he | --hel | --help)
|
||||||
echo "ldd [OPTION]... FILE...
|
echo "ldd [OPTION]... FILE...
|
||||||
--help print this help and exit
|
--help print this help and exit
|
||||||
--version print version information and exit
|
--version print version information and exit
|
||||||
|
-d, --data-relocs process data relocations
|
||||||
|
-r, --function-relocs process data and function relocations
|
||||||
Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
|
Report bugs using the \`glibcbug' script to <bugs@gnu.ai.mit.edu>."
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
-d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \
|
||||||
|
--data-rel | --data-relo | --data-reloc | --data-relocs)
|
||||||
|
RELOCS='--data-relocs'
|
||||||
|
shift ;;
|
||||||
|
-r | --f | --fu | --fun | --func | --funct | --functi | --functio | \
|
||||||
|
--function | --function- | --function-r | --function-re | --function-rel | \
|
||||||
|
--function-relo | --function-reloc | --function-relocs)
|
||||||
|
RELOCS='--function-relocs'
|
||||||
|
shift ;;
|
||||||
--) # Stop option processing.
|
--) # Stop option processing.
|
||||||
shift; break ;;
|
shift; break ;;
|
||||||
|
-*)
|
||||||
|
echo >&2 "\
|
||||||
|
ldd: unrecognized option \`$1'
|
||||||
|
Try \`ldd --help' for more information."
|
||||||
|
exit 1 ;;
|
||||||
*)
|
*)
|
||||||
break ;;
|
break ;;
|
||||||
esac
|
esac
|
||||||
@ -61,14 +78,21 @@ Try \`ldd --help' for more information."
|
|||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
echo "${file}: no such file"
|
echo "${file}: no such file"
|
||||||
elif ${RTLD} --verify "$file"; then
|
exit 1
|
||||||
LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} "$file" && exit 1
|
else
|
||||||
|
test -x "$file" ||
|
||||||
|
echo "warning: you do not have execution permission for \`$file'"
|
||||||
|
if ${RTLD} --verify "$file"; then
|
||||||
|
LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} ${RELOCS} "$file" || exit 1
|
||||||
else
|
else
|
||||||
echo ' not a dynamic executable'
|
echo ' not a dynamic executable'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
exit ;;
|
exit ;;
|
||||||
*)
|
*)
|
||||||
set -e # Bail out immediately if ${RTLD} loses on any argument.
|
set -e # Bail out immediately if ${RTLD} loses on any argument.
|
||||||
|
result=0
|
||||||
for file; do
|
for file; do
|
||||||
echo "${file}:"
|
echo "${file}:"
|
||||||
case "$file" in
|
case "$file" in
|
||||||
@ -76,13 +100,19 @@ Try \`ldd --help' for more information."
|
|||||||
*) file="./$file" ;;
|
*) file="./$file" ;;
|
||||||
esac
|
esac
|
||||||
if test ! -f "$file"; then
|
if test ! -f "$file"; then
|
||||||
echo "$file: no such file"
|
echo "${file}: no such file"
|
||||||
elif ${RTLD} --verify "$file"; then
|
result=1
|
||||||
LD_TRACE_LOADED_OBJECTS=1 ${RTLD} "$file"
|
else
|
||||||
|
test -x "$file" ||
|
||||||
|
echo "warning: you do not have execution permission for \`$file'"
|
||||||
|
if ${RTLD} --verify "$file"; then
|
||||||
|
LD_TRACE_LOADED_OBJECTS=1 ${RTLD} ${RELOCS} "$file" || result=1
|
||||||
else
|
else
|
||||||
echo ' not a dynamic executable'
|
echo ' not a dynamic executable'
|
||||||
|
result=1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit $result
|
||||||
|
20
elf/link.h
20
elf/link.h
@ -137,6 +137,12 @@ struct link_map
|
|||||||
unsigned int l_global:1; /* Nonzero if object in _dl_global_scope. */
|
unsigned int l_global:1; /* Nonzero if object in _dl_global_scope. */
|
||||||
unsigned int l_reserved:2; /* Reserved for internal use. */
|
unsigned int l_reserved:2; /* Reserved for internal use. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Function used as argument for `_dl_receive_error' function. The
|
||||||
|
arguments are the error string and the objname the error occurred
|
||||||
|
in. */
|
||||||
|
typedef void (*receiver_fct) (const char *, const char *);
|
||||||
|
|
||||||
/* Internal functions of the run-time dynamic linker.
|
/* Internal functions of the run-time dynamic linker.
|
||||||
These can be accessed if you link again the dynamic linker
|
These can be accessed if you link again the dynamic linker
|
||||||
@ -161,6 +167,11 @@ extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
|
|||||||
are concatenated to form the message to print. */
|
are concatenated to form the message to print. */
|
||||||
extern void _dl_sysdep_message (const char *string, ...);
|
extern void _dl_sysdep_message (const char *string, ...);
|
||||||
|
|
||||||
|
/* OS-dependent function to write a message on the standard error.
|
||||||
|
All arguments are `const char *'; args until a null pointer
|
||||||
|
are concatenated to form the message to print. */
|
||||||
|
extern void _dl_sysdep_error (const char *string, ...);
|
||||||
|
|
||||||
/* OS-dependent function to give a fatal error message and exit
|
/* OS-dependent function to give a fatal error message and exit
|
||||||
when the dynamic linker fails before the program is fully linked.
|
when the dynamic linker fails before the program is fully linked.
|
||||||
All arguments are `const char *'; args until a null pointer
|
All arguments are `const char *'; args until a null pointer
|
||||||
@ -177,11 +188,9 @@ extern int _dl_secure;
|
|||||||
zero; OBJECT is the name of the problematical shared object, or null if
|
zero; OBJECT is the name of the problematical shared object, or null if
|
||||||
it is a general problem; ERRSTRING is a string describing the specific
|
it is a general problem; ERRSTRING is a string describing the specific
|
||||||
problem. */
|
problem. */
|
||||||
|
|
||||||
extern void _dl_signal_error (int errcode,
|
extern void _dl_signal_error (int errcode,
|
||||||
const char *object,
|
const char *object,
|
||||||
const char *errstring)
|
const char *errstring);
|
||||||
__attribute__ ((__noreturn__));
|
|
||||||
|
|
||||||
/* Call OPERATE, catching errors from `dl_signal_error'. If there is no
|
/* 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
|
error, *ERRSTRING is set to null. If there is an error, *ERRSTRING and
|
||||||
@ -192,6 +201,11 @@ extern int _dl_catch_error (char **errstring,
|
|||||||
const char **object,
|
const char **object,
|
||||||
void (*operate) (void));
|
void (*operate) (void));
|
||||||
|
|
||||||
|
/* Call OPERATE, receiving errors from `dl_signal_error'. Unlike
|
||||||
|
`_dl_catch_error' the operation is resumed after the OPERATE
|
||||||
|
function returns. */
|
||||||
|
extern void _dl_receive_error (receiver_fct fct, void (*operate) (void));
|
||||||
|
|
||||||
|
|
||||||
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
|
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
|
||||||
_dl_catch_error. Returns zero for success, nonzero for failure; and
|
_dl_catch_error. Returns zero for success, nonzero for failure; and
|
||||||
|
76
elf/rtld.c
76
elf/rtld.c
@ -44,6 +44,10 @@ extern void *_dl_sysdep_read_whole_file (const char *filename,
|
|||||||
size_t *filesize_ptr,
|
size_t *filesize_ptr,
|
||||||
int mmap_prot);
|
int mmap_prot);
|
||||||
|
|
||||||
|
/* Helper function to handle errors while resolving symbols. */
|
||||||
|
static void print_unresolved (const char *errstring, const char *objname);
|
||||||
|
|
||||||
|
|
||||||
int _dl_argc;
|
int _dl_argc;
|
||||||
char **_dl_argv;
|
char **_dl_argv;
|
||||||
const char *_dl_rpath;
|
const char *_dl_rpath;
|
||||||
@ -142,11 +146,19 @@ dl_main (const ElfW(Phdr) *phdr,
|
|||||||
enum { normal, list, verify, trace } mode;
|
enum { normal, list, verify, trace } mode;
|
||||||
struct link_map **preloads;
|
struct link_map **preloads;
|
||||||
unsigned int npreloads;
|
unsigned int npreloads;
|
||||||
|
const char *preloadlist;
|
||||||
size_t file_size;
|
size_t file_size;
|
||||||
char *file;
|
char *file;
|
||||||
|
|
||||||
mode = getenv ("LD_TRACE_LOADED_OBJECTS") != NULL ? trace : normal;
|
mode = getenv ("LD_TRACE_LOADED_OBJECTS") != NULL ? trace : normal;
|
||||||
|
|
||||||
|
/* LAZY is determined by the parameters --datadeps and --function-deps
|
||||||
|
if we trace the binary. */
|
||||||
|
if (mode == trace)
|
||||||
|
lazy = -1;
|
||||||
|
else
|
||||||
|
lazy = !__libc_enable_secure && *(getenv ("LD_BIND_NOW") ?: "") == '\0';
|
||||||
|
|
||||||
/* Set up a flag which tells we are just starting. */
|
/* Set up a flag which tells we are just starting. */
|
||||||
_dl_starting_up = 1;
|
_dl_starting_up = 1;
|
||||||
|
|
||||||
@ -186,9 +198,11 @@ of this helper program; chances are you did not intend to run this program.\n",
|
|||||||
/* Note the place where the dynamic linker actually came from. */
|
/* Note the place where the dynamic linker actually came from. */
|
||||||
_dl_rtld_map.l_name = _dl_argv[0];
|
_dl_rtld_map.l_name = _dl_argv[0];
|
||||||
|
|
||||||
|
while (_dl_argc > 1)
|
||||||
if (! strcmp (_dl_argv[1], "--list"))
|
if (! strcmp (_dl_argv[1], "--list"))
|
||||||
{
|
{
|
||||||
mode = list;
|
mode = list;
|
||||||
|
lazy = -1; /* This means do no dependency analysis. */
|
||||||
|
|
||||||
++_dl_skip_args;
|
++_dl_skip_args;
|
||||||
--_dl_argc;
|
--_dl_argc;
|
||||||
@ -202,6 +216,26 @@ of this helper program; chances are you did not intend to run this program.\n",
|
|||||||
--_dl_argc;
|
--_dl_argc;
|
||||||
++_dl_argv;
|
++_dl_argv;
|
||||||
}
|
}
|
||||||
|
else if (! strcmp (_dl_argv[1], "--data-relocs"))
|
||||||
|
{
|
||||||
|
mode = trace;
|
||||||
|
lazy = 1; /* This means do only data relocation analysis. */
|
||||||
|
|
||||||
|
++_dl_skip_args;
|
||||||
|
--_dl_argc;
|
||||||
|
++_dl_argv;
|
||||||
|
}
|
||||||
|
else if (! strcmp (_dl_argv[1], "--function-relocs"))
|
||||||
|
{
|
||||||
|
mode = trace;
|
||||||
|
lazy = 0; /* This means do also function relocation analysis. */
|
||||||
|
|
||||||
|
++_dl_skip_args;
|
||||||
|
--_dl_argc;
|
||||||
|
++_dl_argv;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
++_dl_skip_args;
|
++_dl_skip_args;
|
||||||
--_dl_argc;
|
--_dl_argc;
|
||||||
@ -311,24 +345,23 @@ of this helper program; chances are you did not intend to run this program.\n",
|
|||||||
preloads = NULL;
|
preloads = NULL;
|
||||||
npreloads = 0;
|
npreloads = 0;
|
||||||
|
|
||||||
if (! __libc_enable_secure)
|
preloadlist = getenv ("LD_PRELOAD");
|
||||||
{
|
|
||||||
const char *preloadlist = getenv ("LD_PRELOAD");
|
|
||||||
if (preloadlist)
|
if (preloadlist)
|
||||||
{
|
{
|
||||||
/* The LD_PRELOAD environment variable gives a white space
|
/* The LD_PRELOAD environment variable gives a white space
|
||||||
separated list of libraries that are loaded before the
|
separated list of libraries that are loaded before the
|
||||||
executable's dependencies and prepended to the global
|
executable's dependencies and prepended to the global scope
|
||||||
scope list. */
|
list. If the binary is running setuid all elements
|
||||||
|
containing a '/' are ignored since it is insecure. */
|
||||||
char *list = strdupa (preloadlist);
|
char *list = strdupa (preloadlist);
|
||||||
char *p;
|
char *p;
|
||||||
while ((p = strsep (&list, " ")) != NULL)
|
while ((p = strsep (&list, " ")) != NULL)
|
||||||
|
if (! __libc_enable_secure || strchr (p, '/') == NULL)
|
||||||
{
|
{
|
||||||
(void) _dl_map_object (NULL, p, lt_library, 0);
|
(void) _dl_map_object (NULL, p, lt_library, 0);
|
||||||
++npreloads;
|
++npreloads;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Read the contents of the file. */
|
/* Read the contents of the file. */
|
||||||
file = _dl_sysdep_read_whole_file ("/etc/ld.so.preload", &file_size,
|
file = _dl_sysdep_read_whole_file ("/etc/ld.so.preload", &file_size,
|
||||||
@ -496,12 +529,31 @@ of this helper program; chances are you did not intend to run this program.\n",
|
|||||||
*--bp = '0';
|
*--bp = '0';
|
||||||
_dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
|
_dl_sysdep_message (" in object at 0x", bp, "\n", NULL);
|
||||||
}
|
}
|
||||||
|
else if (lazy >= 0)
|
||||||
|
{
|
||||||
|
/* We have to do symbol dependency testing. */
|
||||||
|
void doit (void)
|
||||||
|
{
|
||||||
|
_dl_relocate_object (l, _dl_object_relocation_scope (l), lazy);
|
||||||
|
}
|
||||||
|
|
||||||
|
l = _dl_loaded;
|
||||||
|
while (l->l_next)
|
||||||
|
l = l->l_next;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (l != &_dl_rtld_map && l->l_opencount > 0)
|
||||||
|
{
|
||||||
|
_dl_receive_error (print_unresolved, doit);
|
||||||
|
*_dl_global_scope_end = NULL;
|
||||||
|
}
|
||||||
|
l = l->l_prev;
|
||||||
|
} while (l);
|
||||||
|
}
|
||||||
|
|
||||||
_exit (0);
|
_exit (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
lazy = !__libc_enable_secure && *(getenv ("LD_BIND_NOW") ?: "") == '\0';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
/* Now we have all the objects loaded. Relocate them all except for
|
/* 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
|
the dynamic linker itself. We do this in reverse order so that copy
|
||||||
@ -573,3 +625,11 @@ of this helper program; chances are you did not intend to run this program.\n",
|
|||||||
/* Once we return, _dl_sysdep_start will invoke
|
/* Once we return, _dl_sysdep_start will invoke
|
||||||
the DT_INIT functions and then *USER_ENTRY. */
|
the DT_INIT functions and then *USER_ENTRY. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This is a little helper function for resolving symbols while
|
||||||
|
tracing the binary. */
|
||||||
|
static void
|
||||||
|
print_unresolved (const char *errstring, const char *objname)
|
||||||
|
{
|
||||||
|
_dl_sysdep_error (errstring, " (", objname, ")\n", NULL);
|
||||||
|
}
|
||||||
|
@ -224,8 +224,20 @@ extern const char _libc_intl_domainname[];
|
|||||||
warning message MSG. */
|
warning message MSG. */
|
||||||
#ifdef HAVE_GNU_LD
|
#ifdef HAVE_GNU_LD
|
||||||
#ifdef HAVE_ELF
|
#ifdef HAVE_ELF
|
||||||
|
|
||||||
|
/* We want the .gnu.warning.SYMBOL section to be unallocated. */
|
||||||
|
#ifdef HAVE_ASM_PREVIOUS_DIRECTIVE
|
||||||
|
#define __make_section_unallocated(section_string) \
|
||||||
|
asm(".section " section_string "; .previous");
|
||||||
|
#elif defined (HAVE_ASM_POPSECTION_DIRECTIVE)
|
||||||
|
#define __make_section_unallocated(section_string) \
|
||||||
|
asm(".pushsection " section_string "; .popsection");
|
||||||
|
#else
|
||||||
|
#define __make_section_unallocated(section_string)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define link_warning(symbol, msg) \
|
#define link_warning(symbol, msg) \
|
||||||
asm(".section .gnu.warning." #symbol "; .previous"); \
|
__make_section_unallocated (".gnu.warning." #symbol) \
|
||||||
static const char __evoke_link_warning_##symbol[] \
|
static const char __evoke_link_warning_##symbol[] \
|
||||||
__attribute__ ((section (".gnu.warning." #symbol))) = msg;
|
__attribute__ ((section (".gnu.warning." #symbol))) = msg;
|
||||||
#else
|
#else
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1995, 1996, 1997 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
|
||||||
@ -32,7 +32,7 @@ routines := \
|
|||||||
\
|
\
|
||||||
clearerr feof ferror fgetc fileno fputc freopen fseek getc getchar \
|
clearerr feof ferror fgetc fileno fputc freopen fseek getc getchar \
|
||||||
memstream pclose putc putchar rewind setbuf setlinebuf vasprintf \
|
memstream pclose putc putchar rewind setbuf setlinebuf vasprintf \
|
||||||
vdprintf vscanf vsnprintf obprintf fcloseall \
|
iovdprintf vscanf vsnprintf obprintf fcloseall \
|
||||||
\
|
\
|
||||||
libc_fatal
|
libc_fatal
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
|
# Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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
|
||||||
@ -27,7 +27,7 @@ dist-headers := malloc.h
|
|||||||
headers := $(dist-headers) obstack.h
|
headers := $(dist-headers) obstack.h
|
||||||
tests := mallocbug
|
tests := mallocbug
|
||||||
|
|
||||||
distribute = thread-m.h mtrace.awk
|
distribute = thread-m.h mtrace.awk mcheck-init.c mcheck.h
|
||||||
|
|
||||||
# Things which get pasted together into gmalloc.c.
|
# Things which get pasted together into gmalloc.c.
|
||||||
gmalloc-routines := malloc morecore
|
gmalloc-routines := malloc morecore
|
||||||
|
@ -336,7 +336,7 @@ value. Use @code{readdir_r} when this is critical.
|
|||||||
@comment dirent.h
|
@comment dirent.h
|
||||||
@comment GNU
|
@comment GNU
|
||||||
@deftypefun int readdir_r (DIR *@var{dirstream}, struct *@var{entry}, struct **@var{result})
|
@deftypefun int readdir_r (DIR *@var{dirstream}, struct *@var{entry}, struct **@var{result})
|
||||||
This function is the reentrant version of @code{reentrant}. Like
|
This function is the reentrant version of @code{readdir}. Like
|
||||||
@code{readdir} it returns the next entry from the directory. But to
|
@code{readdir} it returns the next entry from the directory. But to
|
||||||
prevent conflicts for simultaneously running threads the result is not
|
prevent conflicts for simultaneously running threads the result is not
|
||||||
stored in some internal memory. Instead the argument @var{entry} has to
|
stored in some internal memory. Instead the argument @var{entry} has to
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1996, 1997 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,7 +24,7 @@ subdir := nss
|
|||||||
headers := nss.h
|
headers := nss.h
|
||||||
distribute := nsswitch.h XXX-lookup.c getXXbyYY.c getXXbyYY_r.c \
|
distribute := nsswitch.h XXX-lookup.c getXXbyYY.c getXXbyYY_r.c \
|
||||||
getXXent.c getXXent_r.c databases.def \
|
getXXent.c getXXent_r.c databases.def \
|
||||||
nsswitch.conf db-Makefile
|
nsswitch.conf db-Makefile digits_dots.c
|
||||||
|
|
||||||
# This is the trivial part which goes into libc itself.
|
# This is the trivial part which goes into libc itself.
|
||||||
routines = nsswitch $(addsuffix -lookup,$(databases))
|
routines = nsswitch $(addsuffix -lookup,$(databases))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995, 1996, 1997 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
|
||||||
@ -33,7 +33,7 @@ libresolv-routines := gethnamaddr res_comp res_debug \
|
|||||||
res_data res_mkquery res_query res_send \
|
res_data res_mkquery res_query res_send \
|
||||||
inet_net_ntop inet_net_pton inet_neta base64
|
inet_net_ntop inet_net_pton inet_neta base64
|
||||||
|
|
||||||
subdirs-dirs = nss_dns
|
subdir-dirs = nss_dns
|
||||||
vpath %.c nss_dns
|
vpath %.c nss_dns
|
||||||
|
|
||||||
libnss_dns-routines := dns-host dns-network
|
libnss_dns-routines := dns-host dns-network
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
/* Operating system support for run-time dynamic linker. Generic Unix version.
|
/* Operating system support for run-time dynamic linker. Generic Unix version.
|
||||||
Copyright (C) 1995, 96 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996, 1997 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
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <elf.h>
|
#include <elf.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -192,6 +192,22 @@ _dl_sysdep_fatal (const char *msg, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_sysdep_error (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
__write (STDERR_FILENO, msg, len);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_dl_sysdep_message (const char *msg, ...)
|
_dl_sysdep_message (const char *msg, ...)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Definition of `struct sockaddr_*' common members. Generic/4.2 BSD version.
|
/* Definition of `struct sockaddr_*' common members. Generic/4.2 BSD version.
|
||||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996, 1997 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
|
||||||
@ -21,12 +21,15 @@
|
|||||||
#define _SOCKADDRCOM_H 1
|
#define _SOCKADDRCOM_H 1
|
||||||
|
|
||||||
|
|
||||||
|
/* POSIX.1g specifies this type name for the `sa_family' member. */
|
||||||
|
typedef unsigned short int sa_family_t;
|
||||||
|
|
||||||
/* This macro is used to declare the initial common members
|
/* This macro is used to declare the initial common members
|
||||||
of the data types used for socket addresses, `struct sockaddr',
|
of the data types used for socket addresses, `struct sockaddr',
|
||||||
`struct sockaddr_in', `struct sockaddr_un', etc. */
|
`struct sockaddr_in', `struct sockaddr_un', etc. */
|
||||||
|
|
||||||
#define __SOCKADDR_COMMON(sa_prefix) \
|
#define __SOCKADDR_COMMON(sa_prefix) \
|
||||||
unsigned short int sa_prefix##family
|
sa_family_t sa_prefix##family
|
||||||
|
|
||||||
#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int))
|
#define __SOCKADDR_COMMON_SIZE (sizeof (unsigned short int))
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Operating system support for run-time dynamic linker. Hurd version.
|
/* Operating system support for run-time dynamic linker. Hurd version.
|
||||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996, 1997 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
|
||||||
@ -238,6 +238,29 @@ _dl_sysdep_fatal (const char *msg, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
_dl_sysdep_error (const char *msg, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start (ap, msg);
|
||||||
|
do
|
||||||
|
{
|
||||||
|
size_t len = strlen (msg);
|
||||||
|
mach_msg_type_number_t nwrote;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (__io_write (_hurd_init_dtable[2], msg, len, -1, &nwrote))
|
||||||
|
break;
|
||||||
|
len -= nwrote;
|
||||||
|
msg += nwrote;
|
||||||
|
} while (nwrote > 0);
|
||||||
|
msg = va_arg (ap, const char *);
|
||||||
|
} while (msg);
|
||||||
|
va_end (ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_dl_sysdep_message (const char *msg, ...)
|
_dl_sysdep_message (const char *msg, ...)
|
||||||
{
|
{
|
||||||
|
86
sysdeps/sparc/fpu_control.h
Normal file
86
sysdeps/sparc/fpu_control.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/* FPU control word bits. SPARC version.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Miguel de Icaza
|
||||||
|
|
||||||
|
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 _FPU_CONTROL_H
|
||||||
|
#define _FPU_CONTROL_H 1
|
||||||
|
|
||||||
|
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
/* precision control */
|
||||||
|
#define _FPU_EXTENDED 0x00000000 /* RECOMMENDED */
|
||||||
|
#define _FPU_DOUBLE 0x20000000
|
||||||
|
#define _FPU_80BIT 0x30000000
|
||||||
|
#define _FPU_SINGLE 0x10000000 /* DO NOT USE */
|
||||||
|
|
||||||
|
/* rounding control / Sparc */
|
||||||
|
#define _FPU_RC_NEAREST 0x0 /* RECOMMENDED */
|
||||||
|
#define _FPU_RC_DOWN 0x80000000
|
||||||
|
#define _FPU_RC_UP 0xc0000000
|
||||||
|
#define _FPU_RC_ZERO 0x40000000
|
||||||
|
|
||||||
|
#define _FPU_RESERVED 0x300000 /* Reserved bits in cw */
|
||||||
|
|
||||||
|
|
||||||
|
/* Now two recommended cw */
|
||||||
|
|
||||||
|
/* Linux default:
|
||||||
|
- extended precision
|
||||||
|
- rounding to nearest
|
||||||
|
- exceptions on overflow, zero divide and NaN */
|
||||||
|
#define _FPU_DEFAULT 0x1f
|
||||||
|
|
||||||
|
/* IEEE: same as above, but exceptions */
|
||||||
|
#define _FPU_IEEE 0x0
|
||||||
|
|
||||||
|
/* private namespace. It should only be used by crt0.o. */
|
||||||
|
extern unsigned short __fpu_control;
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
/* called by crt0.o. It can be used to manipulate 387 control word. */
|
||||||
|
extern void __setfpucw __P ((unsigned short));
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
/* Type of the control word. */
|
||||||
|
typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__HI__)));
|
||||||
|
|
||||||
|
#define _FPU_GETCW(cw) __asm__ ("st %%fsr,%0" : "=m" (*&cw))
|
||||||
|
#define _FPU_SETCW(cw) __asm__ ("ld %0,%%fsr" : "=m" (*&cw))
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* The intel original macros */
|
||||||
|
/* Macros for accessing the hardware control word. */
|
||||||
|
#define _FPU_GETCW(cw) __asm__ ("fnstcw %0" : "=m" (*&cw))
|
||||||
|
#define _FPU_SETCW(cw) __asm__ ("fldcw %0" : : "m" (*&cw))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Default control word set at startup. */
|
||||||
|
extern fpu_control_t __fpu_control;
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
/* Called at startup. It can be used to manipulate fpu control register. */
|
||||||
|
extern void __setfpucw __P ((fpu_control_t));
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* fpu_control.h */
|
42
sysdeps/stub/sysv_signal.c
Normal file
42
sysdeps/stub/sysv_signal.c
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/* Copyright (C) 1991, 1992, 1996, 1997 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. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
|
/* Set the handler for the signal SIG to HANDLER,
|
||||||
|
returning the old handler, or SIG_ERR on error. */
|
||||||
|
__sighandler_t
|
||||||
|
__sysv_signal (sig, handler)
|
||||||
|
int sig;
|
||||||
|
__sighandler_t handler;
|
||||||
|
{
|
||||||
|
/* Check signal extents to protect __sigismember. */
|
||||||
|
if (handler == SIG_ERR || sig < 1 || sig >= NSIG)
|
||||||
|
{
|
||||||
|
__set_errno (EINVAL);
|
||||||
|
return SIG_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
__set_errno (ENOSYS);
|
||||||
|
|
||||||
|
return SIG_ERR;
|
||||||
|
}
|
||||||
|
weak_alias (__sysv_signal, sysv_signal)
|
||||||
|
|
||||||
|
stub_warning (sysv_signal)
|
@ -1,5 +1,5 @@
|
|||||||
/* Definition of `struct sockaddr_*' common members. 4.4 BSD version.
|
/* Definition of `struct sockaddr_*' common members. 4.4 BSD version.
|
||||||
Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1995, 1996, 1997 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
|
||||||
@ -21,13 +21,16 @@
|
|||||||
#define _SOCKADDRCOM_H 1
|
#define _SOCKADDRCOM_H 1
|
||||||
|
|
||||||
|
|
||||||
|
/* POSIX.1g specifies this type name for the `sa_family' member. */
|
||||||
|
typedef unsigned char sa_family_t;
|
||||||
|
|
||||||
/* This macro is used to declare the initial common members
|
/* This macro is used to declare the initial common members
|
||||||
of the data types used for socket addresses, `struct sockaddr',
|
of the data types used for socket addresses, `struct sockaddr',
|
||||||
`struct sockaddr_in', `struct sockaddr_un', etc. */
|
`struct sockaddr_in', `struct sockaddr_un', etc. */
|
||||||
|
|
||||||
#define __SOCKADDR_COMMON(sa_prefix) \
|
#define __SOCKADDR_COMMON(sa_prefix) \
|
||||||
unsigned char sa_prefix##len; \
|
unsigned char sa_prefix##len; \
|
||||||
unsigned char sa_prefix##family
|
sa_family_t sa_prefix##family
|
||||||
|
|
||||||
#define __SOCKADDR_COMMON_SIZE (2 * sizeof (unsigned char))
|
#define __SOCKADDR_COMMON_SIZE (2 * sizeof (unsigned char))
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
init-first.h
|
init-first.h
|
||||||
|
kernel_sigaction.h
|
||||||
kernel_termios.h
|
kernel_termios.h
|
||||||
llseek.c
|
llseek.c
|
||||||
siglist.h
|
siglist.h
|
||||||
|
@ -6,3 +6,4 @@ clone.S
|
|||||||
sys/io.h
|
sys/io.h
|
||||||
kernel_termios.h
|
kernel_termios.h
|
||||||
sys/acct.h
|
sys/acct.h
|
||||||
|
sys/procfs.h
|
||||||
|
@ -1 +1,146 @@
|
|||||||
#include <linux/if_arp.h>
|
/* Definitions for Address Resolution Protocol.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
|
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. */
|
||||||
|
|
||||||
|
/* Based on the 4.4BSD and Linux version of this file. */
|
||||||
|
|
||||||
|
#ifndef _NET_IF_ARP_H
|
||||||
|
|
||||||
|
#define _NET_IF_ARP_H 1
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
__BEGIN_DECLS
|
||||||
|
|
||||||
|
/* This structure defines an ethernet arp header. */
|
||||||
|
|
||||||
|
/* ARP protocol opcodes. */
|
||||||
|
#define ARPOP_REQUEST 1 /* ARP request. */
|
||||||
|
#define ARPOP_REPLY 2 /* ARP reply. */
|
||||||
|
#define ARPOP_RREQUEST 3 /* RARP request. */
|
||||||
|
#define ARPOP_RREPLY 4 /* RARP reply. */
|
||||||
|
|
||||||
|
/* See RFC 826 for protocol description. ARP packets are variable
|
||||||
|
in size; the arphdr structure defines the fixed-length portion.
|
||||||
|
Protocol type values are the same as those for 10 Mb/s Ethernet.
|
||||||
|
It is followed by the variable-sized fields ar_sha, arp_spa,
|
||||||
|
arp_tha and arp_tpa in that order, according to the lengths
|
||||||
|
specified. Field names used correspond to RFC 826. */
|
||||||
|
|
||||||
|
struct arphdr
|
||||||
|
{
|
||||||
|
unsigned short int ar_hrd; /* Format of hardware address. */
|
||||||
|
unsigned short int ar_pro; /* Format of protocol address. */
|
||||||
|
unsigned char ar_hln; /* Length of hardware address. */
|
||||||
|
unsigned char ar_pln; /* Length of protocol address. */
|
||||||
|
unsigned short int ar_op; /* ARP opcode (command). */
|
||||||
|
#if 0
|
||||||
|
/* Ethernet looks like this : This bit is variable sized
|
||||||
|
however... */
|
||||||
|
unsigned char __ar_sha[ETH_ALEN]; /* Sender hardware address. */
|
||||||
|
unsigned char __ar_sip[4]; /* Sender IP address. */
|
||||||
|
unsigned char __ar_tha[ETH_ALEN]; /* Target hardware address. */
|
||||||
|
unsigned char __ar_tip[4]; /* Target IP address. */
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* ARP protocol HARDWARE identifiers. */
|
||||||
|
#define ARPHRD_NETROM 0 /* From KA9Q: NET/ROM pseudo. */
|
||||||
|
#define ARPHRD_ETHER 1 /* Ethernet 10Mbps. */
|
||||||
|
#define ARPHRD_EETHER 2 /* Experimental Ethernet. */
|
||||||
|
#define ARPHRD_AX25 3 /* AX.25 Level 2. */
|
||||||
|
#define ARPHRD_PRONET 4 /* PROnet token ring. */
|
||||||
|
#define ARPHRD_CHAOS 5 /* Chaosnet. */
|
||||||
|
#define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB. */
|
||||||
|
#define ARPHRD_ARCNET 7 /* ARCnet. */
|
||||||
|
#define ARPHRD_APPLETLK 8 /* APPLEtalk. */
|
||||||
|
#define ARPHRD_DLCI 15 /* Frame Relay DLCI. */
|
||||||
|
#define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id). */
|
||||||
|
|
||||||
|
/* Dummy types for non ARP hardware */
|
||||||
|
#define ARPHRD_SLIP 256
|
||||||
|
#define ARPHRD_CSLIP 257
|
||||||
|
#define ARPHRD_SLIP6 258
|
||||||
|
#define ARPHRD_CSLIP6 259
|
||||||
|
#define ARPHRD_RSRVD 260 /* Notional KISS type. */
|
||||||
|
#define ARPHRD_ADAPT 264
|
||||||
|
#define ARPHRD_ROSE 270
|
||||||
|
#define ARPHRD_X25 271 /* CCITT X.25. */
|
||||||
|
#define ARPHRD_PPP 512
|
||||||
|
|
||||||
|
#define ARPHRD_TUNNEL 768 /* IPIP tunnel. */
|
||||||
|
#define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */
|
||||||
|
#define ARPHRD_FRAD 770 /* Frame Relay Access Device. */
|
||||||
|
#define ARPHRD_SKIP 771 /* SKIP vif. */
|
||||||
|
#define ARPHRD_LOOPBACK 772 /* Loopback device. */
|
||||||
|
#define ARPHRD_LOCALTLK 773 /* Localtalk device. */
|
||||||
|
#define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface. */
|
||||||
|
#define ARPHRD_BIF 775 /* AP1000 BIF. */
|
||||||
|
#define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4. */
|
||||||
|
|
||||||
|
|
||||||
|
/* ARP ioctl request. */
|
||||||
|
struct arpreq
|
||||||
|
{
|
||||||
|
struct sockaddr arp_pa; /* Protocol address. */
|
||||||
|
struct sockaddr arp_ha; /* Hardware address. */
|
||||||
|
int arp_flags; /* Flags. */
|
||||||
|
struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */
|
||||||
|
char arp_dev[16];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct arpreq_old
|
||||||
|
{
|
||||||
|
struct sockaddr arp_pa; /* Protocol address. */
|
||||||
|
struct sockaddr arp_ha; /* Hardware address. */
|
||||||
|
int arp_flags; /* Flags. */
|
||||||
|
struct sockaddr arp_netmask; /* Netmask (only for proxy arps). */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* ARP Flag values. */
|
||||||
|
#define ATF_COM 0x02 /* Completed entry (ha valid). */
|
||||||
|
#define ATF_PERM 0x04 /* Permanent entry. */
|
||||||
|
#define ATF_PUBL 0x08 /* Publish entry. */
|
||||||
|
#define ATF_USETRAILERS 0x10 /* Has requested trailers. */
|
||||||
|
#define ATF_NETMASK 0x20 /* Want to use a netmask (only
|
||||||
|
for proxy entries). */
|
||||||
|
#define ATF_DONTPUB 0x40 /* Don't answer this addresses. */
|
||||||
|
#define ATF_MAGIC 0x80 /* Automatically added entry. */
|
||||||
|
|
||||||
|
|
||||||
|
/* Support for the user space arp daemon, arpd. */
|
||||||
|
#define ARPD_UPDATE 0x01
|
||||||
|
#define ARPD_LOOKUP 0x02
|
||||||
|
#define ARPD_FLUSH 0x03
|
||||||
|
|
||||||
|
struct arpd_request
|
||||||
|
{
|
||||||
|
unsigned short int req; /* Request type. */
|
||||||
|
u_int32_t ip; /* IP address of entry. */
|
||||||
|
unsigned long int dev; /* Device entry is tied to. */
|
||||||
|
unsigned long int stamp;
|
||||||
|
unsigned long int updated;
|
||||||
|
unsigned char ha[MAX_ADDR_LEN]; /* Hardware address. */
|
||||||
|
};
|
||||||
|
|
||||||
|
__END_DECLS
|
||||||
|
|
||||||
|
#endif /* net/if_arp.h */
|
||||||
|
@ -1 +1,3 @@
|
|||||||
|
#include <sys/types.h>
|
||||||
|
typedef u_int32_t __u32;
|
||||||
#include <linux/ppp_defs.h>
|
#include <linux/ppp_defs.h>
|
||||||
|
@ -1 +1,125 @@
|
|||||||
#include <linux/route.h>
|
/* Copyright (C) 1997 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. */
|
||||||
|
|
||||||
|
/* Based on the 4.4BSD and Linux version of this file. */
|
||||||
|
|
||||||
|
#ifndef _NET_ROUTE_H
|
||||||
|
|
||||||
|
#define _NET_ROUTE_H 1
|
||||||
|
#include <features.h>
|
||||||
|
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* This structure gets passed by the SIOCADDRT and SIOCDELRT calls. */
|
||||||
|
struct rtentry
|
||||||
|
{
|
||||||
|
unsigned long int rt_pad1;
|
||||||
|
struct sockaddr rt_dst; /* Target address. */
|
||||||
|
struct sockaddr rt_gateway; /* Gateway addr (RTF_GATEWAY). */
|
||||||
|
struct sockaddr rt_genmask; /* Target network mask (IP). */
|
||||||
|
unsigned short int rt_flags;
|
||||||
|
short int rt_pad2;
|
||||||
|
unsigned long int rt_pad3;
|
||||||
|
unsigned char rt_tos;
|
||||||
|
unsigned char rt_class;
|
||||||
|
short int rt_pad4;
|
||||||
|
short int rt_metric; /* +1 for binary compatibility! */
|
||||||
|
char *rt_dev; /* Forcing the device at add. */
|
||||||
|
unsigned long int rt_mtu; /* Per route MTU/Window. */
|
||||||
|
unsigned long int rt_window; /* Window clamping. */
|
||||||
|
unsigned short int rt_irtt; /* Initial RTT. */
|
||||||
|
};
|
||||||
|
/* Compatibility hack. */
|
||||||
|
#define rt_mss rt_mtu
|
||||||
|
|
||||||
|
|
||||||
|
#define RTF_UP 0x0001 /* Route usable. */
|
||||||
|
#define RTF_GATEWAY 0x0002 /* Destination is a gateway. */
|
||||||
|
|
||||||
|
#define RTF_HOST 0x0004 /* Host entry (net otherwise). */
|
||||||
|
#define RTF_REINSTATE 0x0008 /* Reinstate route after timeout. */
|
||||||
|
#define RTF_DYNAMIC 0x0010 /* Created dyn. (by redirect). */
|
||||||
|
#define RTF_MODIFIED 0x0020 /* Modified dyn. (by redirect). */
|
||||||
|
#define RTF_MTU 0x0040 /* Specific MTU for this route. */
|
||||||
|
#define RTF_MSS RTF_MTU /* Compatibility. */
|
||||||
|
#define RTF_WINDOW 0x0080 /* Per route window clamping. */
|
||||||
|
#define RTF_IRTT 0x0100 /* Initial round trip time. */
|
||||||
|
#define RTF_REJECT 0x0200 /* Reject route. */
|
||||||
|
#define RTF_STATIC 0x0400 /* Manually injected route. */
|
||||||
|
#define RTF_XRESOLVE 0x0800 /* External resolver. */
|
||||||
|
#define RTF_NOFORWARD 0x1000 /* Forwarding inhibited. */
|
||||||
|
#define RTF_THROW 0x2000 /* Go to next class. */
|
||||||
|
#define RTF_NOPMTUDISC 0x4000 /* Do not send packets with DF. */
|
||||||
|
|
||||||
|
/* Bad idea. IPv6 should not use broken IPv4 interface. */
|
||||||
|
|
||||||
|
#define RTF_ADDRCONF 0x0800 /* Announced on link prefix. */
|
||||||
|
#define RTF_INVALID 0x1000
|
||||||
|
#define RTF_DCACHE 0x2000
|
||||||
|
#define RTF_DEFAULT 0x4000 /* Route is a default route. */
|
||||||
|
#define RTF_NEXTHOP 0x8000 /* Non gateway route with nexthop. */
|
||||||
|
|
||||||
|
|
||||||
|
#define RTF_MAGIC 0x10000 /* Route added/deleted authomatically,
|
||||||
|
when interface changes its state. */
|
||||||
|
|
||||||
|
#define RTCF_VALVE 0x00200000
|
||||||
|
#define RTCF_MASQ 0x00400000
|
||||||
|
#define RTCF_NAT 0x00800000
|
||||||
|
#define RTCF_DOREDIRECT 0x01000000
|
||||||
|
#define RTCF_LOG 0x02000000
|
||||||
|
#define RTCF_DIRECTSRC 0x04000000
|
||||||
|
|
||||||
|
#define RTF_LOCAL 0x80000000
|
||||||
|
#define RTF_INTERFACE 0x40000000
|
||||||
|
#define RTF_MULTICAST 0x20000000
|
||||||
|
#define RTF_BROADCAST 0x10000000
|
||||||
|
#define RTF_NAT 0x08000000
|
||||||
|
|
||||||
|
#define RTF_ADDRCLASSMASK 0xF8000000
|
||||||
|
#define RT_ADDRCLASS(flags) ((__u_int32_t) flags >> 23)
|
||||||
|
|
||||||
|
#define RT_TOS(tos) ((tos) & IPTOS_TOS_MASK)
|
||||||
|
|
||||||
|
#define RT_LOCALADDR(flags) ((flags & RTF_ADDRCLASSMASK) \
|
||||||
|
== (RTF_LOCAL|RTF_INTERFACE))
|
||||||
|
|
||||||
|
#define RT_CLASS_UNSPEC 0
|
||||||
|
#define RT_CLASS_DEFAULT 253
|
||||||
|
|
||||||
|
#define RT_CLASS_MAIN 254
|
||||||
|
#define RT_CLASS_LOCAL 255
|
||||||
|
#define RT_CLASS_MAX 255
|
||||||
|
|
||||||
|
|
||||||
|
#define RTMSG_ACK NLMSG_ACK
|
||||||
|
#define RTMSG_OVERRUN NLMSG_OVERRUN
|
||||||
|
|
||||||
|
#define RTMSG_NEWDEVICE 0x11
|
||||||
|
#define RTMSG_DELDEVICE 0x12
|
||||||
|
#define RTMSG_NEWROUTE 0x21
|
||||||
|
#define RTMSG_DELROUTE 0x22
|
||||||
|
#define RTMSG_NEWRULE 0x31
|
||||||
|
#define RTMSG_DELRULE 0x32
|
||||||
|
#define RTMSG_CONTROL 0x40
|
||||||
|
|
||||||
|
#define RTMSG_AR_FAILED 0x51 /* Address Resolution failed. */
|
||||||
|
|
||||||
|
#endif /* net/route.h */
|
||||||
|
2
sysdeps/unix/sysv/linux/sparc/Dist
Normal file
2
sysdeps/unix/sysv/linux/sparc/Dist
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
__sigtrampoline.S
|
||||||
|
clone.S
|
3
sysdeps/unix/sysv/linux/sparc/Makefile
Normal file
3
sysdeps/unix/sysv/linux/sparc/Makefile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ifeq ($(subdir),signal)
|
||||||
|
sysdep_routines += __sigtrampoline
|
||||||
|
endif
|
142
sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S
Normal file
142
sysdeps/unix/sysv/linux/sparc/__sigtrampoline.S
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/* Userland trampoline code for sigaction on Linux/SPARC */
|
||||||
|
/* (C) 1996, 1997 Free Software Foundation, Inc. */
|
||||||
|
/* This file is part of the GNU C Library. */
|
||||||
|
/* Contributed by Miguel de Icaza (miguel@gnu.ai.mit.edu) */
|
||||||
|
/* Many thanks go to David Miller for explaining all this to me */
|
||||||
|
/* miguel@nuclecu.unam.mx */
|
||||||
|
/* Sources: David Miller, 4.4BSD/SPARC code */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
/* For REGWIN_SZ */
|
||||||
|
#include <asm/ptrace.h>
|
||||||
|
#include <asm/psr.h>
|
||||||
|
|
||||||
|
/* The C compiler frame size */
|
||||||
|
#define CCFSZ 96
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
ENTRY(____sparc_signal_trampoline)
|
||||||
|
.global SYMBOL_NAME(____sig_table)
|
||||||
|
|
||||||
|
/* Make room for 32 %f registers + %fsr
|
||||||
|
* this is 132 bytes + alignement = 136
|
||||||
|
* 96 is the C frame size
|
||||||
|
*/
|
||||||
|
save %sp,-136-CCFSZ,%sp
|
||||||
|
|
||||||
|
/* save regular registers */
|
||||||
|
mov %g2,%l2
|
||||||
|
mov %g3,%l3
|
||||||
|
mov %g4,%l4
|
||||||
|
mov %g5,%l5
|
||||||
|
mov %g6,%l6
|
||||||
|
mov %g7,%l7
|
||||||
|
|
||||||
|
/* save fpu registers */
|
||||||
|
ld [%fp+64+16+20],%l0 /* load the psr from sigcontext */
|
||||||
|
sethi %hi(PSR_EF),%l1
|
||||||
|
andcc %l0,%l1,%l0 /* is floating point enabled? */
|
||||||
|
be 1f
|
||||||
|
rd %y,%l1 /* save y anyways */
|
||||||
|
|
||||||
|
/* save fpu registers */
|
||||||
|
st %fsr, [%sp + CCFSZ + 0]
|
||||||
|
std %f0, [%sp + CCFSZ + 8]
|
||||||
|
std %f2, [%sp + CCFSZ + 16]
|
||||||
|
std %f4, [%sp + CCFSZ + 24]
|
||||||
|
std %f6, [%sp + CCFSZ + 32]
|
||||||
|
std %f8, [%sp + CCFSZ + 40]
|
||||||
|
std %f10, [%sp + CCFSZ + 48]
|
||||||
|
std %f12, [%sp + CCFSZ + 56]
|
||||||
|
std %f14, [%sp + CCFSZ + 64]
|
||||||
|
std %f16, [%sp + CCFSZ + 72]
|
||||||
|
std %f18, [%sp + CCFSZ + 80]
|
||||||
|
std %f20, [%sp + CCFSZ + 88]
|
||||||
|
std %f22, [%sp + CCFSZ + 96]
|
||||||
|
std %f24, [%sp + CCFSZ + 104]
|
||||||
|
std %f26, [%sp + CCFSZ + 112]
|
||||||
|
std %f28, [%sp + CCFSZ + 120]
|
||||||
|
std %f30, [%sp + CCFSZ + 128]
|
||||||
|
|
||||||
|
1:
|
||||||
|
/* Load signal number */
|
||||||
|
ld [%fp + REGWIN_SZ],%o0
|
||||||
|
mov %fp,%o1
|
||||||
|
mov 0xfea,%o2
|
||||||
|
|
||||||
|
/* Sanity check */
|
||||||
|
cmp %o0,33
|
||||||
|
bl 1f
|
||||||
|
or %g0,%g0,%g1 /*Call sys_setup */
|
||||||
|
t 0x10
|
||||||
|
1:
|
||||||
|
#ifdef __PIC__
|
||||||
|
/* Save return address */
|
||||||
|
mov %o7,%o4
|
||||||
|
___sxx:
|
||||||
|
call ___syy
|
||||||
|
nop
|
||||||
|
___syy:
|
||||||
|
sethi %hi(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5
|
||||||
|
or %o5,%lo(_GLOBAL_OFFSET_TABLE_-(___sxx-.)),%o5
|
||||||
|
add %o7,%o5,%o5
|
||||||
|
/* restore return address */
|
||||||
|
mov %o4,%o7
|
||||||
|
mov %o5,%o4
|
||||||
|
/* o4 has the GOT pointer */
|
||||||
|
#endif
|
||||||
|
sethi %hi(SYMBOL_NAME(____sig_table)),%o5
|
||||||
|
or %o5,%lo(SYMBOL_NAME(____sig_table)),%o5
|
||||||
|
#ifdef __PIC__
|
||||||
|
add %o5,%o4,%o4
|
||||||
|
ld [%o4],%o5
|
||||||
|
#endif
|
||||||
|
sll %o0,2,%o4
|
||||||
|
add %o5,%o4,%o4
|
||||||
|
ld [%o4],%o4
|
||||||
|
ld [%fp + REGWIN_SZ + 4],%o1 /* Load subcode */
|
||||||
|
ld [%fp + REGWIN_SZ + 8],%o2 /* pointer to sigcontext */
|
||||||
|
call %o4
|
||||||
|
ld [%fp + REGWIN_SZ + 12],%o3 /* Address where signal ocurred */
|
||||||
|
|
||||||
|
/* handler returned, restore state */
|
||||||
|
tst %l0
|
||||||
|
be 1f
|
||||||
|
wr %l1,%g0,%y
|
||||||
|
|
||||||
|
/* fpu restoration */
|
||||||
|
ld [%sp + CCFSZ + 0], %fsr
|
||||||
|
ldd [%sp + CCFSZ + 8], %f0
|
||||||
|
ldd [%sp + CCFSZ + 16], %f2
|
||||||
|
ldd [%sp + CCFSZ + 24], %f4
|
||||||
|
ldd [%sp + CCFSZ + 32], %f6
|
||||||
|
ldd [%sp + CCFSZ + 40], %f8
|
||||||
|
ldd [%sp + CCFSZ + 48], %f10
|
||||||
|
ldd [%sp + CCFSZ + 56], %f12
|
||||||
|
ldd [%sp + CCFSZ + 64], %f14
|
||||||
|
ldd [%sp + CCFSZ + 72], %f16
|
||||||
|
ldd [%sp + CCFSZ + 80], %f18
|
||||||
|
ldd [%sp + CCFSZ + 88], %f20
|
||||||
|
ldd [%sp + CCFSZ + 96], %f22
|
||||||
|
ldd [%sp + CCFSZ + 104], %f24
|
||||||
|
ldd [%sp + CCFSZ + 112], %f26
|
||||||
|
ldd [%sp + CCFSZ + 120], %f28
|
||||||
|
ldd [%sp + CCFSZ + 128], %f30
|
||||||
|
|
||||||
|
1:
|
||||||
|
mov %l2,%g2
|
||||||
|
mov %l3,%g3
|
||||||
|
mov %l4,%g4
|
||||||
|
mov %l5,%g5
|
||||||
|
mov %l6,%g6
|
||||||
|
mov %l7,%g7
|
||||||
|
|
||||||
|
/* call sigreturn */
|
||||||
|
restore %g0,SYS_sigreturn,%g1 /* register back and set syscall */
|
||||||
|
add %sp,64+16,%o0
|
||||||
|
t 0x10
|
||||||
|
/* if we return, sysreturn failed */
|
||||||
|
mov SYS_exit,%g1
|
||||||
|
t 0x10
|
56
sysdeps/unix/sysv/linux/sparc/brk.c
Normal file
56
sysdeps/unix/sysv/linux/sparc/brk.c
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* brk system call for Linux/SPARC.
|
||||||
|
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx)
|
||||||
|
|
||||||
|
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 <errno.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sysdep.h>
|
||||||
|
|
||||||
|
/* This must be initialized data because commons can't have aliases. */
|
||||||
|
void *__curbrk = 0;
|
||||||
|
|
||||||
|
/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
|
||||||
|
to work around different old braindamage in the old Linux ELF dynamic
|
||||||
|
linker. */
|
||||||
|
weak_alias (__curbrk, ___brk_addr)
|
||||||
|
|
||||||
|
int
|
||||||
|
__brk (void *addr)
|
||||||
|
{
|
||||||
|
void *newbrk, *scratch;
|
||||||
|
|
||||||
|
asm ("mov %1, %%g1\n\t"
|
||||||
|
"mov %2, %%o0\n\t"
|
||||||
|
"t 0x10\n\t"
|
||||||
|
"mov %%o0, %0\n\t"
|
||||||
|
: "=r" (newbrk)
|
||||||
|
: "0" (SYS_brk), "r" (addr)
|
||||||
|
: "g1", "o0");
|
||||||
|
|
||||||
|
__curbrk = newbrk;
|
||||||
|
|
||||||
|
if (newbrk < addr)
|
||||||
|
{
|
||||||
|
__set_errno (ENOMEM);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
weak_alias (__brk, brk)
|
35
sysdeps/unix/sysv/linux/sparc/profil-counter.h
Normal file
35
sysdeps/unix/sysv/linux/sparc/profil-counter.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/* Low-level statistical profiling support function. Linux/SPARC version.
|
||||||
|
Copyright (C) 1997 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. */
|
||||||
|
|
||||||
|
#include <sigcontext.h>
|
||||||
|
|
||||||
|
void
|
||||||
|
profil_counter (int signo, __siginfo_t si)
|
||||||
|
{
|
||||||
|
extern int __sparc_old_signals;
|
||||||
|
|
||||||
|
if (__sparc_old_signals)
|
||||||
|
{
|
||||||
|
struct sigcontext_struct *s = (void *) &si;
|
||||||
|
|
||||||
|
profil_count ((void *) s->sigc_pc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
profil_count ((void *) si.si_regs.pc);
|
||||||
|
}
|
127
sysdeps/unix/sysv/linux/sparc/sigaction.c
Normal file
127
sysdeps/unix/sysv/linux/sparc/sigaction.c
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/* POSIX.1 sigaction call for Linux/SPARC.
|
||||||
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Miguel de Icaza (miguel@nuclecu.unam.mx), 1997.
|
||||||
|
|
||||||
|
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 <syscall.h>
|
||||||
|
#include <sys/signal.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* The kernel will deliver signals in the old way if the signal
|
||||||
|
number is a positive number. The kernel will deliver a signal
|
||||||
|
with the new stack layout if the signal number is a negative number.
|
||||||
|
|
||||||
|
Our sigaction code takes care of selecting the type of kernel we are
|
||||||
|
using at runtime. */
|
||||||
|
|
||||||
|
extern void ____sparc_signal_trampoline (int);
|
||||||
|
long ____sig_table [NSIG];
|
||||||
|
|
||||||
|
int
|
||||||
|
__trampoline_sigaction (int sig, struct sigaction *new, struct sigaction *old)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
int need_to_hide_trick = 0;
|
||||||
|
__sighandler_t old_sh;
|
||||||
|
|
||||||
|
if (new)
|
||||||
|
{
|
||||||
|
if (new->sa_handler != SIG_DFL && new->sa_handler != SIG_IGN)
|
||||||
|
{
|
||||||
|
old_sh = ____sig_table[sig];
|
||||||
|
____sig_table[sig] = (long int) new->sa_handler;
|
||||||
|
new->sa_handler = ____sparc_signal_trampoline;
|
||||||
|
need_to_hide_trick = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__asm__("or %%g0,%0,%%g1\n\t"
|
||||||
|
"or %%g0,%1,%%o0\n\t"
|
||||||
|
"or %%g0,%2,%%o1\n\t"
|
||||||
|
"or %%g0,%3,%%o2\n\t"
|
||||||
|
"t 0x10\n\t"
|
||||||
|
"bcc 1f\n\t"
|
||||||
|
"or %%o0, %%g0, %0\n\t"
|
||||||
|
"sub %%g0, %%o0, %0\n\t"
|
||||||
|
"1:"
|
||||||
|
: "=r" (ret), "=r" ((long int) sig), "=r" ((long int) new),
|
||||||
|
"=r" ((long int) old)
|
||||||
|
: "0" (SYS_sigaction), "1" (sig), "2" (new), "3" (old)
|
||||||
|
: "g1", "o0", "o1", "o2");
|
||||||
|
|
||||||
|
if (ret >= 0)
|
||||||
|
{
|
||||||
|
if (old && old->sa_handler == ____sparc_signal_trampoline)
|
||||||
|
{
|
||||||
|
if (need_to_hide_trick)
|
||||||
|
old->sa_handler = old_sh;
|
||||||
|
else
|
||||||
|
old->sa_handler = ____sig_table[sig];
|
||||||
|
}
|
||||||
|
if (need_to_hide_trick)
|
||||||
|
new->sa_handler = ____sig_table[sig];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
__set_errno (-ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__new_sigaction (int sig, struct sigaction *new, struct sigaction *old)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
sig = -sig;
|
||||||
|
|
||||||
|
__asm__("or %%g0,%0,%%g1\n\t"
|
||||||
|
"or %%g0,%1,%%o0\n\t"
|
||||||
|
"or %%g0,%2,%%o1\n\t"
|
||||||
|
"or %%g0,%3,%%o2\n\t"
|
||||||
|
"t 0x10\n\t"
|
||||||
|
"bcc 1f\n\t"
|
||||||
|
"or %%o0, %%g0, %0\n\t"
|
||||||
|
"sub %%g0,%%o0,%0\n\t"
|
||||||
|
"1:"
|
||||||
|
: "=r" (ret), "=r" ((long int) sig), "=r" ((long int) new),
|
||||||
|
"=r" ((long int) old)
|
||||||
|
: "0" (SYS_sigaction), "1" (sig), "2" (new), "3" (old)
|
||||||
|
: "g1", "o0", "o1", "o2");
|
||||||
|
if (ret >= 0)
|
||||||
|
return 0;
|
||||||
|
__set_errno (-ret);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
__sigaction (int sig, struct sigaction *new, struct sigaction *old)
|
||||||
|
{
|
||||||
|
static (*sigact_routine) (int, struct sigaction *, struct sigaction *);
|
||||||
|
int ret;
|
||||||
|
struct sigaction sa;
|
||||||
|
|
||||||
|
if (sigact_routine)
|
||||||
|
return (*sigact_routine) (sig, new, old);
|
||||||
|
|
||||||
|
ret = __new_sigaction (1, NULL, &sa);
|
||||||
|
if (ret == -1)
|
||||||
|
sigact_routine = __trampoline_sigaction;
|
||||||
|
else
|
||||||
|
sigact_routine = __new_sigaction;
|
||||||
|
|
||||||
|
return __sigaction (sig, new, old);
|
||||||
|
}
|
||||||
|
weak_alias (__sigaction, sigaction);
|
58
sysdeps/unix/sysv/linux/sparc/socket.S
Normal file
58
sysdeps/unix/sysv/linux/sparc/socket.S
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, 1997.
|
||||||
|
|
||||||
|
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 <sysdep.h>
|
||||||
|
#include <sys/socketcall.h>
|
||||||
|
|
||||||
|
#define P(a, b) P2(a, b)
|
||||||
|
#define P2(a, b) a##b
|
||||||
|
|
||||||
|
.text
|
||||||
|
/* The socket-oriented system calls are handled unusally in Linux.
|
||||||
|
They are all gated through the single `socketcall' system call number.
|
||||||
|
`socketcall' takes two arguments: the first is the subcode, specifying
|
||||||
|
which socket function is being called; and the second is a pointer to
|
||||||
|
the arguments to the specific function.
|
||||||
|
|
||||||
|
The .S files for the other calls just #define socket and #include this. */
|
||||||
|
|
||||||
|
.globl P(__,socket)
|
||||||
|
ENTRY (P(__,socket))
|
||||||
|
mov SYS_ify(socketcall), %g1 /* System call number */
|
||||||
|
|
||||||
|
/* Use ## so `socket' is a separate token that might be #define'd. */
|
||||||
|
mov P(SOCKOP_,socket), %o0 /* Subcode is first arg to syscall. */
|
||||||
|
mov %i0,%o1 /* args pointer is second arg to syscall */
|
||||||
|
|
||||||
|
t 0x10
|
||||||
|
bcc,a 1
|
||||||
|
nop
|
||||||
|
save %sp,96,%sp
|
||||||
|
call __errno_location
|
||||||
|
nop
|
||||||
|
st %i0,[%o0]
|
||||||
|
restore
|
||||||
|
retl
|
||||||
|
mov -1,%o0
|
||||||
|
1:
|
||||||
|
ret
|
||||||
|
|
||||||
|
PSEUDO_END (P(__,socket))
|
||||||
|
|
||||||
|
weak_alias (P(__,socket), socket)
|
30
sysdeps/unix/sysv/linux/sparc/syscall.S
Normal file
30
sysdeps/unix/sysv/linux/sparc/syscall.S
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/* Copyright (C) 1991, 1992, 1997 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. */
|
||||||
|
|
||||||
|
#define DONT_LOAD_G1
|
||||||
|
#include <sysdep.h>
|
||||||
|
ENTRY (__libc_syscall)
|
||||||
|
or %o0,%g0,%g1
|
||||||
|
or %o1,%g0,%o0
|
||||||
|
or %o2,%g0,%o1
|
||||||
|
or %o3,%g0,%o2
|
||||||
|
or %o4,%g0,%o3
|
||||||
|
or %o5,%g0,%o4
|
||||||
|
PSEUDO_NOENT(__libc_syscall, syscall, 5)
|
||||||
|
ret
|
||||||
|
SYSCALL__POST(syscall,5)
|
57
sysdeps/unix/sysv/linux/sparc/sysdep.h
Normal file
57
sysdeps/unix/sysv/linux/sparc/sysdep.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/* Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, January 1997.
|
||||||
|
|
||||||
|
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 _LINUX_SPARC_SYSDEP_H
|
||||||
|
#define _LINUX_SPARC_SYSDEP_H 1
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sparc/sysdep.h>
|
||||||
|
|
||||||
|
#undef SYS_ify
|
||||||
|
#define SYS_ify(syscall_name) __NR_##syscall_name
|
||||||
|
|
||||||
|
#ifdef ASSEMBLER
|
||||||
|
|
||||||
|
#ifdef DONT_LOAD_G1
|
||||||
|
# define LOADSYSCALL(x)
|
||||||
|
#else
|
||||||
|
# define LOADSYSCALL(x) mov SYS_##n, %g1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Linux/SPARC uses a different trap number and uses __errno_location always */
|
||||||
|
#undef PSEUDO
|
||||||
|
|
||||||
|
#define PSEUDO(name, syscall_name, args) \
|
||||||
|
.text; \
|
||||||
|
ENTRY(name); \
|
||||||
|
LOADSYSCALL(syscall_name); \
|
||||||
|
ta 0x10; \
|
||||||
|
bcc,a 1f; \
|
||||||
|
nop; \
|
||||||
|
save %sp,96,%sp; \
|
||||||
|
call __errno_location; \
|
||||||
|
nop; \
|
||||||
|
st %i0,[%o0]; \
|
||||||
|
restore; \
|
||||||
|
retl; \
|
||||||
|
mov -1,%o0; \
|
||||||
|
1:
|
||||||
|
|
||||||
|
#endif /* ASSEMBLER */
|
||||||
|
|
||||||
|
#endif /* linux/sparc/sysdep.h */
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
@ -46,8 +46,8 @@ struct msqid_ds
|
|||||||
unsigned short int __msg_cbytes;/* current number of bytes on queue */
|
unsigned short int __msg_cbytes;/* current number of bytes on queue */
|
||||||
unsigned short int msg_qnum; /* number of messages currently on queue */
|
unsigned short int msg_qnum; /* number of messages currently on queue */
|
||||||
unsigned short int msg_qbytes;/* max number of bytes allowed on queue */
|
unsigned short int msg_qbytes;/* max number of bytes allowed on queue */
|
||||||
__pid_t msg_lspid; /* pid of last msgsnd() */
|
int msg_lspid; /* pid of last msgsnd() */
|
||||||
__pid_t msg_lrpid; /* pid of last msgrcv() */
|
int msg_lrpid; /* pid of last msgrcv() */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __USE_MISC
|
#ifdef __USE_MISC
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
@ -48,8 +48,8 @@ struct shmid_ds
|
|||||||
__time_t shm_atime; /* time of last shmat() */
|
__time_t shm_atime; /* time of last shmat() */
|
||||||
__time_t shm_dtime; /* time of last shmdt() */
|
__time_t shm_dtime; /* time of last shmdt() */
|
||||||
__time_t shm_ctime; /* time of last change by shmctl() */
|
__time_t shm_ctime; /* time of last change by shmctl() */
|
||||||
__pid_t shm_cpid; /* pid of creator */
|
int shm_cpid; /* pid of creator */
|
||||||
__pid_t shm_lpid; /* pid of last shmop */
|
int shm_lpid; /* pid of last shmop */
|
||||||
unsigned short int shm_nattch; /* number of current attaches */
|
unsigned short int shm_nattch; /* number of current attaches */
|
||||||
unsigned short int __shm_npages; /* size of segment (pages) */
|
unsigned short int __shm_npages; /* size of segment (pages) */
|
||||||
unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */
|
unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
/* Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1993, 1995, 1996, 1997 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
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include "../locale/localeinfo.h"
|
#include "../locale/localeinfo.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
/* Copyright (C) 1994, 1997 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
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
/* Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1993, 1995, 1996, 1997 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
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -1,26 +1,25 @@
|
|||||||
/* Copyright (C) 1991, 1993 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 1993, 1997 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
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <ansidecl.h>
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
/* Defined in mktime.c. */
|
/* Defined in mktime.c. */
|
||||||
extern CONST unsigned short int __mon_yday[2][13];
|
extern const unsigned short int __mon_yday[2][13];
|
||||||
|
|
||||||
#define SECS_PER_HOUR (60 * 60)
|
#define SECS_PER_HOUR (60 * 60)
|
||||||
#define SECS_PER_DAY (SECS_PER_HOUR * 24)
|
#define SECS_PER_DAY (SECS_PER_HOUR * 24)
|
||||||
@ -29,11 +28,13 @@ extern CONST unsigned short int __mon_yday[2][13];
|
|||||||
offset OFFSET seconds east of UTC,
|
offset OFFSET seconds east of UTC,
|
||||||
and store year, yday, mon, mday, wday, hour, min, sec into *TP. */
|
and store year, yday, mon, mday, wday, hour, min, sec into *TP. */
|
||||||
void
|
void
|
||||||
DEFUN(__offtime, (t, offset, tp),
|
__offtime (t, offset, tp)
|
||||||
CONST time_t *t AND long int offset AND struct tm *tp)
|
const time_t *t;
|
||||||
|
long int offset;
|
||||||
|
struct tm *tp;
|
||||||
{
|
{
|
||||||
register long int days, rem, y;
|
register long int days, rem, y;
|
||||||
register CONST unsigned short int *ip;
|
register const unsigned short int *ip;
|
||||||
|
|
||||||
days = *t / SECS_PER_DAY;
|
days = *t / SECS_PER_DAY;
|
||||||
rem = *t % SECS_PER_DAY;
|
rem = *t % SECS_PER_DAY;
|
||||||
@ -58,7 +59,7 @@ DEFUN(__offtime, (t, offset, tp),
|
|||||||
tp->tm_wday += 7;
|
tp->tm_wday += 7;
|
||||||
y = 1970;
|
y = 1970;
|
||||||
|
|
||||||
# define LEAPS_THRU_END_OF(y) ((y) / 4 - (y) / 100 + (y) / 400)
|
#define LEAPS_THRU_END_OF(y) ((y) / 4 - (y) / 100 + (y) / 400)
|
||||||
|
|
||||||
while (days < 0 || days >= (__isleap (y) ? 366 : 365))
|
while (days < 0 || days >= (__isleap (y) ? 366 : 365))
|
||||||
{
|
{
|
||||||
|
@ -129,7 +129,7 @@ localtime_r (t, tp)
|
|||||||
#endif
|
#endif
|
||||||
#define recursive(new_fmt) \
|
#define recursive(new_fmt) \
|
||||||
(*(new_fmt) != '\0' \
|
(*(new_fmt) != '\0' \
|
||||||
|| strptime_internal (rp, (new_fmt), tm, decided) != NULL)
|
&& strptime_internal (rp, (new_fmt), tm, decided) != NULL)
|
||||||
|
|
||||||
|
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
|
@ -1,20 +1,20 @@
|
|||||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
/* Copyright (C) 1994, 1997 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
|
||||||
modify it under the terms of the GNU Library General Public License as
|
modify it under the terms of the GNU Library General Public License as
|
||||||
published by the Free Software Foundation; either version 2 of the
|
published by the Free Software Foundation; either version 2 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
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
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Cambridge, MA 02139, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
@ -229,10 +229,6 @@ __tzset_internal (always)
|
|||||||
|
|
||||||
tz += l;
|
tz += l;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
/* There is no DST. */
|
|
||||||
tz_rules[1].name = tz_rules[0].name;
|
|
||||||
|
|
||||||
/* Figure out the DST offset from GMT. */
|
/* Figure out the DST offset from GMT. */
|
||||||
if (*tz == '-' || *tz == '+')
|
if (*tz == '-' || *tz == '+')
|
||||||
@ -263,6 +259,10 @@ __tzset_internal (always)
|
|||||||
if (l < 2 && *tz == ':')
|
if (l < 2 && *tz == ':')
|
||||||
++tz;
|
++tz;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* There is no DST. */
|
||||||
|
tz_rules[1].name = tz_rules[0].name;
|
||||||
|
|
||||||
done_names:
|
done_names:
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user