This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Split up stackguard-macros.h into sysdeps directories


We've discussed how various files in libc that contain information for
multiple architectures should be split up so that each architecture
contains information in its own sysdeps files instead, like for ports
architectures.

stackguard-macros.h is one such file - in addition, ports providing it
(ia64, tile) also provide "elf/stackguard-macros.h" as a wrapper
because nptl/tst-stackguard1.c includes the file in that form.  I
propose this patch to split up stackguard-macros.h into sysdeps
directories and consistently include it in the form
<stackguard-macros.h> so each architecture only needs to provide
stackguard-macros.h not elf/stackguard-macros.h.  Tested x86 and
x86_64.

2012-05-15  Joseph Myers  <joseph@codesourcery.com>

	* elf/stackguard-macros.h: Remove file.
	* sysdeps/generic/stackguard-macros.h: New file.
	* sysdeps/i386/stackguard-macros.h: Likewise.
	* sysdeps/powerpc/powerpc32/stackguard-macros.h: Likewise.
	* sysdeps/powerpc/powerpc64/stackguard-macros.h: Likewise.
	* sysdeps/s390/s390-32/stackguard-macros.h: Likewise.
	* sysdeps/s390/s390-64/stackguard-macros.h: Likewise.
	* sysdeps/sparc/sparc32/stackguard-macros.h: Likewise.
	* sysdeps/sparc/sparc64/stackguard-macros.h: Likewise.
	* sysdeps/x86_64/stackguard-macros.h: Likewise.
	* nptl/tst-stackguard1.c: Include <stackguard-macros.h> not
	<elf/stackguard-macros.h>.

diff --git a/elf/stackguard-macros.h b/elf/stackguard-macros.h
deleted file mode 100644
index 0cad315..0000000
--- a/elf/stackguard-macros.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <stdint.h>
-
-#ifdef __i386__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("movl %%gs:0x14, %0" : "=r" (x)); x; })
-#elif defined __x86_64__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x;						\
-     asm ("mov %%fs:%c1, %0" : "=r" (x)				\
-	  : "i" (offsetof (tcbhead_t, stack_guard))); x; })
-#elif defined __powerpc64__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("ld %0,-28688(13)" : "=r" (x)); x; })
-#elif defined __powerpc__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("lwz %0,-28680(2)" : "=r" (x)); x; })
-#elif defined __sparc__ && defined __arch64__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("ldx [%%g7+0x28], %0" : "=r" (x)); x; })
-#elif defined __sparc__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("ld [%%g7+0x14], %0" : "=r" (x)); x; })
-#elif defined __s390x__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("ear %0,%%a0; sllg %0,%0,32; ear %0,%%a1; lg %0,0x28(%0)" : "=a" (x)); x; })
-#elif defined __s390__
-# define STACK_CHK_GUARD \
-  ({ uintptr_t x; asm ("ear %0,%%a0; l %0,0x14(%0)" : "=a" (x)); x; })
-#elif !defined STACK_CHK_GUARD
-extern uintptr_t __stack_chk_guard;
-# define STACK_CHK_GUARD __stack_chk_guard
-#endif
diff --git a/nptl/tst-stackguard1.c b/nptl/tst-stackguard1.c
index 4af16c9..c456046 100644
--- a/nptl/tst-stackguard1.c
+++ b/nptl/tst-stackguard1.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
 
@@ -23,7 +23,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/wait.h>
-#include <elf/stackguard-macros.h>
+#include <stackguard-macros.h>
 #include <unistd.h>
 
 static const char *command;
diff --git a/sysdeps/generic/stackguard-macros.h b/sysdeps/generic/stackguard-macros.h
new file mode 100644
index 0000000..ababf65
--- /dev/null
+++ b/sysdeps/generic/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+extern uintptr_t __stack_chk_guard;
+#define STACK_CHK_GUARD __stack_chk_guard
diff --git a/sysdeps/i386/stackguard-macros.h b/sysdeps/i386/stackguard-macros.h
new file mode 100644
index 0000000..8c31e19
--- /dev/null
+++ b/sysdeps/i386/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("movl %%gs:0x14, %0" : "=r" (x)); x; })
diff --git a/sysdeps/powerpc/powerpc32/stackguard-macros.h b/sysdeps/powerpc/powerpc32/stackguard-macros.h
new file mode 100644
index 0000000..839f6a4
--- /dev/null
+++ b/sysdeps/powerpc/powerpc32/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("lwz %0,-28680(2)" : "=r" (x)); x; })
diff --git a/sysdeps/powerpc/powerpc64/stackguard-macros.h b/sysdeps/powerpc/powerpc64/stackguard-macros.h
new file mode 100644
index 0000000..9da879c
--- /dev/null
+++ b/sysdeps/powerpc/powerpc64/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("ld %0,-28688(13)" : "=r" (x)); x; })
diff --git a/sysdeps/s390/s390-32/stackguard-macros.h b/sysdeps/s390/s390-32/stackguard-macros.h
new file mode 100644
index 0000000..b74c579
--- /dev/null
+++ b/sysdeps/s390/s390-32/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("ear %0,%%a0; l %0,0x14(%0)" : "=a" (x)); x; })
diff --git a/sysdeps/s390/s390-64/stackguard-macros.h b/sysdeps/s390/s390-64/stackguard-macros.h
new file mode 100644
index 0000000..0cebb5f
--- /dev/null
+++ b/sysdeps/s390/s390-64/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("ear %0,%%a0; sllg %0,%0,32; ear %0,%%a1; lg %0,0x28(%0)" : "=a" (x)); x; })
diff --git a/sysdeps/sparc/sparc32/stackguard-macros.h b/sysdeps/sparc/sparc32/stackguard-macros.h
new file mode 100644
index 0000000..c0b02b0
--- /dev/null
+++ b/sysdeps/sparc/sparc32/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("ld [%%g7+0x14], %0" : "=r" (x)); x; })
diff --git a/sysdeps/sparc/sparc64/stackguard-macros.h b/sysdeps/sparc/sparc64/stackguard-macros.h
new file mode 100644
index 0000000..80f0635
--- /dev/null
+++ b/sysdeps/sparc/sparc64/stackguard-macros.h
@@ -0,0 +1,4 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x; asm ("ldx [%%g7+0x28], %0" : "=r" (x)); x; })
diff --git a/sysdeps/x86_64/stackguard-macros.h b/sysdeps/x86_64/stackguard-macros.h
new file mode 100644
index 0000000..d7fedb3
--- /dev/null
+++ b/sysdeps/x86_64/stackguard-macros.h
@@ -0,0 +1,6 @@
+#include <stdint.h>
+
+#define STACK_CHK_GUARD \
+  ({ uintptr_t x;						\
+     asm ("mov %%fs:%c1, %0" : "=r" (x)				\
+	  : "i" (offsetof (tcbhead_t, stack_guard))); x; })

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]