aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony G. Basile <blueness@gentoo.org>2014-05-27 20:07:43 -0400
committerAnthony G. Basile <blueness@gentoo.org>2014-05-27 20:07:56 -0400
commitc86a02ad95c04a839ec79841d728b8ac83896dc7 (patch)
treedadb83c740a168f66f6ab4630774cd23899fc5e9
parentmisc/ldd: correct logic for ldpaths() (diff)
downloadelfix-c86a02ad95c04a839ec79841d728b8ac83896dc7.tar.gz
elfix-c86a02ad95c04a839ec79841d728b8ac83896dc7.tar.bz2
elfix-c86a02ad95c04a839ec79841d728b8ac83896dc7.zip
misc/ldd: 'soname => paths' at depth = 1 only
-rwxr-xr-xmisc/ldd/ldd.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/misc/ldd/ldd.py b/misc/ldd/ldd.py
index c1bcc19..34d6642 100755
--- a/misc/ldd/ldd.py
+++ b/misc/ldd/ldd.py
@@ -77,12 +77,21 @@ def ldpaths(ld_so_conf='/etc/ld.so.conf'):
def dynamic_dt_needed_paths( dt_needed, eclass, paths):
+ dt_needed_paths = {}
for n in dt_needed:
for p in paths:
lib = p + os.sep + n
if os.path.exists(lib):
- print('%s' % lib)
- return
+ with open(lib, 'rb') as file:
+ try:
+ readlib = ReadElf(file)
+ if eclass == readlib.elf_class():
+ dt_needed_paths[n] = lib
+ except ELFError as ex:
+ sys.stderr.write('ELF error: %s\n' % ex)
+ sys.exit(1)
+
+ return dt_needed_paths
SCRIPT_DESCRIPTION = 'Print shared library dependencies'
VERSION_STRING = '%%prog: based on pyelftools %s' % __version__
@@ -112,11 +121,10 @@ def main():
if len(args) > 1:
sys.stdout.write('%s : \n' % f)
eclass = readelf.elf_class()
- #sys.stdout.write('\t%s\n' % eclass)
dt_needed = readelf.dynamic_dt_needed()
dt_needed_paths = dynamic_dt_needed_paths( dt_needed, eclass, paths)
- for n in dt_needed:
- sys.stdout.write('\t%s\n' % n )
+ for n, lib in dt_needed_paths.items():
+ sys.stdout.write('\t%s => %s\n' % (n, lib))
except ELFError as ex:
sys.stderr.write('ELF error: %s\n' % ex)
sys.exit(1)