diff options
author | Roland McGrath <roland@hack.frob.com> | 2012-04-30 15:00:14 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2012-05-01 13:27:11 -0700 |
commit | 82a79e7d1843f9d90075a0bf2f04557040829bb0 (patch) | |
tree | 063a8edbad83c421ddc11bd1b1238143378eb900 /scripts/check-textrel.awk | |
parent | 615605c94eb3238fa1a0721506d70871f1610967 (diff) | |
download | glibc-82a79e7d1843f9d90075a0bf2f04557040829bb0.tar.gz glibc-82a79e7d1843f9d90075a0bf2f04557040829bb0.tar.xz glibc-82a79e7d1843f9d90075a0bf2f04557040829bb0.zip |
Do check-textrel test using readelf rather than a build-time C program.
Diffstat (limited to 'scripts/check-textrel.awk')
-rw-r--r-- | scripts/check-textrel.awk | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/scripts/check-textrel.awk b/scripts/check-textrel.awk new file mode 100644 index 0000000000..e7f2d70084 --- /dev/null +++ b/scripts/check-textrel.awk @@ -0,0 +1,41 @@ +# This awk script expects to get command-line files that are each +# the output of 'readelf -d' on a single shared object. +# It exits successfully (0) if none contained any TEXTREL markers. +# It fails (1) if any did contain a TEXTREL marker. +# It fails (2) if the input did not take the expected form. + +BEGIN { result = textrel = sanity = 0 } + +function check_one(name) { + if (!sanity) { + print name ": *** input did not look like readelf -d output"; + result = 2; + } else if (textrel) { + print name ": *** text relocations used"; + result = result ? result : 1; + } else { + print name ": OK"; + } + + textrel = sanity = 0; +} + +FILENAME != lastfile { + if (lastfile) + check_one(lastfile); + lastfile = FILENAME; +} + +$1 == "Tag" && $2 == "Type" { sanity = 1 } +$2 == "(TEXTREL)" { textrel = 1 } +$2 == "(FLAGS)" { + for (i = 3; i <= NF; ++i) { + if ($i == "TEXTREL") + textrel = 1; + } +} + +END { + check_one(lastfile); + exit(result); +} |