diff options
author | Roland McGrath <roland@hack.frob.com> | 2012-04-24 13:53:38 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2012-04-24 14:48:15 -0700 |
commit | 83bcd2361de9d2da98abef1e4b8f2dddae5a2b14 (patch) | |
tree | cf845763792cd4b1014da400196907c9bce57672 /scripts/check-localplt.awk | |
parent | f37e0d6819c5ec185bed71dd72722176d88f6bef (diff) | |
download | glibc-83bcd2361de9d2da98abef1e4b8f2dddae5a2b14.tar.gz |
Add flexibility to localplt-*.data files, using an awk script rather than diff to check the results.
Diffstat (limited to 'scripts/check-localplt.awk')
-rw-r--r-- | scripts/check-localplt.awk | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/scripts/check-localplt.awk b/scripts/check-localplt.awk new file mode 100644 index 0000000000..bb1b912131 --- /dev/null +++ b/scripts/check-localplt.awk @@ -0,0 +1,53 @@ +# This is an awk script to process the output of elf/check-localplt. +# The first file argument is the file of expected results. +# Each line is either a comment starting with # or it looks like: +# libfoo.so: function +# or +# libfoo.so: function ? +# The latter means that a PLT entry for function is optional in libfoo.so. +# The former means one is required. +# The second file argument is - and this (stdin) receives the output +# of the check-localplt program. + +BEGIN { result = 0 } + +FILENAME != "-" && /^#/ { next } + +FILENAME != "-" { + if (NF != 2 && !(NF == 3 && $3 == "?")) { + printf "%s:%d: bad data line: %s\n", FILENAME, FNR, $0 > "/dev/stderr"; + result = 2; + } else { + accept[$1 " " $2] = NF == 2; + } + next; +} + +NF != 2 { + print "Unexpected output from check-localplt:", $0 > "/dev/stderr"; + result = 2; + next +} + +{ + key = $1 " " $2 + if (key in accept) { + delete accept[key] + } else { + print "Extra PLT reference:", $0; + if (result == 0) + result = 1; + } +} + +END { + for (key in accept) { + if (accept[key]) { + # It's mandatory. + print "Missing required PLT reference:", key; + result = 1; + } + } + + exit(result); +} |