diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/check-localplt.awk | 53 | ||||
-rw-r--r-- | scripts/data/localplt-generic.data | 3 |
2 files changed, 56 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); +} diff --git a/scripts/data/localplt-generic.data b/scripts/data/localplt-generic.data index 2219aa9048..d2965199f3 100644 --- a/scripts/data/localplt-generic.data +++ b/scripts/data/localplt-generic.data @@ -1,3 +1,6 @@ +# See scripts/check-localplt.awk for how this file is processed. +# PLT use is required for the malloc family and for matherr because +# users can define their own functions and have library internals call them. libc.so: calloc libc.so: free libc.so: malloc |