Fix the EXEC_STACK in ocaml compiled binaries (#153382) Index: ocaml-4.02.2/asmrun/sparc.S =================================================================== --- ocaml-4.02.2.orig/asmrun/sparc.S +++ ocaml-4.02.2/asmrun/sparc.S @@ -356,3 +356,8 @@ caml_system__frametable: .type caml_raise_exception, #function .type caml_system__frametable, #object #endif + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif + Index: ocaml-4.02.2/asmcomp/arm/emit.mlp =================================================================== --- ocaml-4.02.2.orig/asmcomp/arm/emit.mlp +++ ocaml-4.02.2/asmcomp/arm/emit.mlp @@ -888,6 +888,13 @@ let data l = ` .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() = @@ -920,6 +927,7 @@ let begin_assembly() = `{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`; Index: ocaml-4.02.2/asmcomp/power/emit.mlp =================================================================== --- ocaml-4.02.2.orig/asmcomp/power/emit.mlp +++ ocaml-4.02.2/asmcomp/power/emit.mlp @@ -882,6 +882,12 @@ let data l = 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 @@ let begin_assembly() = `{emit_symbol lbl_begin}:\n` let end_assembly() = + nx_stack(); if pic_externals then (* Emit the pointers to external functions *) StringSet.iter emit_external !external_functions; Index: ocaml-4.02.2/asmcomp/sparc/emit.mlp =================================================================== --- ocaml-4.02.2.orig/asmcomp/sparc/emit.mlp +++ ocaml-4.02.2/asmcomp/sparc/emit.mlp @@ -724,6 +724,12 @@ let data l = ` .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() = @@ -737,6 +743,7 @@ let begin_assembly() = `{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`; Index: ocaml-4.02.2/asmrun/power-elf.S =================================================================== --- ocaml-4.02.2.orig/asmrun/power-elf.S +++ ocaml-4.02.2/asmrun/power-elf.S @@ -478,3 +478,8 @@ caml_system__frametable: .long .L105 + 4 /* return address into callback */ .short -1 /* negative size count => use callback link */ .short 0 /* no roots here */ + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif + Index: ocaml-4.02.2/asmrun/arm.S =================================================================== --- ocaml-4.02.2.orig/asmrun/arm.S +++ ocaml-4.02.2/asmrun/arm.S @@ -498,3 +498,7 @@ caml_system__frametable: .align 2 .type caml_system__frametable, %object .size caml_system__frametable, .-caml_system__frametable + +#ifdef __ELF__ +.section .note.GNU-stack,"",%progbits +#endif