aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@linux-m68k.org>2011-01-13 16:21:55 -0500
committerUlrich Drepper <drepper@gmail.com>2011-01-13 16:21:55 -0500
commit68dc949774cb651d53541df4abdc60327f7e096b (patch)
treea1385c2904cb736cca63ce8de24bdaf345b4a0bc
parent8cf8ce1702c354a8266e3cfa6ab54c2467d1873f (diff)
downloadglibc-68dc949774cb651d53541df4abdc60327f7e096b.tar
glibc-68dc949774cb651d53541df4abdc60327f7e096b.tar.gz
glibc-68dc949774cb651d53541df4abdc60327f7e096b.tar.bz2
glibc-68dc949774cb651d53541df4abdc60327f7e096b.zip
Fix check-execstack test
-rw-r--r--ChangeLog11
-rw-r--r--elf/Makefile18
-rw-r--r--elf/check-execstack.c20
3 files changed, 31 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 0c22abd775..9ca8b79b79 100644
--- 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
diff --git a/elf/Makefile b/elf/Makefile
index bba6493084..da9af8be44 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -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
diff --git a/elf/check-execstack.c b/elf/check-execstack.c
index 64353751e9..96e481208d 100644
--- a/elf/check-execstack.c
+++ b/elf/check-execstack.c
@@ -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