summaryrefslogtreecommitdiff
path: root/test/plt/check-plt.sh
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2009-10-22 01:12:47 -0400
committerMike Frysinger <vapier@gentoo.org>2009-10-22 01:12:47 -0400
commite30f2a09f1e8e5b368dc8f9210b491a3a4579329 (patch)
treee56998de78903e38b20d33e244b8e5005d5369ca /test/plt/check-plt.sh
parente0ac4efbdb498319f03a2a95d75d061ab6c68491 (diff)
test/plt: add a script to find PLT usage
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'test/plt/check-plt.sh')
-rwxr-xr-xtest/plt/check-plt.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/plt/check-plt.sh b/test/plt/check-plt.sh
new file mode 100755
index 000000000..bedc8fd35
--- /dev/null
+++ b/test/plt/check-plt.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+allowed="
+calloc
+free
+malloc
+memalign
+realloc
+"
+
+${OBJDUMP:-objdump} -d ${top_builddir:-../..}/lib/libc.so.? | \
+gawk -v allowed="${allowed}" '
+BEGIN {
+ COUNT = split(" " allowed, ALLOWED);
+}
+
+# Strip away the noise. The name will be like:
+# <brk>:
+# <foo@plt>
+function symstrip(name) {
+ return gensub(/.*<([^>@]*).*/, "\\1", "", name);
+}
+
+{
+# Match the start of the symbol disassembly
+# 00009720 <brk>:
+if ($2 ~ />:$/) {
+ f = symstrip($2);
+
+} else if ($NF ~ /@plt>/) {
+ rf = symstrip($NF);
+ for (a in ALLOWED) {
+ a = ALLOWED[a];
+ if (a == rf)
+ next;
+ }
+ print "Func " f " references " rf;
+}
+}' | sort -u