Fix check-execstack test
authorAndreas Schwab <schwab@linux-m68k.org>
Thu, 13 Jan 2011 21:21:55 +0000 (16:21 -0500)
committerUlrich Drepper <drepper@gmail.com>
Thu, 13 Jan 2011 21:21:55 +0000 (16:21 -0500)
ChangeLog
elf/Makefile
elf/check-execstack.c

index 0c22abd..9ca8b79 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2010-12-28  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * elf/Makefile (check-execstack): Revert last change.  Depend on
+       check-execstack.h.
+       (check-execstack.h): New target.
+       (generated): Add check-execstack.h.
+       * elf/check-execstack.c: Include "check-execstack.h".
+       (main): Revert last change.
+       (handle_file): Return zero if GNU_STACK is absent and
+       DEFAULT_STACK_PERMS doesn't include PF_X.
+
 2011-01-13  Ulrich Drepper  <drepper@gmail.com>
 
        * sysdeps/posix/spawni.c (__spawni): Don't fail if close file action
index bba6493..da9af8b 100644 (file)
@@ -898,15 +898,17 @@ check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
 $(objpfx)check-textrel: check-textrel.c
        $(native-compile)
 
-check-execstack-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -std=gnu99
-# Perform the same operation as $(native-compile) but add the sysdeps
-# directories as header search locations.
-$(objpfx)check-execstack: check-execstack.c
+check-execstack-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -std=gnu99 \
+                        $(objpfx:%/=-I%)
+$(objpfx)check-execstack: check-execstack.c $(objpfx)check-execstack.h
+       $(native-compile)
+$(objpfx)check-execstack.h: $(first-word $(wildcard $(sysdirs:%=%/stackinfo.h)))
        $(make-target-directory)
-       $(patsubst %/,cd % &&,$(objpfx)) \
-       $(BUILD_CC) $($(basename $(<F))-CFLAGS) $(ALL_BUILD_CFLAGS) \
-       $(addprefix -I$(shell pwd)/,$(sysdirs)) -I$(shell pwd) \
-       $(firstword $(filter /%,$< $(shell pwd)/$<)) -o $(@F)
+       { echo '#include <stackinfo.h>'; echo '@@@DEFAULT_STACK_PERMS@@@'; } | \
+       $(CC) $(CFLAGS) $(CPPFLAGS) -E -x c-header - | \
+       sed -n -e 's/^@@@\(.*\)@@@/#define DEFAULT_STACK_PERMS \1/p' > $@T
+       mv -f $@T $@
+generated += check-execstack.h
 
 check-localplt-CFLAGS = -O -Wall -D_GNU_SOURCE -std=gnu99
 $(objpfx)check-localplt: check-localplt.c
index 6435375..96e4812 100644 (file)
@@ -26,7 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <stackinfo.h>
+#include "check-execstack.h"
 
 
 #ifdef BITS
@@ -92,8 +92,13 @@ AB(handle_file) (const char *fname, int fd)
        return 0;
       }
 
-  printf ("%s: no PT_GNU_STACK entry\n", fname);
-  return 1;
+  if (DEFAULT_STACK_PERMS & PF_X)
+    {
+      printf ("%s: no PT_GNU_STACK entry\n", fname);
+      return 1;
+    }
+
+  return 0;
 }
 
 # undef BITS
@@ -151,13 +156,8 @@ main (int argc, char *argv[])
   int cnt;
   int result = 0;
 
-  /* We can return successfully, i.e., not fail, if PF_X isn't present.  If it
-   * is present then check for the GNU_STACK header.  */
-  if (DEFAULT_STACK_PERMS & PF_X)
-    {
-      for (cnt = 1; cnt < argc; ++cnt)
-       result |= handle_file (argv[cnt]);
-     }
+  for (cnt = 1; cnt < argc; ++cnt)
+    result |= handle_file (argv[cnt]);
   return result;
 }
 #endif