[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
- Previous message: [Mplayer-cvslog] CVS: main mplayer.c,1.193,1.194 dec_audio.c,1.24,1.25 dec_video.c,1.12,1.13 codec-cfg.h,1.10,1.11
- Next message: [Mplayer-cvslog] CVS: main configure,1.118,1.119
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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 );
}
- Previous message: [Mplayer-cvslog] CVS: main mplayer.c,1.193,1.194 dec_audio.c,1.24,1.25 dec_video.c,1.12,1.13 codec-cfg.h,1.10,1.11
- Next message: [Mplayer-cvslog] CVS: main configure,1.118,1.119
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the MPlayer-cvslog
mailing list