$OpenBSD: patch-gcc_config_i386_openbsd_h,v 1.6 2002/09/14 10:14:51 espie Exp $
--- gcc/config/i386/openbsd.h.orig	Tue May 28 23:29:47 2002
+++ gcc/config/i386/openbsd.h	Thu Sep 12 14:52:17 2002
@@ -103,3 +103,24 @@ Boston, MA 02111-1307, USA.  */
 
 /* OpenBSD gas currently does not support quad, so do not use it.  */
 #undef ASM_QUAD
+
+#undef FINALIZE_TRAMPOLINE
+#define FINALIZE_TRAMPOLINE(TRAMP) \
+  emit_library_call(gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"), \
+		    0, VOIDmode, 1, memory_address (SImode, (TRAMP)), Pmode)
+
+#define TRANSFER_FROM_TRAMPOLINE					\
+extern void __enable_execute_stack (void *);				\
+void									\
+__enable_execute_stack (addr)						\
+     void *addr;							\
+{									\
+  long size = getpagesize ();						\
+  long mask = ~(size-1);						\
+  char *page = (char *) (((long) addr) & mask); 			\
+  char *end  = (char *) ((((long) (addr + TRAMPOLINE_SIZE)) & mask) + size); \
+								      \
+  /* 7 is PROT_READ | PROT_WRITE | PROT_EXEC */ 			\
+  if (mprotect (page, end - page, 7) < 0)				\
+    perror ("mprotect of trampoline code");				\
+}
