diff options
Diffstat (limited to 'elf/ldd.bash.in')
-rw-r--r-- | elf/ldd.bash.in | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in new file mode 100644 index 0000000..e7ad21f --- /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 |