[Mplayer-cvslog] CVS: main/loader pe_image.c,1.3,1.4

Jürgen Keil jkeil at mplayer.dev.hu
Sun Jul 29 12:17:59 CEST 2001


Update of /cvsroot/mplayer/main/loader
In directory mplayer:/var/tmp.root/cvs-serv9536

Modified Files:
	pe_image.c 
Log Message:
Pre-allocate some stack space to work around a problem with DLL alloca() code
on a linux kernel.


Index: pe_image.c
===================================================================
RCS file: /cvsroot/mplayer/main/loader/pe_image.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- pe_image.c	12 Jul 2001 15:27:47 -0000	1.3
+++ pe_image.c	29 Jul 2001 10:17:53 -0000	1.4
@@ -884,19 +884,23 @@
  * due to the PROCESS_Create stuff.
  */
 
-#if	0
 /*
- * so this is a dirty hack.
- * Why do we need it?
- *
- * Disable it for now, let's see if it breaks something
+ * This is a dirty hack.
+ * The win32 DLLs contain an alloca routine, that first probes the soon
+ * to be allocated new memory *below* the current stack pointer in 4KByte
+ * increments.  After the mem probing below the current %esp,  the stack
+ * pointer is finally decremented to make room for the "alloca"ed memory.
+ * Maybe the probing code is intended to extend the stack on a windows box.
+ * Anyway, the linux kernel does *not* extend the stack by simply accessing
+ * memory below %esp;  it segfaults.
+ * The extend_stack_for_dll_alloca() routine just preallocates a big chunk
+ * of memory on the stack, for use by the DLLs alloca routine.
  */
-static void This_Is_Dirty_Hack(void)
+static void extend_stack_for_dll_alloca(void)
 {
     void* mem=alloca(0x20000);
     *(int*)mem=0x1234;
 }
-#endif
 
 
 /* Called if the library is loaded or freed.
@@ -939,9 +943,7 @@
 		break;
 	}	
 	TRACE("for %s\n", wm->filename);
-#if 0
-	This_Is_Dirty_Hack();
-#endif
+	extend_stack_for_dll_alloca();
         retv = entry( wm->module, type, lpReserved );
     }
 




More information about the MPlayer-cvslog mailing list