summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-lang/ocaml/files')
-rw-r--r--dev-lang/ocaml/files/digest-ocaml-3.09.3-r13
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch40
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-configure.patch120
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch281
-rw-r--r--dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch13
5 files changed, 457 insertions, 0 deletions
diff --git a/dev-lang/ocaml/files/digest-ocaml-3.09.3-r1 b/dev-lang/ocaml/files/digest-ocaml-3.09.3-r1
new file mode 100644
index 000000000000..231a74a7d1d6
--- /dev/null
+++ b/dev-lang/ocaml/files/digest-ocaml-3.09.3-r1
@@ -0,0 +1,3 @@
+MD5 8b3744efd0d51b82d55b61d0e2bf0e2b ocaml-3.09.3.tar.bz2 2038617
+RMD160 fdc124218c556c62c897ee6720970279e2d5426b ocaml-3.09.3.tar.bz2 2038617
+SHA256 607842b4f4917a759f19541a421370a834f5b948855ca54cef40d22b19a0934f ocaml-3.09.3.tar.bz2 2038617
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch b/dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch
new file mode 100644
index 000000000000..c2ea2d443328
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-Makefile.patch
@@ -0,0 +1,40 @@
+Index: ocaml-3.09.3/Makefile
+===================================================================
+--- ocaml-3.09.3.orig/Makefile
++++ ocaml-3.09.3/Makefile
+@@ -282,7 +282,7 @@ clean:: partialclean
+
+ ocamlc: $(COMPOBJS)
+ $(CAMLC) $(LINKFLAGS) -o ocamlc $(COMPOBJS)
+- @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlc|' \
++ @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlc|g' \
+ driver/ocamlcomp.sh.in > ocamlcomp.sh
+ @chmod +x ocamlcomp.sh
+
+@@ -293,7 +293,7 @@ partialclean::
+
+ ocamlopt: $(OPTOBJS)
+ $(CAMLC) $(LINKFLAGS) -o ocamlopt $(OPTOBJS)
+- @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlopt|' \
++ @sed -e 's|@compiler@|$$topdir/boot/ocamlrun $$topdir/ocamlopt|g' \
+ driver/ocamlcomp.sh.in > ocamlcompopt.sh
+ @chmod +x ocamlcompopt.sh
+
+@@ -383,7 +383,7 @@ ocamlc.opt: $(COMPOBJS:.cmo=.cmx)
+ $(CAMLOPT) $(LINKFLAGS) -ccopt "$(BYTECCLINKOPTS)" -o ocamlc.opt \
+ $(COMPOBJS:.cmo=.cmx) \
+ asmrun/meta.o asmrun/dynlink.o -cclib "$(BYTECCLIBS)"
+- @sed -e 's|@compiler@|$$topdir/ocamlc.opt|' \
++ @sed -e 's|@compiler@|$$topdir/ocamlc.opt|g' \
+ driver/ocamlcomp.sh.in > ocamlcomp.sh
+ @chmod +x ocamlcomp.sh
+
+@@ -394,7 +394,7 @@ partialclean::
+
+ ocamlopt.opt: $(OPTOBJS:.cmo=.cmx)
+ $(CAMLOPT) $(LINKFLAGS) -o ocamlopt.opt $(OPTOBJS:.cmo=.cmx)
+- @sed -e 's|@compiler@|$$topdir/ocamlopt.opt|' \
++ @sed -e 's|@compiler@|$$topdir/ocamlopt.opt|g' \
+ driver/ocamlcomp.sh.in > ocamlcompopt.sh
+ @chmod +x ocamlcompopt.sh
+
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-configure.patch b/dev-lang/ocaml/files/ocaml-3.09.3-configure.patch
new file mode 100644
index 000000000000..c458f6987dbc
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-configure.patch
@@ -0,0 +1,120 @@
+Index: ocaml-3.09.3/configure
+===================================================================
+--- ocaml-3.09.3.orig/configure
++++ ocaml-3.09.3/configure
+@@ -240,65 +240,65 @@ exe=""
+ case "$bytecc,$host" in
+ cc,*-*-nextstep*)
+ # GNU C extensions disabled, but __GNUC__ still defined!
+- bytecccompopts="-fno-defer-pop $gcc_warnings -U__GNUC__ -posix"
+- bytecclinkopts="-posix";;
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -U__GNUC__ -posix"
++ bytecclinkopts="$bytecclinkopts -posix";;
+ *,*-*-rhapsody*)
+ # Almost the same as NeXTStep
+- bytecccompopts="-fno-defer-pop $gcc_warnings -DSHRINKED_GNUC"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -DSHRINKED_GNUC"
+ mathlib="";;
+ *,*-*-darwin*)
+ # Almost the same as rhapsody
+- bytecccompopts="-fno-defer-pop -no-cpp-precomp $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop -no-cpp-precomp $gcc_warnings"
+ mathlib="";;
+ *,*-*-beos*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings"
+ # No -lm library
+ mathlib="";;
+ gcc,alpha*-*-osf*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings"
+ if cc="$bytecc" sh ./hasgot -mieee; then
+ bytecccompopts="-mieee $bytecccompopts";
+ fi
+ # Put code and static data in lower 4GB
+- bytecclinkopts="-Wl,-T,12000000 -Wl,-D,14000000"
++ bytecclinkopts="$bytecclinkopts -Wl,-T,12000000 -Wl,-D,14000000"
+ # Tell gcc that we can use 32-bit code addresses for threaded code
+ echo "#define ARCH_CODE32" >> m.h;;
+ cc,alpha*-*-osf*)
+- bytecccompopts="-std1 -ieee";;
++ bytecccompopts="$bytecccompopts -std1 -ieee";;
+ gcc,alpha*-*-linux*)
+ if cc="$bytecc" sh ./hasgot -mieee; then
+ bytecccompopts="-mieee $bytecccompopts";
+ fi;;
+ cc,mips-*-irix6*)
+ # Add -n32 flag to ensure compatibility with native-code compiler
+- bytecccompopts="-n32"
++ bytecccompopts="$bytecccompopts -n32"
+ # Turn off warning "unused library"
+- bytecclinkopts="-n32 -Wl,-woff,84";;
++ bytecclinkopts="$bytecclinkopts -n32 -Wl,-woff,84";;
+ cc*,mips-*-irix6*)
+ # (For those who want to force "cc -64")
+ # Turn off warning "unused library"
+- bytecclinkopts="-Wl,-woff,84";;
++ bytecclinkopts="$bytecclinkopts -Wl,-woff,84";;
+ *,alpha*-*-unicos*)
+ # For the Cray T3E
+- bytecccompopts="-DUMK";;
++ bytecccompopts="$bytecccompopts -DUMK";;
+ gcc*,powerpc-*-aix*)
+ # Avoid name-space pollution by requiring Unix98-conformant includes
+- bytecccompopts="-fno-defer-pop $gcc_warnings -D_XOPEN_SOURCE=500";;
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -D_XOPEN_SOURCE=500";;
+ *,powerpc-*-aix*)
+- bytecccompopts="-D_XOPEN_SOURCE=500";;
++ bytecccompopts="$bytecccompopts -D_XOPEN_SOURCE=500";;
+ gcc*,*-*-cygwin*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings -U_WIN32"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings -U_WIN32"
+ exe=".exe"
+ ostype="Cygwin";;
+ gcc*,x86_64-*-linux*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings"
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings"
+ # Tell gcc that we can use 32-bit code addresses for threaded code
+ # unless we are compiled for a shared library (-fPIC option)
+ echo "#ifndef __PIC__" >> m.h
+ echo "# define ARCH_CODE32" >> m.h
+ echo "#endif" >> m.h;;
+ gcc*)
+- bytecccompopts="-fno-defer-pop $gcc_warnings";;
++ bytecccompopts="$bytecccompopts -fno-defer-pop $gcc_warnings";;
+ esac
+
+ # Configure compiler to use in further tests
+@@ -609,22 +609,22 @@ else
+ nativecc="$ccoption"
+ fi
+
+-nativecccompopts=''
+-nativecclinkopts=''
++nativecccompopts=""
++nativecclinkopts=""
+ nativeccrpath="$byteccrpath"
+
+ case "$arch,$nativecc,$system,$host_type" in
+- alpha,cc*,digital,*) nativecccompopts=-std1;;
+- mips,cc*,irix,*) nativecccompopts=-n32
+- nativecclinkopts="-n32 -Wl,-woff,84";;
+- *,*,nextstep,*) nativecccompopts="$gcc_warnings -U__GNUC__ -posix"
+- nativecclinkopts="-posix";;
++ alpha,cc*,digital,*) nativecccompopts="$nativecccompopts -std1";;
++ mips,cc*,irix,*) nativecccompopts="$nativecccompopts -n32"
++ nativecclinkopts="$nativecclinkopts -n32 -Wl,-woff,84";;
++ *,*,nextstep,*) nativecccompopts="$nativecccompopts $gcc_warnings -U__GNUC__ -posix"
++ nativecclinkopts="$nativecclinkopts -posix";;
+ *,*,rhapsody,*darwin[1-5].*)
+- nativecccompopts="$gcc_warnings -DSHRINKED_GNUC";;
++ nativecccompopts="$nativecccompopts $gcc_warnings -DSHRINKED_GNUC";;
+ *,*,rhapsody,*)
+- nativecccompopts="$gcc_warnings -DDARWIN_VERSION_6 $dl_defs";;
++ nativecccompopts="$nativecccompopts $gcc_warnings -DDARWIN_VERSION_6 $dl_defs";;
+ *,gcc*,cygwin,*) nativecccompopts="$gcc_warnings -U_WIN32";;
+- *,gcc*,*,*) nativecccompopts="$gcc_warnings";;
++ *,gcc*,*,*) nativecccompopts="$nativecccompopts $gcc_warnings";;
+ esac
+
+ asflags=''
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch b/dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch
new file mode 100644
index 000000000000..3d46d4aede38
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-exec-stack-fixes.patch
@@ -0,0 +1,281 @@
+--- ocaml-3.09.3/asmrun/alpha.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/alpha.S 2006-11-02 18:53:12.000000000 +0100
+@@ -438,3 +438,7 @@
+ .word -1 /* negative frame size => use callback link */
+ .word 0 /* no roots here */
+ .align 3
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/amd64.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/amd64.S 2006-11-02 18:53:12.000000000 +0100
+@@ -334,3 +334,7 @@
+ .align 16
+ caml_absf_mask:
+ .quad 0x7FFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/arm.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/arm.S 2006-11-02 18:53:12.000000000 +0100
+@@ -337,3 +337,7 @@
+ .short -1 /* negative frame size => use callback link */
+ .short 0 /* no roots */
+ .align 2
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/hppa.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/hppa.S 2006-11-02 18:53:12.000000000 +0100
+@@ -532,3 +532,7 @@
+ .long L104 + 3 /* return address into callback */
+ .short -1 /* negative frame size => use callback link */
+ .short 0 /* no roots */
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/i386.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/i386.S 2006-11-02 18:53:12.000000000 +0100
+@@ -371,3 +371,7 @@
+ #ifdef __ELF__
+ .section .note.GNU-stack,"",%progbits
+ #endif
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/ia64.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/ia64.S 2006-11-02 18:53:12.000000000 +0100
+@@ -528,3 +528,7 @@
+
+ .common caml_saved_bsp#, 8, 8
+ .common caml_saved_rnat#, 8, 8
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/m68k.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/m68k.S 2006-11-02 18:53:12.000000000 +0100
+@@ -242,3 +242,7 @@
+ .long L107 | return address into callback
+ .word -1 | negative frame size => use callback link
+ .word 0 | no roots here
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/power-elf.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/power-elf.S 2006-11-02 18:53:12.000000000 +0100
+@@ -419,3 +419,7 @@
+ .short -1 /* negative size count => use callback link */
+ .short 0 /* no roots here */
+
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+--- ocaml-3.09.3/asmrun/sparc.S.old 2006-11-02 18:53:12.000000000 +0100
++++ ocaml-3.09.3/asmrun/sparc.S 2006-11-02 18:53:12.000000000 +0100
+@@ -405,3 +405,7 @@
+ .type Caml_raise_exception, #function
+ .type Caml_system__frametable, #object
+ #endif
++#ifdef __ELF__
++.section .note.GNU-stack,"",%progbits
++#endif
++
+diff -ru ../ref/ocaml-3.09.3/asmcomp/alpha/emit.mlp ocaml-3.09.3/asmcomp/alpha/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/alpha/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/alpha/emit.mlp 2006-11-03 10:35:40.000000000 +0100
+@@ -811,6 +811,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -843,6 +849,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly () =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .globl {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/amd64/emit.mlp ocaml-3.09.3/asmcomp/amd64/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/amd64/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/amd64/emit.mlp 2006-11-03 10:35:48.000000000 +0100
+@@ -658,6 +658,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -671,6 +677,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .globl {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/arm/emit.mlp ocaml-3.09.3/asmcomp/arm/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/arm/emit.mlp 2004-05-03 14:46:50.000000000 +0200
++++ ocaml-3.09.3/asmcomp/arm/emit.mlp 2006-11-03 10:35:55.000000000 +0100
+@@ -642,6 +642,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -661,6 +667,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly () =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .global {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/hppa/emit.mlp ocaml-3.09.3/asmcomp/hppa/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/hppa/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/hppa/emit.mlp 2006-11-03 10:36:03.000000000 +0100
+@@ -994,6 +994,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -1022,6 +1028,7 @@
+
+
+ let end_assembly() =
++ nx_stack();
+ ` .code\n`;
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ declare_global lbl_end;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/i386/emit.mlp ocaml-3.09.3/asmcomp/i386/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/i386/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/i386/emit.mlp 2006-11-03 10:21:41.000000000 +0100
+@@ -914,6 +914,11 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux_elf" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -927,6 +932,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .text\n`;
+ ` .globl {emit_symbol lbl_end}\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/ia64/emit.mlp ocaml-3.09.3/asmcomp/ia64/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/ia64/emit.mlp 2004-07-13 14:18:53.000000000 +0200
++++ ocaml-3.09.3/asmcomp/ia64/emit.mlp 2006-11-03 10:36:13.000000000 +0100
+@@ -1306,6 +1306,12 @@
+ ` .align 8\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -1315,6 +1321,7 @@
+ emit_define_symbol (Compilenv.make_symbol (Some "code_begin"))
+
+ let end_assembly () =
++ nx_stack();
+ ` .data\n`;
+ emit_define_symbol (Compilenv.make_symbol (Some "data_end"));
+ ` .text\n`;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/power/emit.mlp ocaml-3.09.3/asmcomp/power/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/power/emit.mlp 2004-06-19 19:39:34.000000000 +0200
++++ ocaml-3.09.3/asmcomp/power/emit.mlp 2006-11-03 10:36:29.000000000 +0100
+@@ -879,6 +879,12 @@
+ emit_string data_space;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "elf" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -898,6 +904,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ (* Emit the jump table *)
+ if !num_jumptbl_entries > 0 then begin
+ emit_string code_space;
+diff -ru ../ref/ocaml-3.09.3/asmcomp/sparc/emit.mlp ocaml-3.09.3/asmcomp/sparc/emit.mlp
+--- ../ref/ocaml-3.09.3/asmcomp/sparc/emit.mlp 2006-03-29 16:49:19.000000000 +0200
++++ ocaml-3.09.3/asmcomp/sparc/emit.mlp 2006-11-03 10:36:36.000000000 +0100
+@@ -741,6 +741,12 @@
+ ` .data\n`;
+ List.iter emit_item l
+
++(* Mark stack as non executable *)
++let nx_stack() =
++ if Config.system = "linux" then
++ ` .section .note.GNU-stack,\"\",%progbits\n`
++
++
+ (* Beginning / end of an assembly file *)
+
+ let begin_assembly() =
+@@ -754,6 +760,7 @@
+ `{emit_symbol lbl_begin}:\n`
+
+ let end_assembly() =
++ nx_stack();
+ ` .text\n`;
+ let lbl_end = Compilenv.make_symbol (Some "code_end") in
+ ` .global {emit_symbol lbl_end}\n`;
diff --git a/dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch b/dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch
new file mode 100644
index 000000000000..a990d41b1186
--- /dev/null
+++ b/dev-lang/ocaml/files/ocaml-3.09.3-execheap.patch
@@ -0,0 +1,13 @@
+--- ocaml-3.09.3.orig/driver/ocamlcomp.sh.in 2002-06-08 03:27:50.000000000 +0000
++++ ocaml-3.09.2/driver/ocamlcomp.sh.in 2007-04-21 17:27:24.000000000 +0000
+@@ -2,4 +2,10 @@
+
+ topdir=`dirname $0`
+
++# evil hack for evil build system.
++if [ -x /usr/bin/scanelf ]; then
++ [ "$(scanelf @compiler@ -BF%x#f)" != "--mxe-" ] && scanelf -qXx -z mxe @compiler@ > /dev/null
++fi
++
++
+ exec @compiler@ -nostdlib -I $topdir/stdlib "$@"