diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-01-21 06:10:42 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-01-21 06:10:42 +0000 |
commit | fd26970f3324277683be531ad2c31f42e19e4b48 (patch) | |
tree | 5d9802aa7e77cc5c0f4b87ac661fe264a93bbe2e /elf/dl-error.c | |
parent | f9c53d1159ff05ac533d3351c70df1ea32c2119d (diff) | |
download | glibc-fd26970f3324277683be531ad2c31f42e19e4b48.zip glibc-fd26970f3324277683be531ad2c31f42e19e4b48.tar.gz glibc-fd26970f3324277683be531ad2c31f42e19e4b48.tar.bz2 |
update from main archive 970120cvs/libc-970121
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.
Diffstat (limited to 'elf/dl-error.c')
-rw-r--r-- | elf/dl-error.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/elf/dl-error.c b/elf/dl-error.c index 52eb577..a19ccff 100644 --- a/elf/dl-error.c +++ b/elf/dl-error.c @@ -37,6 +37,11 @@ struct catch this is null. */ 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 _dl_signal_error (int errcode, @@ -58,6 +63,13 @@ _dl_signal_error (int errcode, catch->objname = objname; 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 { /* Lossage while resolving the program's own symbols is always fatal. */ @@ -77,6 +89,8 @@ _dl_catch_error (char **errstring, { int errcode; struct catch *old, c = { errstring: NULL, objname: NULL }; + /* We need not handle `receiver' since setting a `catch' is handle + before it. */ old = catch; errcode = setjmp (c.env); @@ -96,3 +110,22 @@ _dl_catch_error (char **errstring, *objname = c.objname; 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; +} |