#!/bin/sh # This script takes rpm package files, finds *.so.N files in them, # and runs objdump --dynamic-syms on them. The arguments are rpm file # names. For each rpm, it creates an output file with the name # "NAME-VERSION-RELEASE.ARCH.dynsym", the variable parts being extracted # from the rpm's headers (not its file name). Each file contains the # collected objdump output for all the *.so.N files in the corresponding rpm. # This can be processed with abilist.awk or sent to someone who will do that. # This does not do a lot of error-checking, so you should always watch stderr # and sanity-check the resulting output files. RPM=${RPM:-rpm} RPM2CPIO=${RPM2CPIO:-rpm2cpio} CPIO=${CPIO:-cpio} OBJDUMP=${OBJDUMP:-objdump} unpackdir=/tmp/rpm2dynsym$$ trap 'rm -rf $unpackdir' 0 1 2 15 for rpm; do name=`$RPM -qp $rpm --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n'` mkdir $unpackdir || exit $RPM2CPIO "$rpm" | { cd $unpackdir $CPIO -i -d --no-absolute-filenames -uv '*.so.*' '*.so' 2>&1 | while read file b; do test x"$b" = x || break case "$file" in *.so.[0-9]*) $OBJDUMP --dynamic-syms $file ;; esac done } > $name.dynsym echo wrote $name.dynsym for $rpm rm -rf $unpackdir done