diff options
Diffstat (limited to 'elf')
-rw-r--r-- | elf/Makefile | 5 | ||||
-rw-r--r-- | elf/ldd.bash.in | 66 | ||||
-rw-r--r-- | elf/ldd.sh.in | 30 |
3 files changed, 94 insertions, 7 deletions
diff --git a/elf/Makefile b/elf/Makefile index cbb9c11f42..dcca90411f 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -35,7 +35,7 @@ elide-routines.so = $(dl-routines) dl-support enbl-secure # interpreter and operating independent of libc. rtld-routines := rtld $(dl-routines) dl-sysdep dl-minimal distribute = $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \ - soinit.c sofini.c ldd.sh.in eval.c + soinit.c sofini.c ldd.sh.in ldd.bash.in eval.c extra-libs = libdl extra-libs-others = $(extra-libs) @@ -100,7 +100,8 @@ $(objpfx)libdl.so: $(objpfx)libdl_pic.a $(common-objpfx)libc.so $(objpfx)ld.so $(slibdir)/$(rtld-installed-name): $(objpfx)ld.so; $(do-install-program) $(objpfx)ldd: ldd.sh.in Makefile - sed 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' < $< > $@.new + sed -e 's%@RTLD@%$(slibdir)/$(rtld-installed-name)%g' \ + -e 's%@VERSION@%$(version)%g' < $< > $@.new chmod 555 $@.new mv -f $@.new $@ diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in new file mode 100644 index 0000000000..e7ad21fa9d --- /dev/null +++ b/elf/ldd.bash.in @@ -0,0 +1,66 @@ +#! @BASH@ + +# This is the `ldd' command, which lists what shared libraries are +# used by given dynamically-linked executables. It works by invoking the +# run-time dynamic linker as a command and setting the environment +# variable LD_TRACE_LOADED_OBJECTS to a non-empty value. + +RTLD=@RTLD@ +usage=$"\ +ldd [OPTION]... FILE... + --help print this help and exit + --version print version information and exit +Report bugs to <bug-glibc@prep.ai.mit.edu>." + +while test $# -gt 0; do + case "$1" in + --v*) + echo 'ldd (GNU libc) @VERSION@'; exit 0 ;; + --h*) + echo "$usage"; exit 0 ;; + --) # Stop option prcessing + shift; break ;; + *) + break ;; + esac +done + +case $# in +0) + echo >&2 $"\ +ldd: missing file arguments +Try \`ldd --help' for more information." + exit 1 ;; +1) + # We don't list the file name when there is only one. + case "$1" in + /*) file="$1" ;; + *) file="./$1" ;; + esac + if test ! -f "$file"; then + echo "${file}:" $"no such file" + elif ${RTLD} --verify "$file"; then + LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} "$file" && exit 1 + else + echo $" not a dynamic executable" + fi + exit ;; +*) + set -e # Bail out immediately if ${RTLD} loses on any argument. + for file; do + echo "${file}:" + case "$file" in + /*) : ;; + *) file="./$file" ;; + esac + if test ! -f "$file"; then + echo "$file:" $"no such file" + elif ${RTLD} --verify "$file"; then + LD_TRACE_LOADED_OBJECTS=1 ${RTLD} "$file" + else + echo $" not a dynamic executable" + fi + done +esac + +exit 0 diff --git a/elf/ldd.sh.in b/elf/ldd.sh.in index ede1b9790b..16d3fd8b79 100644 --- a/elf/ldd.sh.in +++ b/elf/ldd.sh.in @@ -2,14 +2,34 @@ # This is the `ldd' command, which lists what shared libraries are # used by given dynamically-linked executables. It works by invoking the -# run-time dynamic linker as a command and giving it the special `--list' -# switch. +# run-time dynamic linker as a command and setting the environment +# variable LD_TRACE_LOADED_OBJECTS to a non-empty value. RTLD=@RTLD@ +usage="\ +ldd [OPTION]... FILE... + --help print this help and exit + --version print version information and exit +Report bugs to <bug-glibc@prep.ai.mit.edu>." + +while test $# -gt 0; do + case "$1" in + --v*) + echo 'ldd (GNU libc) @VERSION@'; exit 0 ;; + --h*) + echo "$usage"; exit 0 ;; + --) # Stop option prcessing + shift; break ;; + *) + break ;; + esac +done case $# in 0) - echo >&2 "Usage: $0 FILE..." + echo >&2 "\ +ldd: missing file arguments +Try \`ldd --help' for more information." exit 1 ;; 1) # We don't list the file name when there is only one. @@ -18,7 +38,7 @@ case $# in *) file="./$1" ;; esac if test ! -f "$file"; then - echo "$file: no such file" + echo "${file}: no such file" elif ${RTLD} --verify "$file"; then LD_TRACE_LOADED_OBJECTS=1 exec ${RTLD} "$file" && exit 1 else @@ -30,7 +50,7 @@ case $# in for file; do echo "${file}:" case "$file" in - /*) file="$file" ;; + /*) : ;; *) file="./$file" ;; esac if test ! -f "$file"; then |