123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- BEGIN {
- result = sanity = 0; default_exec = -1;
- split(xfail, xfails, " ");
- for (x in xfails)
- expected_fails[xfails[x] ".phdr"] = 1;
- }
- /^execstack-no$/ { default_exec = 0; next }
- /^execstack-yes$/ { default_exec = 1; next }
- function check_one(name) {
- if (default_exec == -1) {
- print "*** missing execstack-default file?";
- result = 2;
- }
- n = split(name, parts, "/");
- basename = parts[n];
- expected_fail = basename in expected_fails;
- if (!sanity) {
- print name ": *** input did not look like readelf -l output";
- result = 2;
- } else if (stack_line) {
- if (stack_line ~ /^.*RW .*$/) {
- print name ": OK";
- } else if (stack_line ~ /^.*E.*$/) {
- if (expected_fail) {
- print name ": *** executable stack signaled, expected";
- } else {
- print name ": *** executable stack signaled";
- result = result ? result : 1;
- }
- }
- } else if (default_exec) {
- if (expected_fail) {
- print name ": *** no PT_GNU_STACK entry, expected";
- } else {
- print name ": *** no PT_GNU_STACK entry";
- result = result ? result : 1;
- }
- } else {
- print name ": no PT_GNU_STACK but default is OK";
- }
- sanity = 0;
- }
- FILENAME != lastfile {
- if (lastfile)
- check_one(lastfile);
- lastfile = FILENAME;
- }
- $1 == "Type" && $7 == "Flg" { sanity = 1; stack_line = "" }
- $1 == "GNU_STACK" { stack_line = $0 }
- END {
- check_one(lastfile);
- exit(result);
- }
|