diff options
author | Mike Frysinger <vapier@gentoo.org> | 2009-10-22 01:12:47 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-10-22 01:12:47 -0400 |
commit | e30f2a09f1e8e5b368dc8f9210b491a3a4579329 (patch) | |
tree | e56998de78903e38b20d33e244b8e5005d5369ca | |
parent | e0ac4efbdb498319f03a2a95d75d061ab6c68491 (diff) |
test/plt: add a script to find PLT usage
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
-rw-r--r-- | Rules.mak | 1 | ||||
-rwxr-xr-x | test/plt/check-plt.sh | 38 |
2 files changed, 39 insertions, 0 deletions
@@ -46,6 +46,7 @@ CC = $(CROSS)gcc AR = $(CROSS)ar LD = $(CROSS)ld NM = $(CROSS)nm +OBJDUMP = $(CROSS)objdump STRIPTOOL = $(CROSS)strip INSTALL = install 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 |